程序见下,几点说明:
1、你的数据有问题:x1、x2都是13个点,而y是12个点。我暂时按照舍去x最后那个点处理。
2、从现在的情况看,效果不好,这和你的数据是否适合所给拟合公式有关。尤其y第5个点感觉比较怪异。
3、拟合问题和初值关系很大,如果你能知道拟合参数的大概范围会对尽快得到理想的结果有帮助。
function
zd501259078
x1=[
1.483630594
1.575507174
1.575009825
1.550049815
1.509685848
1.422180961
1.397559392
1.289379364
1.460163938
1.414698256
1.461543476
1.328248649
];
x2=[
0.355159208
0.232657101
0.233320234
0.266600247
0.320418869
0.437092053
0.602440608
0.614160848
0.386448082
0.447068992
0.384608699
0.562335135
];
y=[
1.1725
1.15
1.13425
1.12125
1.05
1.2175
1.24075
1.25075
1.255
1.25675
1.26925
1.2675
];
x0
=
[0.47
-0.58
0.93
0.13];
opt
=
optimset('MaxFunEvals',
1E4,
'MaxIter',
5E4,
'TolFun',
1E-14);
x
=
lsqcurvefit(@f,x0,[x1
x2],y,[],[],opt);
num2str(x)
a
=
x(1)
b
=
x(2)
c
=
x(3)
d
=
x(4)
%
绘图比较拟合结果和原始数据
z
=
a*x1.^b
+
c*x2.^d;
plot(y,
'.-')
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;