matlab多元函数非线性拟合问题

matlab多元函数非线性拟合问题: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
1.432710904
]

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
0.567289096
]
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
]
想拟合成y=a*(x1)^b+c*(x2)^d的形式,求助大神,最好有程序

程序见下,几点说明:
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;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-25
clc;clear;
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
];
%x和y大小不一致,我去掉了x最后一个元素
x=[x1 x2];
f=@(A,x)A(1)*x(:,1).^A(2)+A(3)*x(:,2).^A(4);
A=nlinfit(x,y,f,[1.47;-0.2;-0.1;-0.6])%%%方程系数矩阵
相似回答