如何避免“冲浪错误X、Y、Z、C不能很复杂”

问题描述 投票:0回答:1

我已经尝试过改变

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)');

导致图中未显示。请问我该怎么办?

matlab graphics matlab-figure figure
1个回答
0
投票

采用实数分量和 MATLAB 索引

为了避免引用虚数分量的错误,请添加

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
© www.soinside.com 2019 - 2024. All rights reserved.