怎样在MATLAB中显示出这类函数的图像?

希望知道如何做的朋友帮我解答一下,谢谢了!
如何用MATLAB表示出:Y与α的关系图?其中α是变量。
积分符号前的竖线只是鼠标的光标。
r1、r2设为1来,α的范围是0~π/2
syms a b c;
a=0:0.1*pi:pi;
b=0:0.1:pi/2;
c=0:0.1:pi/2;
f=int(int((cos(b)*cos(c)+sin(b)*sin(c)*cos(a))/sqrt((cos(b)-cos(c))^2+(sin(b)*cos(a)-sin(c))^2+(sin(b)*sin(a))^2)),0,pi/2),0,pi/2);
plot(f,a)
这是我的程序,系统报错
??? f=int(int((cos(b)*cos(c)+sin(b)*sin(c)*cos(a))/sqrt((cos(b)-cos(c))^2+(sin(b)*cos(a)-sin(c))^2+(sin(b)*sin(a))^2)),0,pi/2),0,pi/2); |
Error: Unbalanced or unexpected parenthesis or bracket.
不知道该怎么改。

r1、r2的值是什么?数值计算必须知道所有常量的值才行。追问

不好意思,我没有说清楚。这里r1、r2设为1来计算。设α的范围是0~π/2。
我刚刚编程将这个函数用一个二重积分表示,提示有错。
朋友,等下看看你有什么思路,谢谢了!

追答

1、你现在的代码有几个问题:
(1)报错的原因说的很清楚——括号不匹配( Unbalanced or unexpected parenthesis or bracket),稍微查一下就能找到多了一个右括号。
(2)既然定义了符号变量abc,又给它们赋值,会导致定义符号不起作用。
(3)即使解决了上面两个问题,仍然不可行。对这样复杂的积分求符号解是很困难的。

 

2、用数值方法求解(随便给a赋值,例如a=0.1):

>> dblquad(@(b,c)(cos(b)*cos(c)+sin(b)*sin(c)*cos(a))./sqrt((cos(b)-cos(c)).^2+(sin(b)*cos(a)-sin(c)).^2+(sin(b)*sin(a)).^2),0,pi/2,0,pi/2)
Warning: Minimum step size reached; singularity possible. 
> In quad (line 96)
  In dblquad>innerintegral (line 79)
  In quad (line 67)
  In dblquad (line 55)
ans =
    9.3896

造成警告的原因是,当b、c=0时,被积函数的值为无穷大,也就是有奇异点,导致达到最小积分步长。
从函数图像可以看出这一点。

a=0.2;
f = @(b,c)(cos(b)*cos(c)+sin(b)*sin(c)*cos(a))./sqrt((cos(b)-cos(c)).^2+(sin(b)*cos(a)-sin(c)).^2+(sin(b)*sin(a)).^2);
ezmesh(f,[0,pi/2,0,pi/2])

特别是,当a=0时,积分结果会出现NaN(非数)。对于R2012a之后版本的MATLAB,建议使用integral2函数代替dblquad(对于a=0,积分结果是无穷大Inf,这个结果应更可信)。

受字数限制,完整代码就不贴了,用循环对a取不同值即可。

追问

a=0时应该是inf才对;用dblquad函数得出的图像及用二重积分定义得出的图像与你的结果相同,但是却与预想结果差别很大,预想结果这条曲线的下降趋势应像余弦曲线那样。我给出的公式是对的,不知问题出在哪里。

追答

不知你“预想结果”的依据是什么?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-20
看不见公式啊。。。。追问

看不到图片是么?

追答

是的啊。。。。

是的啊。。。。