2013-04-30 37 views
0

當我嘗試使用帶有我收到以下錯誤消息,我的預定義功能和載體解決:無法從Matlabs一個答案解決功能

警告:顯式的解決方案不能被發現。
在169
在cardanAngles解決在33

我有三個未知變量和三個方程式。我應該能夠找到這個答案。什麼可能是錯的?

V0 = transpose([-0.7969, 0.1778, 0.5774]); 
V = [-0.7976 , 0.2282 , 0.5583]; 

syms a1 a2 a3 


F1 = [ cos(a3 * pi/180).*cos(a2 * pi/180), cos(a3 * pi/180).*sin(a2 * pi/180).*sin(a1 * pi/180)+sin(a3 * pi/180).*cos(a1 * pi/180), -cos(a3 * pi/180).*sin(a2 * pi/180).*cos(a1 * pi/180)+sin(a3 * pi/180).*sin(a1 * pi/180)]; 
F2 = [-sin(a3 * pi/180).*cos(a2 * pi/180), -sin(a3 * pi/180).*sin(a2 * pi/180).*sin(a1 * pi/180)+cos(a3 * pi/180).*cos(a1 * pi/180), sin(a3 * pi/180).*sin(a2 * pi/180).*cos(a1 * pi/180)+cos(a3 * pi/180).*sin(a1 * pi/180)]; 
F3 = [ sin(a2 * pi/180)     , -cos(a2 * pi/180).*sin(a1 * pi/180)               , cos(a2 * pi/180).*cos(a1 * pi/180)               ]; 


[a1, a2,a3] = solve(V(1)==F1*V0,V(2)==F2*V0, V(3)==F3*V0, a1,a1,a3); 

回答

1

如果有解決方案,您可以從解決最後的eq。即F3*V0-V(3)=0。 情商寫着:

F3 = [sin(a2), -cos(a2).*sin(a1), cos(a2).*cos(a1)]; 
V0 = [-0.7969, 0.1778, 0.5774]'; 

F=V0(1)*sin(a2) - V0(2)*cos(a2)*sin(a1) + V0(3)*cos(a1)*cos(a2) - V(3); 

現在我們需要尋找一個解決方案家族的一些地方F=0,快速分析會產生這樣的:

enter image description here

現在你可以使用這些作爲如註釋中所建議的fsolve程序的初始猜測值。可以按摩了一下原來的形式,寫了以下功能:

function F = qfun(x) 

V0 = transpose([-0.7969, 0.1778, 0.5774]); 
V = [-0.7976 , 0.2282 , 0.5583]; 
F1 = [ cos(x(3)).*cos(x(2)), cos(x(3)).*sin(x(2)).*sin(x(1))+sin(x(3)).*cos(x(1)), -cos(x(3)).*sin(x(2)).*cos(x(1))+sin(x(3)).*sin(x(1))]; 
F2 = [-sin(x(3)).*cos(x(2)), -sin(x(3)).*sin(x(2)).*sin(x(1))+cos(x(3)).*cos(x(1)), sin(x(3)).*sin(x(2)).*cos(x(1))+cos(x(3)).*sin(x(1))]; 
F3 = [ sin(x(2))     , -cos(x(2)).*sin(x(1))               , cos(x(2)).*cos(x(1))               ]; 
F=(F1*V0-V(1))+abs(F2*V0-V(2))+abs(F3*V0-V(3)); 

,然後在一個單獨的文件運行類似:

options = optimset('Display','off'); 
for ... 
x0 = [a1_found a2_found 0]; % guess values 
[x,Fval,exitflag] = fsolve(@qfun,x0,options); 
end... 

每次猜測值向量將輸出最近的解決方案,因此循環對角度值進行很好的採樣以得到a3

+0

記住,我沒有在我的日子裏編程很多 函數F是一個值,如果猜測向量猜測它是正確的,那麼假設它等於0。 第二部分。你能解釋一下代碼的哪些部分? for循環假設改變猜測或者什麼 謝謝! – MysGubbe 2013-05-03 08:09:29

+0

您可以使用'qfun'的變體,通過省略F1,F2和F3的行來獲取滿足abs(F3 * V0-V(3))= 0的'a1'和'a2'的值。並編輯'F = abs(F3 * V0-V(3))'。爲了得到它們,你可以使用上面提到的單獨的文件,並通過合適的採樣角度循環。 a1,a2的每一對猜測值都會收斂到一個近似解,然後你會得到我附加的圖。然後使用獲得的a1,a2作爲a3值上的循環的猜測值。 – bla 2013-05-03 09:08:36