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

matlab多元方程求助

[复制链接]
发表于 2011-4-13 22:51:55 | 显示全部楼层 |阅读模式 来自 湖北武汉
求解一个多元方程组,R1,R2,R3,R4为参数,但不是常量:
R1=102x+127y+150z+154m
R2=87 x+123 y+131 z+171 m
R3=148 x+127 y+27 z+106 m
R4=114 x+110 y+14 z+84 m
我采用[x y z m]=solve('102*x+127*y+150*z+154*m=r1,87*x+123*y+131*z+171*m=r2,148*x+127*y+27*z+106*m=r3,114*x+110*y+14*z+84*m=r4','x','y','z','m')求解,但是求解后我采用一组特殊值R=[1 2 3 5]验算;
a1=[102 127 150 154
87 123 131 171
148 127 27 106
114 110 14 84];
[x y z m]=a1\R=[-0.1168 0.2054 -0.0429 -0.0438];
而采用solve计算的解析式算出来[x y z m]=[-0.0438 -0.1168 0.2054   -0.0429];请问是什么原因?
发表于 2011-4-13 23:31:23 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
本帖最后由 mhkmars 于 2011-4-13 23:57 编辑

1# iryouott
貌似没问题呀?

  1. >> [x y z m]=solve('102*x+127*y+150*z+154*m=1,87*x+123*y+131*z+171*m=2,148*x+127*y+27*z+106*m=3,114*x+110*y+14*z+84*m=5','x','y','z','m');
  2. >> vpa([x y z m])

  3. ans =

  4.          [-0.1168010289, 0.2054019810, -0.04285009795, -0.04379761004]
复制代码

=====================================
再看了一下,我估计lz是用mupad进行的符号计算吧?help solve后可以看到, For several equations and
    an equal number of outputs, the results are sorted in lexicographic
    order and assigned to the outputs.
最后的结果是按照字典顺序来排列的,所以就会出现你那种情况。
matlab里自带的例子是这样的
  1. >> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

  2. x =

  3. 1
  4. 3


  5. y =

  6. 1
  7. -3/2
复制代码

把表达式里面的x,y对调一下。可以看到下面的结果
  1. [x,y] = solve('y^2 + x*y + x = 3','y^2 - 4*y + 3 = 0')

  2. x =

  3. 1
  4. -3/2


  5. y =

  6. 1
  7. 3
复制代码

因此,可以看出,无论[x y]这里面的变量名字是什么,solve总是按照方程组中变量字典顺序给出答案!
Ps:lz真是个细心的人,这个问题我以前没注意咯,现在补上。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-14 00:05:21 | 显示全部楼层 来自 湖北武汉
谢谢mhkmars,但是我要用到关于x,y,z,m关于r1,r2,r3,r4的表达式,我求解的表达式是:
x=110022/4345591*r3+138239/4345591*r2-15737/511246*r4-128048/4345591*r1
y=205609/4345591*r3-32400/4345591*r2-25197/511246*r4+11276/4345591*r1
z= -296928/4345591*r3-63578/4345591*r2+21598/255623*r4+74703/4345591*r1
m= -1371/4345591*r3-66064/4345591*r2-1641/255623*r4+89517/4345591*r1
带入[r1 r2 r3 r4]=[1 2 3 5]结果是[x y z m]=[-0.0438 -0.1168 0.2054   -0.0429];
回复 不支持

使用道具 举报

发表于 2011-4-14 00:22:51 | 显示全部楼层 来自 陕西西安
3# iryouott
其实你看一下,你的x的表达式的值正好是m的值,然后y表达式正好是x的值,以此类推,就是我上面讲的,solve返回的是以字母表排序。m, x,y,z
回复 不支持

使用道具 举报

发表于 2011-4-14 00:57:20 | 显示全部楼层 来自 陕西西安
3# iryouott
在这里,关于mupad里面的一些东西,我谈一下自己的看法。
在你的定义中写到了

  1. [x y z m]=solve('102*x+127*y+150*z+154*m=r1,87*x+123*y+131*z+171*m=r2,148*x+127*y+27*z+106*m=r3,114*x+110*y+14*z+84*m=r4','x','y','z','m')
复制代码

