2017-02-09 91 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