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+
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
I don't know if she has gone to China____ (A) ?(问 2020-05-16 …
高中数学的几道向量的题目!只要答案,谢谢,做得好我会追加的5.已知三个力F1=(-2,-1),F2 2020-05-16 …
复数(-2根号3+i)÷(1+2根号3×i)+{根号2÷(1-i)}^2004的虚部为i为虚数 2020-06-02 …
如何算某数的根号2次方?(a^根号2)接着,同理,那a^i怎么算?有个等式:i^i=e^-π/2怎 2020-06-02 …
有二位数组a[n][m]对于指针问题*(*(a+i)+j)与a[i][j]为什么等价(i,j在n, 2020-06-12 …
设集合A={a,b},f1,f2,f3,f4是A到A的函数,其中:f1(a)=af1(b)=bf2 2020-07-21 …
若(1+2ai)*i=1-b*i,其中a、b∈R,i是虚数单位,则|a+b*i|=?已知0<a<2 2020-07-30 …
一.单项选择.1.Thisis()Maria.A./B.meC.youD.a2.Nicetoseey 2020-10-30 …
行列式问题,D=|aij|=a,则D1=|-aij|=不懂的是,行列式按行或列提取负号,i行j列的话 2020-11-11 …
用matlab解一下这个微分方程!急.di/dt=(480*m+15*n+20*k*i)*(1+a- 2020-12-12 …