Matlab线性方程组求符号解

问题描述:

Matlab线性方程组求符号解
syms fox f12x m1 a1x foy f12y a1y y1 x1 M1 j1 a1 f23x f12x m2 a2x f23y f12y a2y y2 x2 j2 a2 f34x f36x m3 a3x f36y f34y y3 y4 x4 x3 j3 a3 f5x f5y m4 a4x a4y y5 x5 M4 j4 a4 f67x f67y m6 a6x a6y x7 y7 j6 a6 fn m7 a7y;
e1=sym('fox+f12x-m1*a1x=0')
e2=sym('foy+f12y-m1*a1y=0')
e3=sym('f12x*y1+f12y*x1-M1-j1*a1=0')
e4=sym('f23x-f12x-m2*a2x=0')
e5=sym('f23y-f12y-m2*a2y=0')
e6=sym('f23x*(y2-y1)-f23y*(x2-x1)-j2*a2=0')
e7=sym('f34x+f36x-f23x-m3*a3x=0')
e8=sym('f36y+f34y-f23y-m3*a3y=0')
e9=sym('f36x*(y3-y4)+f36y*(x4-x3)-f23x(y2-y4)-f23y*(x4-x2)-j3*a3=0')
e10=sym('f5x-f34x-m4*a4x=0')
e11=sym('f5y-f34y-m4*a4y=0')
e12=sym('f67y-m7*a7y=0')
e13=sym('-f34x*(y4-y5)+f34y*(x4-x5)-M4-j4*a4=0')
e14=sym('f67x-f36x-m6*a6x=0')
e15=sym('f67y-f36y-m6*a6y=0')
e16=sym('f67x*(y7-y6)-f67y*(x7-x6)-j6*a6=0')
e17=sym('f67x-fn=0')
g=solve(e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,'fox','foy','f12x','f12y','M1','f23x','f23y','f34x','f34y','f36x','f36y','f5x','f5y','M4','f67x','f67y','fn')
g.fox
这是我的编的,'fox','foy','f12x','f12y','M1','f23x','f23y','f34x','f34y','f36x','f36y','f5x','f5y','M4','f67x','f67y','fn'为未知数,为什么求出 的fox 包含其中一些未知数呢?
1个回答 分类:综合 2014-10-26

问题解答:

我来补答
1、存在两个错误:
(1)变量a3y、y6、x6未定义;
(2)方程e9中的项f23x(y2-y4)少了个乘号,这样会导致(y2-y4)被理解为数组的索引.
改正上述两个错误后即可求解得到正确的结果.
 
2、方程不建议写成楼主贴出来的形式,最好直接写成类似下面这样:
e1=fox+f12x-m1*a1x;
e2=foy+f12y-m1*a1y;
e3=f12x*y1+f12y*x1-M1-j1*a1;
...
使用这种表达方式能够检查出前面所说的错误.
 
3、楼主所遇到的问题“求出的fox包含其中一些未知数”,是因为,存在前述错误的条件下,其实是求不出显式解(Explicit solution)来的.而在不能求出显式解的情况下,不同的符号运算内核采取了不同的处理手段:Maple内核会直接告诉你求不出显式解,MuPad内核则经常是给出错误的结果(类似这种求出来的解当中还包含未知数情况).相信大多数人应该更愿意接受Maple的处理方式.MATLAB R2008a之前的版本用的是Maple内核,R2008b之后改用MuPad内核,但仍然保留了Maple内核,可以通过symengine切换.从R2010a开始,则只支持MuPad内核.总体上,Maple内核比MuPad内核更优秀,如果经常使用符号运算,建议使用2010a甚至2008a之前的版本(事实上,我个人经常用的是10年前的6.5版).
 
很用心地写了这些(提到的版本更替信息都认真做了核实),
 
 
展开全文阅读
剩余:2000
下一页:奇偶性的应用。