matlab非线性二元函数拟合
对于一组数据,x,y是自变量,z是因变量,如何用matlab拟合曲线函数形式是z=a*x^b+c*y^d;拟合参数是a,b,c,d求高手解答,必有重谢!!^_^因为本人接...
对于一组数据,x,y是自变量,z是因变量,如何用matlab拟合曲线
函数形式是z=a*x^b+c*y^d;拟合参数是a,b,c,d
求高手解答,必有重谢!!^_^
因为本人接触matlab时间不长,最好能把具体步骤写出来,能运行的
X
0.7342161 1.0781403 1.5074979 2.10071238 2.7207252 0.7578 1.29915 1.773 2.3787 3.22695 1.0023861 1.7386797 2.453854947 3.25158774 4.2612366 0.9871911 1.69404906 2.568524256 3.3773721 4.4731476 0.6442875 1.12275 1.5305625 2.005875 2.71425 0.7578 1.29915 1.773 2.3787 3.22695 0.870975 1.467375 2.057475 2.75835 3.74115 0.9834 1.6446 2.301 3.1242 4.1808
Y 0.3651 0.3651 0.3651 0.3651 0.3651 0.45 0.45 0.45 0.45 0.45 0.6261 0.6261 0.6261 0.6261 0.6261 0.6621 0.6621 0.6621 0.6621 0.6621 0.375 0.375 0.375 0.375 0.375 0.45 0.45 0.45 0.45 0.45 0.525 0.525 0.525 0.525 0.525 0.6 0.6 0.6 0.6 0.6
Z 24440.89853 23943.76848 23193.67631 22926.98289 21681.87443 25668.96149 24580.66348 23803.86133 23500.60974 22964.55154 26528.16165 25117.13724 24534.89089 24280.62999 23633 26987 25445.94766 25024 24675 24046 24890.84815 24034.2984 23246.34605 22755.04935 22507.68949 25668.96149 24580.66348 23803.86133 23500.60974 22964.55154 26394.33552 25148.87994 24156.57454 23967.37768 23289.44546 27359.34741 25515.34388 24621.19665 24348.33904 23671.68302
如果感觉这些数据麻烦的话,随便举几个数就行了,只要能看明白是如何编程运行的就行 展开
函数形式是z=a*x^b+c*y^d;拟合参数是a,b,c,d
求高手解答,必有重谢!!^_^
因为本人接触matlab时间不长,最好能把具体步骤写出来,能运行的
X
0.7342161 1.0781403 1.5074979 2.10071238 2.7207252 0.7578 1.29915 1.773 2.3787 3.22695 1.0023861 1.7386797 2.453854947 3.25158774 4.2612366 0.9871911 1.69404906 2.568524256 3.3773721 4.4731476 0.6442875 1.12275 1.5305625 2.005875 2.71425 0.7578 1.29915 1.773 2.3787 3.22695 0.870975 1.467375 2.057475 2.75835 3.74115 0.9834 1.6446 2.301 3.1242 4.1808
Y 0.3651 0.3651 0.3651 0.3651 0.3651 0.45 0.45 0.45 0.45 0.45 0.6261 0.6261 0.6261 0.6261 0.6261 0.6621 0.6621 0.6621 0.6621 0.6621 0.375 0.375 0.375 0.375 0.375 0.45 0.45 0.45 0.45 0.45 0.525 0.525 0.525 0.525 0.525 0.6 0.6 0.6 0.6 0.6
Z 24440.89853 23943.76848 23193.67631 22926.98289 21681.87443 25668.96149 24580.66348 23803.86133 23500.60974 22964.55154 26528.16165 25117.13724 24534.89089 24280.62999 23633 26987 25445.94766 25024 24675 24046 24890.84815 24034.2984 23246.34605 22755.04935 22507.68949 25668.96149 24580.66348 23803.86133 23500.60974 22964.55154 26394.33552 25148.87994 24156.57454 23967.37768 23289.44546 27359.34741 25515.34388 24621.19665 24348.33904 23671.68302
如果感觉这些数据麻烦的话,随便举几个数就行了,只要能看明白是如何编程运行的就行 展开
1个回答
展开全部
直接把下面的代码复制到M文件编辑器中保存运行即可。
需要说明的是,拟合问题和初值关系很大,我这里给的初值是经过多次调整得到的。
目前得到的结果是[a,b,c,d]=[14678.3 -0.1447 14681.2 0.436]
结果应该还有可能进一步提高,例如可以修改优化算法设置的TolFun参数为更小的值。
function zd499535361
% x0 = [1 1 1 1];
x0 = [1.47E4 -0.15 1.47E4 0.44];
opt = optimset('MaxFunEvals', 1E4, 'MaxIter', 5E4);
x = lsqcurvefit(@f,x0,[X;Y],Z,[],[],opt);
a = x(1)
b = x(2)
c = x(3)
d = x(4)
% 绘图比较拟合结果和原始数据
z = a*X.^b + c*Y.^d;
plot(Z, '.-')
hold on
plot(z, 'ro')
function F = f(x, xdata)
a = x(1);
b = x(2);
c = x(3);
d = x(4);
x = xdata(1, :);y = xdata(2, :);
F = a*x.^b + c*y.^d;
需要说明的是,拟合问题和初值关系很大,我这里给的初值是经过多次调整得到的。
目前得到的结果是[a,b,c,d]=[14678.3 -0.1447 14681.2 0.436]
结果应该还有可能进一步提高,例如可以修改优化算法设置的TolFun参数为更小的值。
function zd499535361
% x0 = [1 1 1 1];
x0 = [1.47E4 -0.15 1.47E4 0.44];
opt = optimset('MaxFunEvals', 1E4, 'MaxIter', 5E4);
x = lsqcurvefit(@f,x0,[X;Y],Z,[],[],opt);
a = x(1)
b = x(2)
c = x(3)
d = x(4)
% 绘图比较拟合结果和原始数据
z = a*X.^b + c*Y.^d;
plot(Z, '.-')
hold on
plot(z, 'ro')
function F = f(x, xdata)
a = x(1);
b = x(2);
c = x(3);
d = x(4);
x = xdata(1, :);y = xdata(2, :);
F = a*x.^b + c*y.^d;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询