找回密码
 注册
Simdroid-非首页
查看: 285|回复: 14

Matlab求解非线性方程组求解

[复制链接]
发表于 2011-11-3 09:04:17 | 显示全部楼层 |阅读模式 来自 北京石景山
原方程组见附件:
T取937,matlab程序如下:
[v,c,x,n]=solve('log10(v*c/x)=6.72-9500/973','log10(v*n/(1-x))=3.63-8700/973','(0.1-v)/(0.1-c)=50.9414/x/12.011','(0.1-v)/(0.02-n)=50.9414/(1-x)/14.0067')
Matlab6.5计算结果:
Warning: Explicit solution could not be found.
> In L:\matlab\1\toolbox\symbolic\solve.m at line 136
v =
[ empty sym ]
c =
     []
x =
     []
n =
     []
Matlab7.5计算结果
>> [v,c,x,n]=solve('log10(v*c/x)=6.72-9500/973','log10(v*n/(1-x))=3.63-8700/973','(0.1-v)/(0.1-c)=50.9414/x/12.011','(0.1-v)/(0.02-n)=50.9414/(1-x)/14.0067')
Warning: Warning, solutions may have been lost
v =
-.19116080217055465471302847768467e-2
c =
-.17365432974643554523305098675344e-5
x =
-.40497538812489204930444160301208
n =
.85594360567706133222017429258172
通过计算发现,不同版本计算结果不一样,但是两个计算结果和正确结果,x=0.29又不一致,请求高手帮忙,指点迷津

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-11-3 18:15:46 | 显示全部楼层 来自 福建三明
Simdroid开发平台
这种现象正常吧:lol,Matlab6.5和7.5的符号求解,都用Maple的符号工具箱,版本号越高,求解越好,所以Matlab6.5求不出解来也正常。同时非线性求解,求不出精确解也正常。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-11-3 20:22:08 | 显示全部楼层 来自 北京
谢谢messenger,
针对此种情况,该如何求解呢?有没有其他更好的办法?恳请指教
回复 不支持

使用道具 举报

 楼主| 发表于 2011-11-17 09:31:00 | 显示全部楼层 来自 北京石景山
那位高手出招啊,急
回复 不支持

使用道具 举报

发表于 2011-11-17 10:03:01 | 显示全部楼层 来自 福建三明
像这种可以求出具体数值的非线性方程,我们都用数值求解。如果你非要用符号求解,试试最新版本的Matlab可能会好一些。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-11-18 14:52:28 | 显示全部楼层 来自 北京石景山
谢谢messenger,恳请支招,邮箱zhengfuyin2012@163.com,数值计算不很熟悉,谢谢帮忙
回复 不支持

使用道具 举报

发表于 2011-11-19 21:38:26 | 显示全部楼层 来自 广东广州
1stOpt数值解:

  1. Function log(v*c/x)=6.72-9500/973;
  2.         log(v*n/(1-x))=3.63-8700/973;
  3.         (0.1-v)/(0.1-c)=50.9414/x/12.011;
  4.         (0.1-v)/(0.02-n)=50.9414/(1-x)/14.0067;
复制代码
v: 0.105796352692504
c: 0.119028389108509
x: 13.9231957516022
n: -0.000596322138837817
回复 不支持

使用道具 举报

发表于 2011-11-19 21:40:23 | 显示全部楼层 来自 广东广州
好像不唯一,还有多组:

v: 4.88181936801701E-6
c: -66552919522853.1
x: -359224951718.383
n: 359224951718.382

v: 0.105652759232272
c: 145738217920.109
x: 17024406302594.3
n: -786634225.381966

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-9 15:50:43 | 显示全部楼层 来自 北京石景山
谢谢版主shamohu,
可是正确结果X=0.29,其他变量都大于零,我真的是彻底迷惑了,我现在该选择什么答案?????
回复 不支持

使用道具 举报

发表于 2011-12-11 21:45:34 | 显示全部楼层 来自 吉林
本帖最后由 shamohu 于 2011-12-11 21:46 编辑

上面条件早点应该说清楚,1stOpt代码:

  1. ParameterDomain = [0,];
  2. Function log(v*c/x)=6.72-9500/973;
  3.         log(v*n/(1-x))=3.63-8700/973;
  4.         (0.1-v)/(0.1-c)=50.9414/x/12.011;
  5.         (0.1-v)/(0.02-n)=50.9414/(1-x)/14.0067;
