[已解决] 为什么我算的结果(P2)是Nan,分母也不是0呀

[复制链接]
FIS-8007 发表于 2022-5-18 10:20:38
本帖最后由 FIS-8007 于 2022-5-18 15:59 编辑
  1. clc
  2. clear
  3. %%

  4. %%
  5. m=100;
  6. n=100;
  7. H=ones(m,n);
  8. A=ones(m,n);
  9. B=ones(m,n);
  10. C=ones(m,n);
  11. D=ones(m,n);
  12. E=ones(m,n);
  13. F=ones(m,n);
  14. % Psi=5*1e-2;
  15. % lamda=2*z/l;
  16. d_lamda=2/n;
  17. phi=2*pi;%任意转角15
  18. epslion=linspace(-1,1,m);
  19. theta=linspace(pi/2,3*pi/2,n);
  20. d_phi=phi/m;
  21. l=0.18;%m
  22. d=l/0.8;%m
  23. H=1+epslion.*cos(phi-theta)';
  24. surf(theta,epslion,H);
  25. %% 初始条件
  26. % p0=2*ou*miu/Psi^2;
  27. P=zeros(m,n);
  28. for i=1:m
  29.     for j=1:n
  30.   epslion1(i,j)=epslion(i);
  31.     end
  32. end
  33. for i=1:m
  34.   theta1(i,:)=theta(1,:);
  35. end


  36. %% 边界条件
  37. P(1,:)=ones(1,n)*0;%最上面第一行全部是1
  38. P(m,:)=ones(1,n)*0;%最下面第一行全部是1
  39. for i=1:m
  40.     P(:,1)=0;%最左边第一列为1,
  41.     P(:,n)=0;%最右边最后一列为1,
  42. end
  43. %% 压力分布计算
  44. P2=ones(m,n);
  45. for i=2:m-1
  46.     for j=2:n-1
  47. A(i,j)=((H(i+1,j)-H(i,j))/2)^3;
  48. B(i,j)=((H(i,j)-H(i-1,j))/2)^3;
  49. C(i,j)=(d/l*d_phi/d_lamda)^2*((H(i,j+1)-H(i,j))/2)^3;
  50. D(i,j)=(d/l*d_phi/d_lamda)^2*((H(i,j)-H(i,j-1))/2)^3;
  51. E(i,j)=A(i,j)+B(i,j)+C(i,j)+D(i,j);
  52. F(i,j)=3*d_phi*(H(i+1,j)+H(i,j))/2-(H(i,j)-H(i-1,j))/2;  

  53.     end
  54. end



复制代码
上面的没问题,最后迭代求解出来的结果就是nan了,P2
  1. <blockquote>maxt=1;
复制代码
迭代格式P2(i,j)=(A(i,j)*P(i+1,j)+B(i,j)*P(i-1,j)+C(i,j)*P(i,j+1)+D(i,j)*P(i,j-1)-F(i,j))/E(i,j)    的分母E也不是0,我感觉是不是数太小了导致的,希望指点迷津

最佳答案


TouAkira 发表于 2022-5-18 12:42:54
跟你用啥版本没多大关系,按while循环开始前 k = 0; 计,当 k =  179, i =   51, j =   43 时,B(i,j) 是0,P(i-1,j) 是inf,这俩的乘积没法算,导致出现NaN,至于为啥,这得你自己回去检查。反正这时候P2矩阵里面的数的绝对值都大到夸张,多个都是1e+250以上,正常的迭代一般不会出现这么夸张的数值,我都怀疑它发散。

4 条回复


FIS-8007 发表于 2022-5-18 11:14:53
我用的版本是2020b

TouAkira 发表于 2022-5-18 12:42:54
跟你用啥版本没多大关系,按while循环开始前 k = 0; 计,当 k =  179, i =   51, j =   43 时,B(i,j) 是0,P(i-1,j) 是inf,这俩的乘积没法算,导致出现NaN,至于为啥,这得你自己回去检查。反正这时候P2矩阵里面的数的绝对值都大到夸张,多个都是1e+250以上,正常的迭代一般不会出现这么夸张的数值,我都怀疑它发散。
回复此楼

FIS-8007 发表于 2022-5-18 13:57:56
TouAkira 发表于 2022-5-18 12:42
跟你用啥版本没多大关系,按while循环开始前 k = 0; 计,当 k =  179, i =   51, j =   43 时,B(i,j) 是0,P(i-1,j) 是inf,这俩的乘积没法算,导
多谢指点,我去检查一下

FIS-8007 发表于 2022-5-18 16:40:05
TouAkira 发表于 2022-5-18 12:42
跟你用啥版本没多大关系,按while循环开始前 k = 0; 计,当 k =  179, i =   51, j =   43 时,B(i,j) 是0 ...

谢谢老哥,我找到问题了,现在能出结果了(抱拳)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表