为什么我算的结果(P​2)是Nan,分母也​不是0呀。

clc
clear
%%
%%
m=100;
n=100;
H=ones(m,n);
A=ones(m,n);
B=ones(m,n);
C=ones(m,n);
D=ones(m,n);
E=ones(m,n);
F=ones(m,n);
% Psi=5*1e-2;
% lamda=2*z/l;
d_lamda=2/n;
phi=2*pi;%任意转角15
epslion=linspace(-1,1,m);
theta=linspace(pi/2,3*pi/2,n);
d_phi=phi/m;
l=0.18;%m
d=l/0.8;%m
H=1+epslion.*cos(phi-theta)';
surf(theta,epslion,H);
%% 初始条件
% p0=2*ou*miu/Psi^2;
P=zeros(m,n);
for i=1:m
    for j=1:n
  epslion1(i,j)=epslion(i);
    end
end
for i=1:m
  theta1(i,:)=theta(1,:);
end
%% 边界条件
P(1,:)=ones(1,n)*0;%最上面第一行全部是1
P(m,:)=ones(1,n)*0;%最下面第一行全部是1
for i=1:m
    P(:,1)=0;%最左边第一列为1,
    P(:,n)=0;%最右边最后一列为1,
end
%% 压力分布计算
P2=ones(m,n);
for i=2:m-1
    for j=2:n-1
A(i,j)=((H(i+1,j)-H(i,j))/2)^3;
B(i,j)=((H(i,j)-H(i-1,j))/2)^3;
C(i,j)=(d/l*d_phi/d_lamda)^2*((H(i,j+1)-H(i,j))/2)^3;
D(i,j)=(d/l*d_phi/d_lamda)^2*((H(i,j)-H(i,j-1))/2)^3;
E(i,j)=A(i,j)+B(i,j)+C(i,j)+D(i,j);
F(i,j)=3*d_phi*(H(i+1,j)+H(i,j))/2-(H(i,j)-H(i-1,j))/2;  
    end
end
上面的没问题,最后迭代求解出来的结果就是nan了,P2
<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,我感觉是不是数太小了导致的,希望指点迷津

 Respuesta aceptada

qcwqcv
qcwqcv el 19 de Mayo de 2023

0 votos

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

Más respuestas (0)

Categorías

Etiquetas

Preguntada:

el 19 de Mayo de 2023

Respondida:

el 19 de Mayo de 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!