回 帖 发 新 帖 刷新版面

主题:matlab 数据拟合方法

你好 
    在论坛上看到你的问题和我相识,有一组数据如下,怎样根据目标函数拟合算出a,b,c的大小。题目如下:
目标函数:z=a*x^b *y^c

X    Y    Z
70    25    3.9
70    50    8.5
70    100    25
80    25    5.5
80    50    12
80    100    34
90    25    7.5
90    50    18
90    100    46
100    25    10
100    50    22
100    100    60
200    25    65
200    50    150
200    100    400
300    25    200
300    50    450
300    100    1200
不知道如何编程求解 
谢谢

回复列表 (共2个回复)

沙发

x=[70, 70, 70, 80, 80, 80, 90, 90, 90, 100, 100, 100, 200, 200, 200, 300, 300, 300]';
y=[25, 50, 100, 25, 50, 100, 25, 50, 100, 25, 50, 100, 25, 50, 100, 25, 50, 100]';
z=[3.9, 8.5, 25, 5.5, 12, 34, 7.5, 18, 46, 10, 22, 60, 65, 150, 400, 200, 450, 1200]';
X=[x y];n=length(z);
fX=@(b,X)b(1)*X(:,1).^b(2).*X(:,2).^b(3);
b=[0.000000429798, 2.7107579, 1.3650115]
for l=1:5
    b=lsqcurvefit(fX,b,X,z);
    b=nlinfit(X,z,fX,b);
end
vpa(b,10)
SSz=var(z)*(n-1)
zhat=fX(b,X);
RSS=(z-yhat)'*(z-zhat)
Rsquare=(SSz-RSS)/SSz

板凳

我是一个MATLAB初学者,MATLAB很多功能都不了解,对于这个问题,我说一下我的想法。
可以方程两边先取对数,将其化为线性方程,在用解线性方程组的方法,将a,b,c看做未知数,用MATLAB解出最小二乘解,也许可以解出答案。

我来回复

您尚未登录,请登录后再回复。点此登录或注册