trl-008 发表于 2007-5-30 21:00

积分收敛问题

如果被积函数为NAN,但是用数学极限理论它是收敛的,并且极限为0 。在MATLAB里被视为NAN。这样一来,积分结果也为NAN 。这种情况怎么处理? 谢谢!

[ 本帖最后由 eight 于 2007-5-30 21:16 编辑 ]

hunter_009 发表于 2007-5-30 21:07

你应该看看高数中的广义积分的概念,不要一味的用matlab,再看看数值计算中处理广义积分的方法吧.这个要自己编程.

trl-008 发表于 2007-5-31 12:00

原帖由 hunter_009 于 2007-5-30 21:07 发表 http://www.chinavib.com/forum/images/common/back.gif
你应该看看高数中的广义积分的概念,不要一味的用matlab,再看看数值计算中处理广义积分的方法吧.这个要自己编程.
你的意思是不能用MATLAB编?
我是自己编的,就是出现那种情况了!所以不行了!!

hunter_009 发表于 2007-5-31 13:00

可以在matlab中编,只不过要特殊处理,不能简单的调用matlab的函数.

trl-008 发表于 2007-5-31 22:21

回复 #4 hunter_009 的帖子

我的程序:
clear;
m=3.53*10^5;
EI=1.38*10^6;
K=1.7*10^8;
C=10^6;
E=1.5*10^9;
I=9.2*10^(-4);
Cs=6*10^9;
mu=16.67;
P=4.9*10^7;
n=(Cs*I)/(2*m);
e=C/(2*m);
a=2*n*e-EI/m;
b=e^2-K/m;
r1=-a/(2*n^2)-1/n*sqrt((a/(2*n))^2-b);
r2=-a/(2*n^2)+1/n*sqrt((a/(2*n))^2-b);

    syms w hx t;
    v1=-r2^(1/4);
    v2=r2^(1/4);
            u=16.67:166.7:1683.67;
v=1:10:101;
for s=1:length(u)
      for j=1:length(v);
          x=u(s);
    t=v(j)
      while(1)
      n=100;
      r=2;
      e=1*e^-4;
      Q2=vectorize(vpa(exp(-(n*w^4+e)*(t-h))*sinh(sqrt((n*w^4+e)^2-1/m*(EI*w^4+K))*(t-h))*cos(w*(x-mu*h))/sqrt((n*w^4+e)^2-1/m*(EI*w^4+K))));
      B0=inf;
    B1=dblquad(inline(Q2),0,t,v2,n);
    while abs(B0-B1)>e
      B0=B1;
      n=n*r;
      B1=dblquad(inline(Q2),0,t,v2,n);
    end
    B1
    end
    B1(s,j)=real(B1(s,j))
          end
end
surf(u,v,B1)
hold on
grid on
xlabel('x')
ylabel('t')
zlabel('y')
title('函数图像')
还是不行!!帮忙看一下

xjzuo 发表于 2007-5-31 23:32

怎么这个老问题还没有解决?
程序中存在明显问题: while(1)死循环,一定要记得用break跳出.
另:如果得到的是非数或有奇异性,可改用离散求和试试.

trl-008 发表于 2007-6-1 13:28

回复 #6 xjzuo 的帖子

对,问题是原函数弄到一定程度就是NAN,唉,我太衰了,导师都不耐烦了,郁闷死了。离散求和的原函数如果是这种得该怎么办?

trl-008 发表于 2007-6-1 15:30

回复 #6 xjzuo 的帖子

谢谢大哥一直以来的帮助,今天灵感来了,运气也不错,居然出来了!!
再一次感谢你!!:victory: :@P :@P

trl-008 发表于 2007-6-5 11:12

回复 #6 xjzuo 的帖子

答案出来,和结果不符合。原函数求和肯定是正数,这样直接为0 了。还有算Q2的过程中出现NAN,请高手帮我看看,程序有没有问题??
clear;
m=3.53*10^5;
EI=1.38*10^6;
K=1.7*10^8;
C=10^6;
E=1.5*10^9;
I=9.2*10^(-4);
Cs=6*10^9;
mu=16.67;
P=4.9*10^7;
n=(Cs*I)/(2*m);
e=C/(2*m);
a=2*n*e-EI/m;
b=e^2-K/m;
r1=-a/(2*n^2)-1/n*sqrt((a/(2*n))^2-b);
r2=-a/(2*n^2)+1/n*sqrt((a/(2*n))^2-b);
u=16.67:166.7:1683.67;
v=1:10:101;
for s=1:length(u)
      for j=1:length(v);
         x=u(s);
    t=v(j);
   for w=1.2766:0.2:5.2766;
for h=0:0.05:t
    for p=1:length(w)
    for q=1:length(h)
      Q2(p,q)=exp(-(n*w(p)^4+e)*(t-h(q)))*sinh(sqrt((n*w(p)^4+e)^2-1/m*(EI*w(p)^4+K))*(t-h(q)))*cos(w*(x-mu*h(q)))/sqrt((n*w(p)^4+e)^2-1/m*(EI*w(p)^4+K))

    end
    end
end
   end
    B1(s,j)=sum(Q2(:))*0.2*0.05
      end
end

xjzuo 发表于 2007-6-5 14:59

思路对了,不过程序还是有明显问题,请仔细检查.
-------还需要自己多调节一下步长,积分限什么的......
另: 建议计算前最好画一下被积函数的图形,以便了解什么地方存在奇异性.

[ 本帖最后由 xjzuo 于 2007-6-5 15:06 编辑 ]

trl-008 发表于 2007-6-5 18:01

回复 #10 xjzuo 的帖子

思路对了就好,谢谢了!!我再整整

trl-008 发表于 2007-6-6 22:53

回复 #10 xjzuo 的帖子

麻烦你,再问一个问题:原函数求和是NAN了,看你的帖子的意思是用调积分限的办法。积分限是定了的,这样也可以调它的积分限?计算结果没问题吗??
谢谢了!

xjzuo 发表于 2007-6-7 09:11

我只是举个例子,调节步长什么的; 既然积分限已定,自然不要调了.
你的这个问题实在让人很怀疑是否可积-----调试发现相当古怪.
另: 去掉多余的 "for w=1.2766:0.2:5.2766; for h=0:0.05:t" 两个循环,
直接用"w=1.2766:0.2:5.2766; h=0:0.05:t" 向量式即可. ---自己试试,看能否得到结果.
我估计要寻求特殊的积分方法(奇异积分), 才能计算该问题.

trl-008 发表于 2007-6-7 23:07

回复 #13 xjzuo 的帖子

奇异积分??我又得整几天了,看看相关的!
不过还是谢谢你,每次给我提供新的思路和想法!!
页: [1]
查看完整版本: 积分收敛问题