天天看點

matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介

plotfit函數使用

plot是畫圖函數

polyval是求值函數

polyfit是曲線拟合函數

polyfit用于多項式曲線拟合

p=polyfit(x,y,m)

其中, x, y為已知資料點向量, 分别表示橫,縱坐标, m為拟合多項式的次數, 結果傳回m次拟合多項式系數, 從高次到低次存放在向量p中.

y0=polyval(p,x0)

可求得多項式在x0處的值y0

clc;clear%清除變量
y=[                            
]; 
x=:length(y);
A=polyfit(x,y,)  %2次相拟合,這個可以修改的  模型系數
Z=polyval(A,x); %預測y
len=[:];
len1=polyval(Z,len); %預測走勢
result=[y;Z]%實際值與預測值
error=abs(y-Z);%誤差
bfb=error./y%相對誤差
errorsum=sum(error)/length(y)%平均誤差
bfbsum=sum(bfb)/length(y)%平均相對誤差
figure()
plot(x,y,'r-',x,Z,'b-')
legend('實際值','拟合值')
title('實際值與預測值的比較','fontsize',)
ylabel('Y','fontsize',)
xlabel('X','fontsize',)
figure()
plot(len,len1,'b-')
legend('拟合曲線')
title('拟合曲線圖','fontsize',)
ylabel('Y','fontsize',)
xlabel('X','fontsize',)
%http://blog.sina.com.cn/s/blog_4bf0985d0102v5yc.html 參考部落格
           

拟合結果

matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介
matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介

lsqcurvefit函數拟合

解釋1

格式 x = lsqcurvefit(fun,a0,xdata,ydata)

x = lsqcurvefit(fun,a0,xdata,ydata,lb,ub)

x = lsqcurvefit(fun,a0,xdata,ydata,lb,ub,options)

[x,resnorm] = lsqcurvefit(…)

[x,resnorm,residual] = lsqcurvefit(…)

[x,resnorm,residual,exitflag] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(…)

參數說明:

a0為初始解向量, 因為求解是一個疊代的過程,需要先給定一個初始參數,再逐漸修改參數的過程。是以要對a0初始化,一般而言,可以随機,但是經驗上取與解接近的值會提高計算速度。

xdata,ydata為滿足關系ydata=F(a, xdata)的資料;

lb、ub為解向量的下界和上界lb≤a≤ub,若沒有指定界,則lb=[ ],ub=[ ];

options為指定的優化參數;

fun為待拟合函數,計算x處拟合函數值,其定義為 function F = myfun(a,xdata)

resnorm=sum ((fun(a,xdata)-ydata).^2),即在a處殘差的平方和;

residual=fun(a,xdata)-ydata,即在x處的殘差;

exitflag為終止疊代的條件;

output為輸出的優化資訊;

lambda為解x處的Lagrange乘子;

jacobian為解x處拟合函數fun的jacobian矩陣。

解釋2

lsqcurvefit(f,a,x,y)

f:符号函數句柄,如果是以m檔案的形式調用的時候,别忘記加@.這裡需要注意,f函數的傳回值是和y匹對的,即拟合參數的标準是(f-y)^2取最小值,具體看下面的例子

a:最開始預估的值(預拟合的未知參數的估計值)。如下面的問題如果我們預估a(1)為1,a(2)為3,a(3)為7,a(4)為5,a(5)為7則a0=[1,3,7,5,7]

x:我們已經獲知的x的值

y:我們已經獲知的x對應的y的值

clc;clear%清除變量
y=[                            
]; 
xdata=:length(y);
a0=[,,,,];      %初始估計值,随便寫  這個是次拟合 ,具體表達式可以随便改
options=optimset('Tolfun',); %方法設定
for i=:
   x=lsqcurvefit(@fun1,a0,xdata,y,[],[],options);   %确定待定系數
   a0=x;%以計算出的x為初值,循環疊代次
end
disp(x);%輸出系數
yy = fun1(x,xdata);%利用已經拟合好的模型預測y值
len=[:];
len1 = fun1(x,len);%預測走勢
result=[y;yy]%實際值與預測值
error=abs(y-yy);%誤差
bfb=error./y%相對誤差
errorsum=sum(error)/length(y)%平均誤差
bfbsum=sum(bfb)/length(y)%平均相對誤差

figure()
plot(xdata,y,'r-',xdata,yy,'b-')
legend('實際值','拟合值')
title('實際值與預測值的比較','fontsize',)
ylabel('Y','fontsize',)
xlabel('X','fontsize',)
%axis([   ]);%坐标範圍
%set(gca,'xtick',[  ..]);%X軸設定
%set(gca,'ytick',[   ..]);%Y軸設定

figure()
plot(len,len1,'r-')
legend('拟合曲線')
title('拟合曲線圖','fontsize',)
ylabel('Y','fontsize',)
xlabel('X','fontsize',)

function y = fun1(a, x);
y = a() + a()*x + a()*x.^ + a()*x.^ + a()*x.^
           

非線性拟合需要自己先設定好函數表達式,我們可以自己先把原始資料畫個散點圖,看大體趨勢,然後自己構造函數

拟合結果

matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介

matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介

cftool函數拟合工具箱簡介

在指令框中輸入cftool出來如下圖

matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介
matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介
matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介

把可視化結果放大和修改 隻需要點選 檔案——print to Figure

然後就可以在圖檔上面修改坐标,标題等

matlab關于plotfit函數,lsqcurvefit函數,cftool工具箱的使用plotfit函數使用lsqcurvefit函數拟合cftool函數拟合工具箱簡介

參考連結

http://blog.sina.com.cn/s/blog_4d4afb6d0100t37n.html

繼續閱讀