复制代码
唯一结果:
v: 0.00287117556008357
c: 0.0932227172263331
x: 0.295936943018924
n: 0.00119710849995631
回复 不支持

使用道具 举报

发表于 2011-12-13 12:49:07 | 显示全部楼层 来自 澳大利亚
shamohu 发表于 2011-12-11 21:45
上面条件早点应该说清楚,1stOpt代码: 唯一结果:
v: 0.00287117556008357
c: 0.0932227172263331

这个程序可以直接运行吗?我用7.11.0好像不行,出错“The expression to the left of the equals sign is not a valid target for an assignment."恳请指教,谢谢

点评

不好意思,以前不知道1stOpt,多谢指教  发表于 2011-12-13 15:02
哥们,人家用的不是Matlab,你看清楚了吗?  发表于 2011-12-13 14:37
回复 不支持

使用道具 举报

发表于 2011-12-13 14:33:25 | 显示全部楼层 来自 河北廊坊
本帖最后由 qibbxxt 于 2011-12-13 14:35 编辑

  1. eqs:=[log(v*c/x)=6.72-9500/973,log(v*n/(1-x))=3.63-8700/973,(0.1-v)/(0.1-c)=50.9414/x/12.011,(0.1-v)/(0.02-n)=50.9414/(1-x)/14.0067];

  2. solution:=numeric::fsolve(eqs,[v,c,x=0..1,n])
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2011-12-20 22:46:52 | 显示全部楼层 来自 广东深圳
本帖最后由 hjdwg 于 2011-12-20 23:09 编辑

我把前两个方程改写了一下,求解后再验证是否有效:

>> aa=solve('(v*c/x)=10^(6.72-9500/973)','(v*n/(1-x))=10^(3.63-8700/973)','(0.1-v)/(0.1-c)=50.9414/x/12.011','(0.1-v)/(0.02-n)=50.9414/(1-x)/14.0067');
>> double([aa.c,aa.n,aa.v,aa.x])

ans =

    0.0932    0.0012    0.0029    0.2959
    0.1190   -0.0006    0.1058   13.9232
    0.1015   -0.0094   -0.0006   -0.0621
   -0.0019   -0.0000   -0.4050    0.8559

>>  aa.v.*aa.c./aa.x-10^(6.72-9500/973)
(aa.v.*aa.n./(1-aa.x))-10^(3.63-8700/973)
(0.1-aa.v)./(0.1-aa.c)-50.9414./aa.x./12.011
(0.1-aa.v)./(0.02-aa.n)-50.9414./(1-aa.x)/14.0067

ans =

.88540040614777137e-18
.88540040614777139e-18
.88540040614777134e-18
.88540040614777139e-18

ans =

.96967521689587561e-20
.96967521689587560e-20
.96967521689587557e-20
.96967521689587558e-20


ans =

  -.441378244060286e-15
  -.938147611195536e-17
  .2102866198775538e-14
-.1526036614981927e-15

ans =

-.217774265250260e-16
  .118644658779868e-17
-.144359861337048e-16
-.106435271856224e-15
回复 不支持

使用道具 举报

发表于 2011-12-20 23:12:17 | 显示全部楼层 来自 广东深圳
上面的贴子是08a的结果,用的是maple引擎,结果是对的。

同样的代码,2011b居然算错了,奇怪:
>> aa=solve('(v*c/x)=10^(6.72-9500/973)','(v*n/(1-x))=10^(3.63-8700/973)','(0.1-v)/(0.1-c)=50.9414/x/12.011','(0.1-v)/(0.02-n)=50.9414/(1-x)/14.0067');
>> double([aa.c,aa.n,aa.v,aa.x])

ans =

    0.1245   -0.0065    0.1074   14.1253
   -0.0315   -0.0059   -0.5519    0.8553
    0.0965   -0.0030    0.0014    0.1518
    0.1028   -0.0111   -0.0011   -0.1195
回复 不支持

使用道具 举报

发表于 2011-12-21 13:27:15 | 显示全部楼层 来自 北京
hjdwg 发表于 2011-12-20 23:12
上面的贴子是08a的结果,用的是maple引擎,结果是对的。

同样的代码,2011b居然算错了,奇怪:

结果不如Maple下算的好。后面两个方程还可以,就是前面的,误差大点儿了。估计是两者的符号引擎差距造成的吧。

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-3 03:28 , Processed in 0.072775 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表