我正在尝试用三个未知变量来解决三个方程组。
A1=(x+y)/2+(x-y)/2*cos(2*phi)+z*sin(2*phi)/2
A2=(x+y)/2-(x-y)/2*cos(2*phi)-z*sin(2*phi)/2
A3=-(x-y)/2*sin(2*phi)+z*cos(2*phi)
其中A1, A2, A3,
和phi
已知且x,y,
和z
未知。
我使用下面的代码,但它不起作用。我把解决方案作为符号。
clear;
clc;
A1=50;
A2=37.5;
A3=125.6;
phi=28;
syms x y z
eqn1 = (x+y)/2+(((x-y)/2)*cosd(2*phi))+(z*sind(2*phi))/2== A1;
eqn2 = (x+y)/2+(((x-y)/2)*cosd(2*phi))-(z*sind(2*phi))/2== A2;
eqn3 = (((x-y))*sind(2*phi))+(z*cosd(2*phi))== A3;
[A,B] = equationsToMatrix([eqn1, eqn2, eqn3], [x, y, z]);
X_1 = linsolve(A,B);
由于
答案 0 :(得分:2)
您可以跳过equationsToMatrix
和linsolve
,只使用solve
。您已经在使用符号工具箱,那么为什么要将系统转换为系数矩阵并以此方式解决?只需直接使用实际方程式。
A1=50;
A2=37.5;
A3=125.6;
phi=28;
syms x y z
eqn1 = (x+y)/2+(((x-y)/2)*cosd(2*phi))+(z*sind(2*phi))/2== A1;
eqn2 = (x+y)/2+(((x-y)/2)*cosd(2*phi))-(z*sind(2*phi))/2== A2;
eqn3 = (((x-y))*sind(2*phi))+(z*cosd(2*phi))== A3;
[X, Y, Z] = solve(eqn1, eqn2, eqn3);
我明白了:
X = (sym)
69370560820559
──────────────
926177760500
Y = (sym)
-61526962823521
────────────────
926177760500
Z = (sym)
2910
────
193
请注意,我使用的是Octave而不是MATLAB(在我当前的系统上,我无法访问符号工具箱),因此格式输出可能略有不同。您可能也希望以实际(浮点)形式使用它,因此对输出double
的额外强制转换应该有所帮助:
X = double(X);
Y = double(Y);
Z = double(Z);
通过这样做,我们得到:
>> format long g;
>> X
X = 74.8998343288972
>> Y
Y = -66.4310518429048
>> Z
Z = 15.0777202072539