Matlab编程解决方案

时间:2013-05-29 08:10:12

标签: matlab equation

如何解决方程式   17.7*sin(A)*cos(A)+87*sin^2(A)-9.65*cos(A)-47*sin(A)=0使用MATLAB? 我希望A的值满足上述等式。我尝试使用solve命令,但它不断给出错误。

2 个答案:

答案 0 :(得分: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
f=@(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 :(得分: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是一个整数)添加到这四个值,以便在任何其他时间间隔内获取函数的根。

相关问题