我试着将你最后的'x','y','z','m'换成'm','y','z','x',发现结果依然是按照m,x,y,z的顺序输出的。
如下:
  1. >> [x y z m]=solve('102*x+127*y+150*z+154*m=r1,87*x+123*y+131*z+171*m=r2,148*x+127*y+27*z+106*m=r3,114*x+110*y+14*z+84*m=r4','x','y','z','m')

  2. x =

  3. (138239*r2)/4345591 - (128048*r1)/4345591 + (110022*r3)/4345591 - (15737*r4)/511246


  4. y =

  5. (11276*r1)/4345591 - (32400*r2)/4345591 + (205609*r3)/4345591 - (25197*r4)/511246


  6. z =

  7. (74703*r1)/4345591 - (63578*r2)/4345591 - (296928*r3)/4345591 + (21598*r4)/255623


  8. m =

  9. (89517*r1)/4345591 - (66064*r2)/4345591 - (1371*r3)/4345591 - (1641*r4)/255623

  10. >> [x y z m]=solve('102*x+127*y+150*z+154*m=r1,87*x+123*y+131*z+171*m=r2,148*x+127*y+27*z+106*m=r3,114*x+110*y+14*z+84*m=r4','m','y','z','x')

  11. x =

  12. (138239*r2)/4345591 - (128048*r1)/4345591 + (110022*r3)/4345591 - (15737*r4)/511246


  13. y =

  14. (11276*r1)/4345591 - (32400*r2)/4345591 + (205609*r3)/4345591 - (25197*r4)/511246


  15. z =

  16. (74703*r1)/4345591 - (63578*r2)/4345591 - (296928*r3)/4345591 + (21598*r4)/255623


  17. m =

  18. (89517*r1)/4345591 - (66064*r2)/4345591 - (1371*r3)/4345591 - (1641*r4)/255623
复制代码

其实我一直比较喜欢使用maple,所以用maple算的答案就如下了:
  1. >> [x y z m]=solve('102*x+127*y+150*z+154*m=r1,87*x+123*y+131*z+171*m=r2,148*x+127*y+27*z+106*m=r3,114*x+110*y+14*z+84*m=r4','x','y','z','m')

  2. x =

  3. [205609 32400 25197 11276 ]
  4. [------- r3 - ------- r2 - ------ r4 + ------- r1]
  5. [4345591 4345591 511246 4345591 ]

  6. y =

  7. [ 296928 63578 21598 74703 ]
  8. [- ------- r3 - ------- r2 + ------ r4 + ------- r1]
  9. [ 4345591 4345591 255623 4345591 ]

  10. z =

  11. [ 1371 66064 1641 89517 ]
  12. [- ------- r3 - ------- r2 - ------ r4 + ------- r1]
  13. [ 4345591 4345591 255623 4345591 ]

  14. m =

  15. [110022 138239 15737 128048 ]
  16. [------- r3 + ------- r2 - ------ r4 - ------- r1]
  17. [4345591 4345591 511246 4345591 ]
  18. >> [x y z m]=solve('102*x+127*y+150*z+154*m=r1,87*x+123*y+131*z+171*m=r2,148*x+127*y+27*z+106*m=r3,114*x+110*y+14*z+84*m=r4','m','y','z','x')

  19. x =

  20. [110022   138239    15737   128048 ]
  21. [------- r3 + ------- r2 - ------ r4 - ------- r1]
  22. [4345591 4345591 511246   4345591 ]

  23. y =

  24. [ 296928    63578       21598       74703 ]
  25. [- ------- r3 - ------- r2 + ------ r4 + ------- r1]
  26. [ 4345591 4345591   255623     4345591 ]

  27. z =

  28. [ 1371        66064      1641       89517 ]
  29. [- ------- r3 - ------- r2 - ------ r4 + ------- r1]
  30. [ 4345591 4345591 255623    4345591 ]

  31. m =

  32. [ 205609   32400      25197      11276 ]
  33. [------- r3 - ------- r2 - ------ r4 + ------- r1]
  34. [4345591 4345591 511246     4345591 ]
  35. >>
复制代码

可以看出,maple里面,随着你改变'x','y','z','m'为'm','y','z','x',其答案也会随着顺序的变化而改变。所以我觉着,在这一点上maple的符号计算能力还是要强于mupad的。
有点扯远了。。。
所以说,如果但对你这个问题,你将m放到后面去就是你需要的[x y z m]了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-14 10:05:44 | 显示全部楼层 来自 湖北武汉
谢谢mhkmars,在你的指导下终于解决了问题!
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-4 21:28 , Processed in 0.040063 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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