iryouott 发表于 2011-4-13 22:51:55

matlab多元方程求助

求解一个多元方程组,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
我采用=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=验算;
a1=[102 127 150 154
87 123 131 171
148 127 27 106
114 110 14 84];
=a1\R=[-0.1168 0.2054 -0.0429 -0.0438];
而采用solve计算的解析式算出来=[-0.0438 -0.1168 0.2054   -0.0429];请问是什么原因?

mhkmars 发表于 2011-4-13 23:31:23

本帖最后由 mhkmars 于 2011-4-13 23:57 编辑

1# iryouott
貌似没问题呀?
>> =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');
>> vpa()

ans =

         [-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里自带的例子是这样的
>> = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

x =

1
3


y =

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

x =

1
-3/2


y =

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

iryouott 发表于 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
带入=结果是=[-0.0438 -0.1168 0.2054   -0.0429];

mhkmars 发表于 2011-4-14 00:22:51

3# iryouott
其实你看一下,你的x的表达式的值正好是m的值,然后y表达式正好是x的值,以此类推,就是我上面讲的,solve返回的是以字母表排序。m, x,y,z

mhkmars 发表于 2011-4-14 00:57:20

3# iryouott
在这里,关于mupad里面的一些东西,我谈一下自己的看法。
在你的定义中写到了

=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的顺序输出的。
如下:
>> =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 =

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


y =

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


z =

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


m =

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

>> =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')

x =

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


y =

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


z =

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


m =

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

其实我一直比较喜欢使用maple,所以用maple算的答案就如下了:
>> =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 =


[------- r3 - ------- r2 - ------ r4 + ------- r1]


y =

[ 296928 63578 21598 74703 ]
[- ------- r3 - ------- r2 + ------ r4 + ------- r1]
[ 4345591 4345591 255623 4345591 ]

z =

[ 1371 66064 1641 89517 ]
[- ------- r3 - ------- r2 - ------ r4 + ------- r1]
[ 4345591 4345591 255623 4345591 ]

m =


[------- r3 + ------- r2 - ------ r4 - ------- r1]

>> =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')

x =


[------- r3 + ------- r2 - ------ r4 - ------- r1]


y =

[ 296928    63578       21598       74703 ]
[- ------- r3 - ------- r2 + ------ r4 + ------- r1]
[ 4345591 4345591   255623   4345591 ]

z =

[ 1371      66064      1641       89517 ]
[- ------- r3 - ------- r2 - ------ r4 + ------- r1]
[ 4345591 4345591 255623    4345591 ]

m =

[ 205609   32400      25197      11276 ]
[------- r3 - ------- r2 - ------ r4 + ------- r1]

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

iryouott 发表于 2011-4-14 10:05:44

谢谢mhkmars,在你的指导下终于解决了问题!
页: [1]
查看完整版本: matlab多元方程求助