matlab非线性二元函数拟合2
发布网友
发布时间:2023-10-21 12:32
我来回答
共1个回答
热心网友
时间:2024-12-14 10:35
直接把下面的代码复制到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;