matlab程序,报错说z必须为矩阵,不能是向量或者标量。程序如下?

clear;
clc;

[x,t] = meshgrid(-5:0.1:5,-5:0.1:5);
v1=sqrt(3);
u1=1;
u2=2;
v2=sqrt(2);
a1=u1+1i*v1;
A1=u1-1i*v1;
a2=u2+1i*v2;
A2=u2-1i*v2;
grid off

b=x+2*a1*t;
B=x+2*A1*t;
c=x+2*a2*t;
C=x*2*A2*t;
d1=-1i*a1*b;
d2=1i*a1*b;
d3=-1i*A1*B;
d4=1i*A1*B;
d5=-1i*a2*c;
d6=1i*a2*c;
d7=-1i*A2*C;
d8=1i*A2*C;
a11=exp(d1);
a12=exp(d2);
a13=a1*a11;
a14=a1*a1*a11;
a15=a1*a12;
a21=-1*exp(d3);
a22=exp(d4);
a23=A1*a21;
a24=A1*A1*a21;
a25=A1*a22;
a31=exp(d5);
a32=exp(d6);
a33=a2*a31;
a34=a2*a2*a31;
a35=a2*a32;
a41=-1*exp(d7);
a42=exp(d8);
a43=A2*a41;
a44=A2*A2*a41;
a45=A2*a42;
M=[a11 a12 a13 a14;a21 a22 a23 a24;a31 a32 a33 a34;a41 a42 a43 a44];
N=[a11 a12 a13 a15;a21 a22 a23 a25;a31 a32 a33 a35;a41 a42 a43 a45];
D=det(M);
F=det(N);
q1=-2i*(D/F);
z=abs(q1);
figure
h=mesh(x,t,z);
axis([-5,5,-5,0,0,5])
view(15,20)

因为这个matlab程序调用了mesh函数,它需要3个参数都是size一样的矩阵,哪怕矩阵里的内容都是常数,因为前两个参数提供了一个面的东西方向坐标和南北坐标,还差第三个坐标提供垂直方向坐标。

官方的帮助

这个代码是写电工学的还是复变函数的,这个代码风格我觉得十分……眼熟...故我修改查找错误,首先

出错在49-52

错误在代码的第49-52行det函数求的是矩阵的行列式值,结果是个1x1的常数,而非矩阵;而abs是求复数a+bi的模a²+b²的,以及实数的绝对值;故D,F,q1都不是矩阵,因而后面的mesh函数自然也是要跑不了的。

如果只是要修改以运行,可以这么改,即在把mesh语句改成h=mesh(x,t,z+zeros(size(x)))即可(但是这个图肯定不符合要求,具体怎么改还要等我恶补一下电工学)

追问



我要求的是N=2的情况下q[N]的图像,(其中q=0)如果det得出的必定为值的话,那岂不是没法画出图了,我修改了一下程序,这样看起来应该简洁一些。

追答

ok有图了

clear;
clc;

[x,t]= meshgrid(-5:0.1:5,-5:0.1:5) ;
u1=1;
v1=sqrt(3) ;
u2=2;
v2=sqrt(5) ;
j1=u1+1i*v1;
j2=u1-1i*v1;
j3=u2+1i*v2;
j4=u2-1i*v2;
k1=-1i*j1;
k2=-1i*j2;
k3=-1i*j3;
k4=-1i*j4;
h1=x+2*j1*t;
h2=x+2*j2*t ;
h3=x+2*j3*t;
h4=x+2*j4*t;
a11=exp (k1*h1) ;
a12=exp (-k1*h1);
a13=j1*a11;
a14=j1*j1*a11;
a15=j1*a12;
a21=exp (k2*h2) ;
a22=exp (-k2*h2) ;
a23=j2*a21 ;
a24= j2*j2*a21;
a25= j2*a22;
a31=exp (k3*h3) ;
a32=exp (-k3*h3) ;
a33= j3*a31;
a34=j3*j3*a31;
a35=j3*a32 ;
a41=exp (k4*h4) ;
a42=exp (-k4*h4);
a43=j4*a41;
a44= j4*j4*a41;
a45= j4*a42;

z=zeros(size(x));
for mm=1:size(x,1)
for nn=1:size(x,2)
M=[a11(mm,nn) a12(mm,nn) a13(mm,nn) a14(mm,nn);
a21(mm,nn) a22(mm,nn) a23(mm,nn) a24(mm,nn);
a31(mm,nn) a32(mm,nn) a33(mm,nn) a34(mm,nn);
a41(mm,nn) a42(mm,nn) a43(mm,nn) a44(mm,nn)];

N=[a11(mm,nn) a12(mm,nn) a13(mm,nn) a15(mm,nn);
a21(mm,nn) a22(mm,nn) a23(mm,nn) a25(mm,nn);
a31(mm,nn) a32(mm,nn) a33(mm,nn) a35(mm,nn);
a41(mm,nn) a42(mm,nn) a43(mm,nn) a45(mm,nn)];
D=det(M);
F=det(N);
q1=-2i*(D/F);
z(mm,nn)=abs(q1);
end
end
figure
h=mesh(x,t,z);
axis([-5,5,0,5,0,5])
view(15,20)

不确定是不是你要的

温馨提示:答案为网友推荐,仅供参考
相似回答