用三个未知变量求解三个方程组

时间:2017-02-09 20:11:10

标签: matlab math

我正在尝试用三个未知变量来解决三个方程组。

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);

由于

1 个答案:

答案 0 :(得分:2)

您可以跳过equationsToMatrixlinsolve,只使用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