24小时热门版块排行榜    

查看: 3044  |  回复: 11
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

料峭春寒5

新虫 (小有名气)

[求助] matlab多元线性回归拟合求助 已有2人参与

大家好,最近在尝试利用matlab进行多元线性回归拟合,由于是零基础感觉困难重重,请各位高手在百忙之中给予指点,该如何编程呢

T(温度)=[353.15 353.15 353.15 353.15 363.75 363.75 363.75 363.75 373.75 373.75 373.75 373.75 393.75 393.75 393.75 393.75 413.75 413.75 413.75 413.75];
d(密度)=[593.89 636.74 671.27 699.95 533.17 580.38 619.21 651.66 480.53 528.94 570.19 605.34 401.15 445.86 486.70 523.39 347.58 386.61 423.72 458.44];
S=[4.39 4.65 5.24 5.64 4.40 4.67 5.68 5.72 4.85 5.59 5.94 6.92 5.35 6.53 7.23 7.95 6.76 7.28 8.21 9.96];

需要拟合的方程是:ln S=k ln d+A/T+B

如何通过拟合求出k,A,B?

请大神们指点,感谢感谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

引用回帖:
8楼: Originally posted by smitest at 2017-08-29 09:50:47
算了,还是给你个参考,原始数据没贴上:
Z=log(S);
X=1./T;
Y=log(d);
% Z=kY+AX+B
a(1,1)=sum(Y.*Y);
a(2,1)=sum(X.*Y);
a(1,2)=a(2,1);
a(2,2)=sum(X.*X);
a(3,1)=sum(Y);
a(1,3)=a(3,1);
a(3,2)=sum ...

对于这个问题来说使用非线性最小二乘法来计算没有任何问题,你这里用的左除(mldivide),如果你打开帮助文件仔细阅读你会发现这样一行字,If A is a rectangular m-by-n matrix with m ~= n, and B is a matrix with m rows, then A\B returns a least-squares solution to the system of equations A*x= B. 意思是如果矩阵A是一个行列不相等的矩阵那么计算过程中采用最小二乘法,虽然非线性最小二乘法和线型最小二乘法可能存在一些差异,但是线型最小二乘法能够解决的问题非线性最小二乘法肯定是可以解决的,线性算是非线性的一种特殊形式,这里由于矩阵A的行列数不相等,所以不是一个唯一解的问题,因此才需要使用最小二乘法,左除之所以不需要提供初值是因为程序自动帮你选定了。
既然说使用非线性最小二乘法计算没有问题,那么计算结果为什么不同?这还是算法上的差异导致的,从结果可以看到两个方法计算的结果很接近,硬要说哪个好可以参考下面的程序,可以看出使用lsqnonline计算的结果的norm更小,因此更加精确,而不是像你说的:lsqnonlin是做非线性拟合的,这个问题是线性问题,不存在初值与更好结果的问题。

9楼2017-08-29 19:58:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 12 个回答

tieer

木虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
这个是不是用1stopt会简单很多啊
思考,让这个世界更有趣。
2楼2017-08-28 15:22:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

smitest

木虫 (小有名气)

3楼2017-08-28 15:33:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

smitest

木虫 (小有名气)

先改写成y= kx1+Ax2+B,利用最小二乘推导得M[k,A,B]=N解方程组直接得结果

发自小木虫Android客户端
4楼2017-08-28 17:35:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见