2016-02-11 48 views
0

該編碼來自MATLAB。所以,我有3個方程,我做了三個未知數,但是當我試圖解決未知問題時,他們只是以[1x1 sym]的形式出現,我嘗試了許多像double或vpa這樣的東西,但它仍然不起作用。請幫忙,預先感謝你。這是我的代碼,直到現在。將符號轉換爲數字圖

h=3.5;   % height in meter 
m=20;   % mass of traffic light in kg 

W=m*9.81;    %Weight of the traffic light 


Bx=3; 
By=4; 
Bz=(4-h); 
Cx=-6; 
Cy=-3; 
Cz=(6-h); 
Dx=4; 
Dy=-3; 
Dz=(4-h); 

AB=[Bx By Bz];  %Position vector of AB 
AC=[Cx Cy Cz];  %Position vector of AC 
AD=[Dx Dy Dz];  %Position vector of AD 

Mag_AB= sqrt(Bx^2+By^2+Bz^2);  %Magnitude of AB 
Mag_AC= sqrt(Cx^2+Cy^2+Cz^2);  %Magnitude of AC 
Mag_AD= sqrt(Dx^2+Dy^2+Dz^2);  %Magnitude of AD 

u_AB= AB/Mag_AB; %Unit vector of AB 
u_AC= AC/Mag_AC; %Unit Vector of AC 
u_AD= AD/Mag_AD; %Unit vector of AD 
u_W=[0 0 -1]; 

syms B C D 
eq1=(u_AB(1)*B+u_AC(1)*C+u_AD(1)*D); 
eq2=(u_AB(2)*B+u_AC(2)*C+u_AD(2)*D); 
eq3=(u_AB(3)*B+u_AC(3)*C+u_AD(3)*D)-u_W(1)*W; 

sol=solve(eq1,eq2,eq3,B,C,D) 

它給了我是 溶膠=

B: [1x1 sym] 
C: [1x1 sym] 
D: [1x1 sym] 
+0

它看起來不像C/C++代碼 – mauro

+0

您看到一個'struct'表示h將顯示如您所示的對象。你會想要訪問每個元素('B = sol.B'),現在如果你顯示這個,你會看到你想要的數字'disp(sol.B)' – Suever

+0

這在' solve'。 – horchler

回答

0

你真的不應該象徵性地求解這些方程的答案。它看起來像是一組homogeneous equations,所以當用符號方程求解時,B C和D的結果是微不足道的(全零)。您可以使用svd函數來獲得特徵值並求解一組齊次方程組。在你的情況下,這將是

A = [u_AB' u_AC' u_AD']; 
[u, s, v] = svd(A); 

B = v(1, end); 
C = v(2, end); 
D = v(3, end); 

residuals = A * v(:, end); 

但是,我會小心你如何設置你的方程。尤其是-u_W(1)*W任期eq3。你的意思是-u_W(3)*W?如果是這樣,您必須將該字詞添加到上面的A矩陣中。無論如何,我希望這一切都很好。

0
  1. 首先,你的公式真的在哪裏? 如何解決(u_AB(1)*B+u_AC(1)*C+u_AD(1)*D)

你需要使用這種方式,例如:

eq1 = (u_AB(1)*B+u_AC(1)*C+u_AD(1)*D) == 1; 

現在,它的方程。

  • 爲什麼你不能看到的結果:

    eq1 = (6*101^(1/2)*B)/101 - (12*205^(1/2)*C)/205 + (8*101^(1/2)*D)/101 == 1 
    s = solve(eq1, B,C,D) 
    s.B 
    

    ,並得到這個:

    ans = 
    
    101^(1/2)/6 
    

    瞭解更多關於此這裏solve