曲线拟合最小二乘法

(生成函数为1,x,x2,x3,…,x^n)

M文件
function a=LSF(x0,y0,w,n)
G=zeros(n+1,n+1);
d=zeros(n+1,1);
a=zeros(n+1,1);
m=length(x0);

for i=1:n+1
for j=i:n+1

把这部分补上,提示 w(k)*x0(k).^(i-1); w(k)表示权系数;x0(k).^(i-1)表示幂次;G(j,i)=G(i,j);G为法矩阵。需要两个循环。向量d(i,1)=0;为初始值。
end
a=G\d;
a=flipud(a);
end

程序
clear
x0=[0.0 0.1 0.2 0.3 0.5 0.8 1.0];
y0=[1.0 0.41 0.50 0.61 0.91 2.02 2.46];
w=ones(size(x0));
%subplot(2,2,1);
x=0:0.01:1;
al=LSF(x0,y0,w,2);
y=polyval(al,x);
plot(x0,y0,‘ok’,x,y,‘r’)
title(‘2次曲线拟合’);
legend(‘y0’,‘y’);

填写

效果图

下面是教材150页,列主元消去法解线性方程组,补充完整并运行

function time = ColumnPivot(n, A, b)

%B = [A b];
tic;
for k = 1:n-1
max =abs(A(k,k));
m = k;
for j = k+1:n
if
max = ;
m = ;
end
end
disp(m);
A([k m], ) = A([m k], );
temp = b(m);
b(m) = b(k);
b(k) = temp;
disp(A);

 if A(k,k) == 0
      disp('the matrix has too many answers, please change the matrix');
      return
   end    
  for i = k+1:n
     m =                      ;
     A(i, k) =            ;
     A(i, k+1:n) =               ;
     b(i) =                       ;
  end
  disp(A);

end

x = zeros(n,1);
%disp(x)
if A(n, n) == 0
disp(‘the matrix has too many answers, please change the matrix’);
return
end

x(n) = b(n) / A(n,n);
for i = 1:n-1
x(i) = (b(i) - sum(A(i,i+1:n) * x(i+1:n)))/A(i,i);
%disp(x(i));
end
disp(x);
toc;
time = toc;
end

程序
A=[0.001,2,3;-1,3.712,4.623;-2,1.072,5.643];
b=[1,2,3]’;
ColumnPivot(3,A,b);

参考


效果图