kejay 发表于 2009-9-10 01:18

解一组非线性方程组遇到的奇怪问题(求助)

解一组非线性方程组log10(a)=-x1*(Ta-x3)/(x2+Ta-x3)+x1*(Tb-x3)/(x2+Tb-x3);

x1,x2,x3为未知数
a,Ta,Tb 为常数,对应3组数值为

a=23,Ta=120,Tb=130.
a=44,Ta=130,Tb=150.
a=14,Ta=150,Tb=170.

Ta,Tb 分别代表温度

开始先在matlab自己编牛顿拉尔森法解,结果Jacobian矩阵 singular了,算了一下determinant 大概是10的负8次左右。用 J\(-F) 或者 pinv(J)*(-F) 均不能得到满意的结果。

后采用matlab自带 fsolve开始解。 结果也不能算得满意结果,带入结果验算,每组数据大概10%到20%的偏差。

但是如果只用其中两组数据倒是可以拟合得到对这两组数据完美拟合的结果,但是对另外一组数据不适用,大概有20%偏差。

后来化简了一下式子,把分母都乘上去了,仍然不能算得满意结果。

无奈下找到被吹的天花乱坠的1stopt,还是不能算得合理结果。 计算结果对第一第三组数据符合,但是对第二组数据偏差30%左右。分母乘上去以后,偏差更大,结果完全没意义了。。。

想请问一下论坛上的高手们,有什么方法可以算得结果么,或者这个式子对应这组数据,根本就算不出来。 可怜我老板一个劲说3组数据,3个未知数,肯定可以算出确定解的。。。

这两天被这东西折磨死了,大哥们帮帮我吧。。

dingd 发表于 2009-9-10 14:39

三个方程,三个未知数并不能保证一定有实数解存在。所给方程和数据是否都正确?

kejay 发表于 2009-9-10 17:19

又检查了一遍,方程和数据没有问题。

我也觉得可能这个问题根本就不能解出实数解

想请问一下,如果这个问题不能解出完美的解,能不能通过某种方法解得近似解,保持a的偏差都在5%以内

忘记说了, 初始值可以用 x1=8.86,x2=101.6,x3=136.5

[ 本帖最后由 ChaChing 于 2009-9-10 20:22 编辑 ]

无水1324 发表于 2009-9-11 17:00

可以用优化的方法求得最优解

ChaChing 发表于 2009-9-11 18:25

的确如楼上所, 试试fminsearch, lsqnonlin ...
页: [1]
查看完整版本: 解一组非线性方程组遇到的奇怪问题(求助)