lsqcurvefit 多元非线性拟合出的曲线不准确

clearclcx1=[22.115.610.113.221.423.520.324.29.511.315.917.219.821.123.425.110.212.424... clear
clc
x1=[22.1 15.6 10.1 13.2 21.4 23.5 20.3 24.2 9.5 11.3 15.9 17.2 19.8 21.1 23.4 25.1 10.2 12.4 24.1 16.5 17.9 21.0 23.2 25.0 10.7 12.1 14.5 16.8 19.9 21.6 23.3];
x2=[17.5 15.0 9.4 11.5 17.9 18.7 16.9 18.8 9.3 10.5 14.9 16.8 17.1 17.3 17.9 18.4 9.9 12.0 18.2 14.1 15.3 16.8 17.6 19.1 10.4 11.8 13.9 15.5 16.9 17.2 17.7 19.3 10.5 12.1 15.0 16.7 16.9 17.3 18.1 18.1 9.61];
x3=[7.1 4.5 3.1 4.2 7.2 7.9 6.7 7.9 3.2 3.9 5.4 6.6 6.9 7.0 7.7 8.1 3.2 4.1 7.9 5.2 5.9 6.7 7.3 8.2 3.5 3.7 4.3 5.5 6.4 7.1 7.4 8.2 3.3 3.8];
x4=[7.1 6.0 4.9 5.3 6.8 7.7 6.9 7.2 3.2 4.1 5.3 6.9 6.7 6.8 7.5 8.3 3.4 4.3 7.4 5.5 5.6 6.8 7.1 8.3 3.2 3.8 4.5 5.3 6.8 7.5 7.1 8.0 3.4 4.0];
x5=[9.6 7.9 5.5 5.6 7.1 7.4 7.3 8.1 3.9 4.9 6.7 8.7 7.9 7.7 9.5 9.9 4.5 5.7 9.8 7.7 7.5 8.8 9.4 10.5 4.3 5.1 6.5 7.2 8.4 9.7 9.5 9.9 4.8 5.9 6.8 7.2 8.4 8.3 9.7];
y=[2.35 0.90 0.79 0.82 2.27 2.44 2.21 2.43 0.73 0.87 1.03 1.51 2.05 2.27 2.44 2.57 0.78 0.82 2.53 1.54 1.48 2.26 2.41 2.67 0.88 0.80 1.01 1.43 2.02 2.29 2.45 2.69 0.77 0.83 1.05 1.82 2.05 2.21 2.47 2.51];(数据不全,写不下)
x=[x1,x2,x3,x4,x5];
X0=[1 1 1 1 1 1 1 1 1 1];
f=@(p,x)(p(1)+p(2)*x1+p(3)*x2+p(4)*x3+p(5)*x4+p(6)*x5+p(7)*x1.^2+p(8)*x2.^2+p(9)*x3.^2+p(10)*x4.^2);
p=lsqcurvefit(f,X0,x,y);
拟合出结果
p =

5.1820 1.0354 -1.6106 -0.0532 -0.6781 0.0666 -0.0226 0.0506 0.0048 0.0462
然而把5个自变量的值回带进解析式和因变量的值差太多了吧?求解
把一组5个自变量的值回带会方程得到的y值和实际对应的y值差了十万八千里,感觉拟合出的解析式和数据完全对不上
完整数据在这里
http://zhidao.baidu.com/question/1305867810202122459.html
展开
 我来答
PeriShare
2016-05-17 · 分享PD理论最新研究成果和进展
PeriShare
采纳数:2408 获赞数:36826

向TA提问 私信TA
展开全部

你好,为你解答,因为你的x长度不一,我给你一个统一长度。下面是我修改过的代码。

clear
clc
x1=[22.1 15.6 10.1 13.2 21.4 23.5 20.3 24.2 9.5 11.3...
    15.9 17.2 19.8 21.1 23.4 25.1 10.2 12.4 24.1 16.5...
    17.9 21.0 23.2 25.0 10.7 12.1 14.5 16.8 19.9 21.6 23.3];
x2=[17.5 15.0 9.4 11.5 17.9 18.7 16.9 18.8 9.3 10.5...
    14.9 16.8 17.1 17.3 17.9 18.4 9.9 12.0 18.2 14.1...
    15.3 16.8 17.6 19.1 10.4 11.8 13.9 15.5 16.9 17.2...
    17.7 19.3 10.5 12.1 15.0 16.7 16.9 17.3 18.1 18.1 9.61];
x3=[7.1 4.5 3.1 4.2 7.2 7.9 6.7 7.9 3.2 3.9 5.4 6.6 6.9...
    7.0 7.7 8.1 3.2 4.1 7.9 5.2 5.9 6.7 7.3 8.2 3.5 3.7 4.3...
    5.5 6.4 7.1 7.4 8.2 3.3 3.8];
x4=[7.1 6.0 4.9 5.3 6.8 7.7 6.9 7.2 3.2 4.1 5.3 6.9 6.7 6.8...
    7.5 8.3 3.4 4.3 7.4 5.5 5.6 6.8 7.1 8.3 3.2 3.8 4.5 5.3 6.8 7.5 7.1 8.0 3.4 4.0];
x5=[9.6 7.9 5.5 5.6 7.1 7.4 7.3 8.1 3.9 4.9 6.7 8.7 7.9 7.7...
    9.5 9.9 4.5 5.7 9.8 7.7 7.5 8.8 9.4 10.5 4.3 5.1 6.5 7.2...
    8.4 9.7 9.5 9.9 4.8 5.9 6.8 7.2 8.4 8.3 9.7];
y=[2.35 0.90 0.79 0.82 2.27 2.44 2.21 2.43 0.73 0.87 1.03 1.51...
    2.05 2.27 2.44 2.57 0.78 0.82 2.53 1.54 1.48 2.26 2.41 2.67...
    0.88 0.80 1.01 1.43 2.02 2.29 2.45 2.69 0.77 0.83 1.05 1.82 2.05 2.21 2.47 2.51];
n1=length(x1);
n2=length(x2);
n3=length(x3);
n4=length(x4);
n5=length(x5);
nmin=min([n1,n2,n3,n4,n5]);
x=[x1(1:nmin)' x2(1:nmin)' x3(1:nmin)' x4(1:nmin)' x5(1:nmin)'];
y=y((1:nmin))';
X0=[1 1 1 1 1 1 1 1 1 1];
f=@(p,x) p(1)+p(2)*x(:,1)+p(3)*x(:,2)+p(4)*x(:,3)+p(5)*x(:,4)+p(6)*x(:,5)+p(7)*x(:,1).^2+p(8)*x(:,2).^2+p(9)*x(:,3).^2+p(10)*x(:,4).^2;
p=lsqcurvefit(f,X0,x,y);
yfit=p(1)+p(2)*x(:,1)+p(3)*x(:,2)+p(4)*x(:,3)+p(5)*x(:,4)+p(6)*x(:,5)+p(7)*x(:,1).^2+p(8)*x(:,2).^2+p(9)*x(:,3).^2+p(10)*x(:,4).^2;
plot(1:length(y),y)
hold on
plot(1:length(y),yfit,'r')
legend('拟合前','拟合后')

结果以下标为计数x轴。拟合还算完美。

希望我的回答能够帮到你,满意还请采纳哟,O(∩_∩)O谢谢

更多追问追答
追问
感谢您的回答,数据不一样长是因为太长写不下,就随便删了几个。您的代码拟合出来的参数p和我之前那个结果是一样的,不过用这个参数去验证原来的数据点却产生了极大的误差,因为题目要求用拟合出的曲线预测新的数据,如果原数据都有那么大误差,那新数据简直不忍直视,这是什么原因呢?
追答
可以把数据发给我一份么
lhmhz
高粉答主

推荐于2017-11-22 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7263 获赞数:17001

向TA提问 私信TA
展开全部
由于初值X0,取值不合适,而造成误差。程序没有什么问题。
现根据已知数据(数据不全),只取了前31组数据进行拟合。
X0=[0.49655 0.89977 0.82163 0.64491 0.81797 0.66023 0.34197 0.28973 0.34119 0.53408];
拟合出结果
p =4.087443526, .8628368467, -1.349376675, .1604071553, -.5950635879, .4450238739e-1, -.1815507138e-1, .4118321260e-1, -.8091771686e-2, .4197298550e-1
y已知值与y拟合值的相关系数为R²=0.98218
追问
我安您说的修改了的X0值,但出来的参数P结果完全没变。。。是我哪边出问题了么?
追答
根据你的数据进行拟合,得到
p1= 5.182,p2= 1.0354,p3=-1.6106,p4=-0.053248,p5=-0.67812,p6=0.066649 ,p7= -0.02258,p8=0.050592,p9=0.0048091,p10=0.046175
相关系数R^2=0.98446
程序在Matlab2013b通过。
说明,由于版本不同,得到的结果可能有差别。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式