2017-02-09 101 views
1

我想用三个未知变量求解三个方程的系统。用三个未知变量求解三个方程的系统

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

它为何不工作?此外,与您在底部执行的操作相比,您顶部的公式不匹配。例如,对于“eqn1”和“eqn2”的最后一项,您有一个额外的“(1/2)”比例。 – rayryeng

+0

@rayryeng。这是一个错字。我不知道它为什么不起作用。我将解决方案作为符号。 – user6052232

+0

将候选解决方案替换回来,看看它是否解决方程式。 – duffymo

回答

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 

请注意,我用八度,而不是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