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

3 Ansichten (letzte 30 Tage)
dehyawj
dehyawj am 19 Mai 2023
Beantwortet: qcwqcv am 19 Mai 2023
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,我感觉是不是数太小了导致的,希望指点迷津

Akzeptierte Antwort

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

Weitere Antworten (0)

Kategorien

Mehr zu Logical finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!