2013-05-29 201 views
0

如何用MATLAB求解方程 17.7*sin(A)*cos(A)+87*sin^2(A)-9.65*cos(A)-47*sin(A)=0? 我想要A的值滿足上面的等式。我嘗試使用解決命令,但它不斷給錯誤。Matlab編程解決方案

+1

請發表您厭倦了'solve'的代碼,以及它給你的具體錯誤 – Shai

回答

4

當然它的溶液中,它具有溶液的無限數量,例如,你可以看到用圖形是A在-4pi到4PI間隔越過零分多次:

A=linspace(-4*pi,4*pi,1000); 
plot(A,17.7.*sin(A).*cos(A)+87.*sin(A).^2-9.65*cos(A)-47*sin(A)) 

enter image description here

尋找解決方案的另一種方法是使用fzero點附近x0

[email protected](A) 17.7.*sin(A).*cos(A)+87.*sin(A).^2-9.65*cos(A)-47*sin(A); 
x0=0; 
sol = fzero(f,x0) 

sol = 
    -0.2020 

有關的發現多根間隔見this discussion

1

即使您需要數字解決方案,有時Symbolic Toolbox也很有用。該函數在-pipi(或任何2*pi區間)之間是週期性的。您可以使用solve找到所有四個根在此區間:

syms A; 
s = solve(17.7*sin(A)*cos(A)+87*sin(A)^2-9.65*cos(A)-47*sin(A)==0,A,'IgnoreAnalyticConstraints',true) 

>> s = 
    -0.20201862493051844310946374889219 
     0.57212820231996826457022742739841 
     2.5736433165658736546275270008849 
     2.9380144125412806473039849317812 

solve無法找到的解析解它returns a numeric one。在這種情況下,必須通過'IgnoreAnalyticConstraints'選項打開「簡化規則」,強制solve返回所有解決方案。我不確定爲什麼這是因爲這個選項通常會做相反的事情。

使用函數double將符號值從solve轉換爲浮點數:s = double(s);。然後,您可以將N*2*pi(其中N是一個整數)添加到這四個值中,以獲得任何其他時間間隔中函數的根。