📄 fit.asv
字号:
function Result = Fit(X,Y,maxM)%进行一倒十阶多项式拟合fit(X,Y) 中参数代表x,y矩阵%%输入数据检验begin[mx,nx]=size(X);[my,ny]=size(Y);if nx~=1|ny~=1|my~=mx|my<3 disp('输入数据不合法!,程序退出!'); return;end%%输入数据检验endN=mx;%数据数目%M=1-maxM变化拟合阶数for M=1:maxM a=FitProc(X,Y,M,N);%%%得到拟合常数%%%%%%%%%%%%%%求残差平方和---begin%%%%%%%%%%%%%QQ=0;%残差平方和for i=1:N QQ=QQ+(Y(i)-FitFun(M,a,X(i)))^2;endqq=QQ/(N-M-1);if(M==1) qq_return=qq; continue;else if abs(qq)<abs(qq_return) qq_return=qq; M_return=M; QQ_return=QQ; endend%%%%%%%%%%%%%%求残差平方和---end%%%%%%%%%%%%%end%%%%%%%%disp(sprintf('y=%f+%fx',a0,a1))%%%%%%%%%%%结果输出%%%%%%%%%%%%%disp('%%%%%%%%%%%% 多项式结果输出 %%%%%%%%%%%%%%')a=FitProc(X,Y,M_return,N);disp('拟合方差');disp(qq_return);disp('拟合阶数:');disp(M_return);disp('拟合常数:');disp(a);str=num2str(a(1));strcat('2',str);str%disp(str);for i=2:M_return str1=sprintf('+%fx^%d',a(i),(i-1)); strcat(str1,str); end%%%%%%%作图%%%%%%%%%%%t=floor(min(X)):0.1:ceil((max(X)));[temp1,temp2]=size(t);z=zeros(1,temp2);for i=1:temp2 z(i)=FitFun( M_return,a,t(i));endplot(X',Y','*',t,z);str=sprintf('%d阶多项式拟合曲线图',M_return);title(str);xlabel('X');Ylabel('Y');disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')%%%%%%%作图%%%%%%%%%%%%%%%%%%%%%%结果输出%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%定义子函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FitProc %%%%%%%%%%%%%%%%%%%%%%function a=FitProc(X,Y,M,N)%多项式拟和子函数C=zeros(M+1,M+1);%系数矩阵B=zeros(M+1,1);%常数矢量A=zeros(M+1,1);%a0 a1 ....am%%%%%取得系数矩阵C--beginSUMXX=zeros(2*M);%1次到2m次x的平方和SUMXX(m)=x^m的平方和for i=1:2*M SUMXX(i)=SumXX(X,i);endC(1,1)=N;for i=2:M+1 C(1,i)=SUMXX(i-1);endfor i=2:M+1 k=i-1; for j=1:M+1 C(i,j)=SUMXX(k); k=k+1; endend%%%%%取得系数矩阵C--end%%%%%取得常数矢量矩阵B--beginfor i=1:M+1 sum=0; for j=1:N sum=sum+Y(j)*X(j)^(i-1); end B(i)=sum;end%%%%%取得常数矢量矩阵B--end%%%%%%a0 a1 ....am矩阵A--beginA=inv(C)*B;%%%%%%a0 a1 ....am矩阵A--begina=A;return;%%%%%%%%%%%%%%%%% SumXX %%%%%%%%%%%%%%%%%%%%%%function Sum_XX=SumXX(X,m)%求X矩阵中x的m次方的平方和[mm,nn]=size(X);sum=0;for i=1:mm sum=sum+power(X(i),m);endSum_XX=sum;return;%%%%%%%%%%%%%%%%% FitFun %%%%%%%%%%%%%%%%%%%%%%%%%%%%根据拟合常数a0,a1.....求拟合的值function y=FitFun(M,a,x)sum=0;for i=1:M+1 sum=sum+a(i)*x^(i-1);endy=sum;return;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%定义子函数%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -