我已经尝试过改变
x
、y
、z
,但还是不行。
错误表示
有问题(第 72 行)surf(t/sigma,x*sqrt(P/sigma)/sqrt(phi),abs(Y(:,1:M)));
我的完整代码是:
clc
M = input ('M = ');
N = input ('N = ');
epsilon = input ('epsilon = ');
dx = 0.01;
dt = 2.5000e-005;
x0 = -N/2*dx;
r = dt/dx^2;
D = 0.1*1.6e5;
mass=5.1e-13;
a=3e-2;
k=24;
K=8;
l=340;
lambda=10*1;
q=2*pi/lambda;
h=4;
sigma=1e10;
tau=0;
e2=0.001;
wg = 2*a*sqrt(D/mass);
w = sqrt(wg+(2*k*(1-cos(q*1))+2*K*(cos(q*l*h)+1))/mass);
Vg=(1*(k*sin(1*q)-K*h*sin(l*q*h))/(mass*w));
alfa = (-3*a)/sqrt(2);
beta = 7*a^2/3;
miu=-2*alfa/(1+4*K/ (mass*wg.^2));
delta=(wg.^2)*alfa/(4*w^2+2*k*(cos(2*q*1-1)/mass-2*K*(cos(2*h*q*l)+1)/mass-wg^2));
P=(((1^2)*(k*cos(1*q)-K*(h^2)*cos(l*q*h))/mass)-Vg^2)/(2*w);
Q=(-wg.^2*(2*alfa*(miu+delta)+3*beta)/(2*w));
phi= 0.0005;
psi=0.03;
F=zeros(N,M);
Y=zeros(N,M);
for n=1:N
x(n,1)=x0+(n-1)*dx;
F(n,1)=((sqrt(2)/psi)*sech(x(n,1))/sqrt(phi));
end
%running program
for m=1:M
for n=2:N-1
if n==2
F(n-1,m)=3*F(n,m)-3*F(n+1,m)+F(n+2,m);
end
if n==N-1
F(n+1,m)=3*F(n,m)-3*F(n-1,m)+F(n-2,m);
end
if m==1
F(n,m+1)=1i*((phi^2*r*(F(n+1,m)-2*(F(n,m))+F(n-1,m))+(psi^2*dt*(conj(F(n,m))*(F(n,m)^2))+F(n,m))));
else
F(n,m+1)=2*1i*((phi^2*r*(F(n+1,m)-2*(F(n,m))+F(n-1,m))+(psi^2*dt*(conj(F(n,m))*(F(n,m)^2))+F(n,m-1))));
end
t(m) = (m-1)*dt;
theta(n,m)=(n*q*l)-(w*t(m)/e2);
Y(n,m) = ((e2*(psi*F(n,m)/(sqrt(Q/sigma))))*(2*(cos((sigma*tau)+theta(n,m)))))+((e2^2*((psi*F(n,m)/(sqrt(Q/sigma)))^2))*(miu+(2*delta*(cos(2*((sigma*tau)+theta(n,m)))))));
end
%grafik 3 dimensi
figure
surf(t/sigma,x*sqrt(P/sigma)/sqrt(phi),abs(Y(:,1:M)));
view(0,90);
colorbar
shading interp
xlabel ('T');
ylabel ('x');
zlabel ('y');
%grafik hubungan Y terhadap x
figure
plot((x*sqrt(P/sigma)),abs(Y(:,0)));
xlabel ('x(pm)');
ylabel ('Y(pm)');
figure
plot((x*sqrt(P/sigma)),abs(Y(:,M)));
xlabel ('x(pm)');
ylabel ('Y(pm)');
导致图中未显示。请问我该怎么办?
为了避免引用虚数分量的错误,请添加
real()
函数以在曲面绘图时仅使用实数分量:
surf(t/sigma,real(x*sqrt(P/sigma)/sqrt(phi)),abs(Y(:,1:M)));
MATLAB 索引从“1”开始,而不是许多语言使用的“0”。将
abs(Y(:,0))
更改为 abs(Y(:,1))
可能会解决问题。
plot((real(x*sqrt(P/sigma))),abs(Y(:,1)));
添加额外的
end
来关闭嵌套的 for 循环。
for m=1:M
for n=2:N-1
if n==2
F(n-1,m)=3*F(n,m)-3*F(n+1,m)+F(n+2,m);
end
if n==N-1
F(n+1,m)=3*F(n,m)-3*F(n-1,m)+F(n-2,m);
end
if m==1
F(n,m+1)=1i*((phi^2*r*(F(n+1,m)-2*(F(n,m))+F(n-1,m))+(psi^2*dt*(conj(F(n,m))*(F(n,m)^2))+F(n,m))));
else
F(n,m+1)=2*1i*((phi^2*r*(F(n+1,m)-2*(F(n,m))+F(n-1,m))+(psi^2*dt*(conj(F(n,m))*(F(n,m)^2))+F(n,m-1))));
end
t(m) = (m-1)*dt;
theta(n,m)=(n*q*l)-(w*t(m)/e2);
Y(n,m) = ((e2*(psi*F(n,m)/(sqrt(Q/sigma))))*(2*(cos((sigma*tau)+theta(n,m)))))+((e2^2*((psi*F(n,m)/(sqrt(Q/sigma)))^2))*(miu+(2*delta*(cos(2*((sigma*tau)+theta(n,m)))))));
end
end