利用最小二乘法做拟合
x = [620 724 789 663 690 700 745 628 601 739];
y = [658 749 799 682 706 735 768 641 615 767];
z = [340 400 605 433 450 354 409 590 584 387];
w = [1070469.3811, 716662.5706, 401191.2893, 645279.5126, 543760.2719, 913063.85240, 656069.2929,637048.2656, 708880.29095, 59848.4834];
x1 = y.*z./x;
x2 = y.^2./x;
x3 = y;
q=[x1;x2;x3];
M = q*q';
b = q*w';
ABC = inv(M)*b;
wfit = ABC(1)*x1 + ABC(2)*x2 + ABC(3)*x3;
plot(w,wfit,'r*')
hold on
plot([min([w,wfit]),max([w,wfit])],[min([w,wfit]),max([w,wfit])])
legend('w-wfit','y=x')
xlabel('w');ylabel('wfit')
hold on
结果
ABC =
1.0e+04 *
0.1832
2.8775
-3.0020
1、将已知值分别赋值给x,y,z,w。即
x=[。。。]';y=[。。。]';z=[。。。]';w=[。。。]';
2、将自变量x,y,z组合成新的向量X,以便参与计算。即
X=[x,y,z];
2、将因变量w赋值给Y。即
Y=w;
3、自定义数学模型函数(定义时应注意点运算符),即
fun=@(p,X)p(1)*X(:,2).*X(:,3)./X(:,1)+p(2)*X(:,2).^2./X(:,1)+p(3)*X(:,2);
4、确定p的初始值。一般先可以用随机数,如p0=rand(1,3)
5、使用nlinfit函数或lsqcurvefit函数,求解系数p值。即A=p(1),B=p(2),C=p(3)
6、计算拟合值,Y1=fun@(p,X)
7、显示原数据和拟合数据。即
disp('原数据w 拟合数据w1')
[Y Y1]