matlab多元函数非线性拟合问题
matlab多元函数非线性拟合问题:x1=[1.4836305941.5755071741.5750098251.5500498151.5096858481.422180...
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.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、你的数据有问题: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;
展开全部
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])%%%方程系数矩阵
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])%%%方程系数矩阵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询