早教吧 育儿知识 作业答案 考试题库 百科 知识分享

MATLAB求解符号线性方程组时,结果误差很大?symsF1F2F3F4F5C1C2C3C4EID2D3D4W0L1L2L3L4;f1=C1+(F4*L1^2)/(2*E*I)-C2;f6=(F4-F5)*(L1+L2)^2/(2*E*I)-F4*L1*(L1+L2)/(E*I)+C2-((F4-F3-F5)*(L1+L2)^2)/(2*E*I)-((F3-F4)*L1+F3*L2)*(L1+

题目详情
MATLAB求解符号线性方程组时,结果误差很大?
syms F1 F2 F3 F4 F5 C1 C2 C3 C4 E I D2 D3 D4 W0 L1 L2 L3 L4;
f1=C1+(F4*L1^2)/(2*E*I)-C2;
f6=(F4-F5)*(L1+L2)^2/(2*E*I)-F4*L1*(L1+L2)/(E*I)+C2-((F4-F3-F5)*(L1+L2)^2)/(2*E*I)-((F3-F4)*L1+F3*L2)*(L1+L2)/(E*I)-C3;
f7=(F4-F3-F5)*(L1+L2+L3)^2/(2*E*I)+((F3-F4)*L1+F3*L2)*(L1+L2+L3)/(E*I)+C3-F1*(L1+L2+L3)^2/(2*E*I)+(L1+L2+L3+L4)*F1*(L1+L2+L3)/(E*I)-C4;
f2=-(F5*L1^3)/(6*E*I)+C1*L1;
f3=(F4-F5)*L1^3/(6*E*I)-(F4*L1^3)/(2*E*I)+C2*L1+D2;
f4=(F4-F5)*(L1+L2)^3/(6*E*I)-(F4*L1*(L1+L2)^2)/(2*E*I)+C2*(L1+L2)+D2+W0;
f5=(F4-F3-F5)*(L1+L2)^3/(6*E*I)+((F3-F4)*L1+F3*L2)*(L1+L2)^2/(2*E*I)+C3*(L1+L2)+D3+W0; %x=L1+L2;W=W0
f8=(F4-F3-F5)*(L1+L2+L3)^3/(6*E*I)+((F3-F4)*L1+F3*L2)*(L1+L2+L3)^2/(2*E*I)+C3*(L1+L2+L3)+D3; %x=L1+L2+L3;W=0
f9=F1*(L1+L2+L3)^3/(6*E*I)-(L1+L2+L3+L4)*F1*(L1+L2+L3)^2/(2*E*I)+C4*(L1+L2+L3)+D4; %x=L1+L2+L3;W=0
f10=-F1*(L1+L2+L3+L4)^3/(3*E*I)+C4*(L1+L2+L3+L4)+D4; %x=L1+L2+L3+L4;W=0
f11=-F1+F2-F3+F4-F5;
f12=-F3*(L3+L4)+F4*(L2+L3+L4)-F5*(L1+L2+L3+L4)+F2*L4;
[F1,F2,F3,F4,F5,C1,C2,C3,C4,D2,D3,D4]=solve(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,'F1','F2','F3','F4','F5','C1','C2','C3','C4','D2','D3','D4')
上面是我的代码,求出的结果带入f1~f12,发现都不为0,这是为什么?
▼优质解答
答案和解析

原因

使用solve函数求解方程组,如果返回多个参数,则参数是按照字母顺序排列,而与你在输入参数表中指定的顺序无关.

 

可参考关于solve函数的文档:

    Three different types of output are possible.  For one equation and one
    output, the resulting solution is returned, with multiple solutions to
    a nonlinear equation in a symbolic vector.  For several equations and
    an equal number of outputs, the results are sorted in lexicographic
    order and assigned to the outputs.  For several equations and a single
    output, a structure containing the solutions is returned.

 

建议

一种方式是,修改solve函数的输出参数顺序:

[C1,C2,C3,C4,D2,D3,D4,F1,F2,F3,F4,F5]=solve(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,'F1','F2','F3','F4','F5','C1','C2','C3','C4','D2','D3','D4')

或者,按照下面的方式返回参数:

s=solve(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,'F1','F2','F3','F4','F5','C1','C2','C3','C4','D2','D3','D4');
fns = fieldnames(s);
for i=1:length(fns)
    eval([fns{i} '=s.' fns{i}]);
end