2013-05-29 193 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是一个整数)添加到这四个值中,以获得任何其他时间间隔中函数的根。