Matlab线性方程组求符号解
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、存在两个错误:
(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版)。
很用心地写了这些(提到的版本更替信息都认真做了核实),希望对楼主有帮助。
2024-11-14 广告