fanzhenjie 发表于 2009-10-4 10:28

大家帮我看看我这个为什么出错呀,程序如下

clear;clc;
w=5;
f=200;
n1=1;
n2=1.475;
r=0.025;
syms q;
f1=((n2^2*cos(q)-n1*sqrt(n2^2-n1^2*sin(q)^2))/(n2^2*cos(q)+n1*sqrt(n2^2-n1^2*sin(q)^2)))^2*sqrt(w^2-f^2*tan(q)^2)*f/cos(q);
n3=1-4/(pi*w^2)*vpa(int(f1,q,0,atan(w/f)));
z1=0:0.05:r*f/w;
plot(z1,double(n3));
hold on;
syms q1;
z2=r*f/w:10:800;
f2=((n2^2.*cos(q1)-n1.*sqrt(n2^2-n1^2.*sin(q1).^2))./(n2^2.*cos(q1)+n1*sqrt(n2^2-n1^2.*sin(q1).^2))).^2.*sqrt(f^2.*r^2./z2.^2-f^2.*tan(q1).^2).*f./cos(q1);
n4=w.^2.*r.^2./(z2.^2.*f.^2)-4./(pi.*w.^2).*vpa(int(f2,q1,0,atan(r./z2)));
plot(z2,double(n4));
hold on;
错误提示如下:Warning: Explicit integral could not be found.
> In sym.int at 58
In mengkai at 9
??? Error using ==> sym.maple
at offset 14310, unexpected number

Error in ==> sym.int at 51
   r = reshape(maple('map','int',f(:),),size(f));

Error in ==> mengkai at 16
n4=w.^2.*r.^2./(z2.^2.*f.^2)-4./(pi.*w.^2).*vpa(int(f2,q1,0,atan(r./z2)));

fanzhenjie 发表于 2009-10-4 10:30

回复 楼主 fanzhenjie 的帖子

我感觉程序没有写错,可就是出错,还特别举了个例子都能运行,例子如下:
clear
clc
a=5;

syms q;
b=1:2:15;
f=sin(q)^2+b.^2;
f1=3.*b.^2+vpa(int(f,q,2,1000./b));
plot(b,double(f1));

friendchj 发表于 2009-10-5 03:49

可能这一行
n3=1-4/(pi*w^2)*vpa(int(f1,q,0,atan(w/f)));
无法求解析解,导致后面的出错。把int换成数值积分quad试试

fanzhenjie 发表于 2009-10-5 08:59

回复 板凳 friendchj 的帖子

我改成了如下形式,还是不行呀:clear;clc;
w=5;
f=200;
n1=1;
n2=1.475;
r=0.025;
syms q1;
z2=r*f/w:10:800;
f2=inline('((n2.^2.*cos(q1)-n1.*sqrt(n2^2-n1^2.*sin(q1).^2))./(n2^2.*cos(q1)+n1*sqrt(n2^2-n1^2.*sin(q1).^2))).^2.*sqrt(f^2.*r^2./z2.^2-f^2.*tan(q1).^2).*f./cos(q1)','q1');
n4=w.^2.*r.^2./(z2.^2.*f.^2)-4./(pi.*w.^2).*quad(f2,0,atan(r./z2));%积分上限为变量,不知道如何解决,这个写法没有错,好像是被积函数可能没有原函数。
plot(z2,double(n4));%分段画第二个积分函数的图像
hold on;
错误提示:??? Error using ==> inlineeval
Error in inline expression ==> ((n2.^2.*cos(q1)-n1.*sqrt(n2^2-n1^2.*sin(q1).^2))./(n2^2.*cos(q1)+n1*sqrt(n2^2-n1^2.*sin(q1).^2))).^2.*sqrt(f^2.*r^2./z2.^2-f^2.*tan(q1).^2).*f./cos(q1)
??? Error using ==> eval
Undefined function or variable 'n2'.

Error in ==> inline.subsref at 25
    INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

Error in ==> quad at 62
y = f(x, varargin{:});

Error in ==> df at 11
n4=w.^2.*r.^2./(z2.^2.*f.^2)-4./(pi.*w.^2).*quad(f2,0,atan(r./z2));%积分上限为变量,不知道如何解决,这个写法没有错,好像是被积函数可能没有原函数。

fanzhenjie 发表于 2009-10-5 09:01

回复 板凳 friendchj 的帖子

主要是第二个积分上限是变化的,感觉就积不出来呀,第一个积分用INT就积出来了
页: [1]
查看完整版本: 大家帮我看看我这个为什么出错呀,程序如下