matlab高手帮下忙~~

2025-02-01 19:43:28
推荐回答(3个)
回答1:

帮我看看下面这个matlab程序,为什么一运行就会说Matrix dimensions must agree,这个错误怎么改也改不好。谁能帮我调好?高分悬赏

function dublefrequency
global c h no ne nee fep fap fel fal lcr lml lmp k0 T delgm lcae lcao...
vl vp sgm1 sgm2 pp rp sgmle sgmlo t0 w0 ap R
c=299792458;
pi=3.1415926535;
h=6.626068e-34;
k0=1.38e-23;
T=300;
pp=80;
lmp=808.8e-7;
lml=1064e-7;
vl=c/lml;
vp=c/lmp;
w0=0.1;
ap=pi*w0^2;
no=1.9573;
ne=2.1652;
lcr=0.1;
lca=1;
R=0.9;
m=ne/no;
ia=5*pi/180;
rp=0.8*pp*(1-exp(-30*lcr))/(h*vp);
E1=[0 110 173 228 437 1e100];
E2=[1966 1987 2046 2067 2157 2180];
E3=[11368 11386 1e100 1e100 1e100 1e100];
E4=[12362 12400 12411 12479 1e100 1e100];
E=[E1;E2;E3;E4];
M=-h*c/k0/T;
fap=exp(M*E(1,1))/(exp(M*E(1,1))+exp(M*E(1,2))+exp(M*E(1,3))+...
exp(M*E(1,4))+exp(M*E(1,5))+exp(M*E(1,6)));
fep=exp(M*E(4,1))/(exp(M*E(4,1))+exp(M*E(4,2))+exp(M*E(4,3))+...
exp(M*E(4,4))+exp(M*E(4,5))+exp(M*E(4,6)));
fal=exp(M*E(2,1))/(exp(M*E(2,1))+exp(M*E(2,2))+exp(M*E(2,3))+...
exp(M*E(2,4))+exp(M*E(2,5))+exp(M*E(2,6)));
fel=exp(M*E(3,1))/(exp(M*E(3,1))+exp(M*E(3,2))+exp(M*E(3,3))+...
exp(M*E(3,4))+exp(M*E(3,5))+exp(M*E(3,6)));
t0=100e-6;
sgm1=25e-19;
sgm2=7.6e-19;
sgmlo=sgm2;
t=[0,1e-2];
N1e=0;
N2e=eps;
N1=[N1e N2e];
N1o=0;
N2o=eps;
N2=[N1o N2o];

for i=1:1:7
alfa=(20-5*i)*pi/180;
nee=((sin(ia+alfa)^2)/ne^2+(cos(ia+alfa)^2/no^2))^(-1/2);
D=sin(alfa)^2+(m^2)*cos(alfa)^2-sin(ia)^2;
k=(m*sin(alfa)*cos(alfa)+sqrt(D)*sin(ia))/(m*((m^2)*cos(alfa)^2-sin(ia)^2));
gme=atan((k-tan(alfa))/(1+k*tan(alfa)));
gmo=asin(sin(ia));
delgm=gme-gmo;
lcre=lcr/cos(gme);
lcro=lcr/cos(gmo);
lcae=lca-lcre*cos(abs(gme-ia))+lcre;
lcao=lca-lcro*cos(abs(gmo-ia))+lcro;
sgmle=((sin(ia+alfa)^2)/sgm1^2+(cos(ia+alfa)^2/sgm2^2))^(-1/2);
[t,n1]=ode23s(@ratee,t,N1);
[t,n2]=ode23s(@rateo,t,N2);
[a1,b1]=size(n1);
[a2,b2]=size(n2);
ne2=n(a1,2);
no2=n(a2,2);
Poute(i)=ne2*ap*(1-R)*h*vl*c/2;
Pouto(i)=no2*ap*(1-R)*h*vl*c/2;
ALF(i)=alfa;
end
subplot(1,2,1);plot(ALF,Poute,'rs-')
xlabel('alfa (rad)')
ylabel('Laser out put power of e (W)')
subplot(1,2,2);plot(ALF,Pouto,'rs-')
xlabel('alfa (rad)')
ylabel('Laser out put power of o (W)')

function dn1=ratee(t,n1)
global c h no ne nee fep fap fel fal lcr lca lml lmp k0 T delgm lcae lcao...
vl vp sgm1 sgm2 pp rp sgmle sgmlo t0 w0 ap R
dn1=zeros(2,1);
dn1(1)=rp-(fal+fel)*(c/nee)*n1(1)*sgmle*n1(1)-n1(1)/t0;
dn1(2)=n1(2)*(c/nee)*sgmle*n1(1)*(lcr/lca)-n1(2)*(1-R)*c/(2*lca);

function dn2=rateo(t,n2)
global c h no ne nee fep fap fel fal lcr lca lml lmp k0 T delgm lcae lcao...
vl vp sgm1 sgm2 pp rp sgmle sgmlo t0 w0 ap
dn2=zeros(2,1);
dn2(1)=rp-(fal+fel)*(c/no)*n2(1)*sgmlo*n2(1)-n2(1)/t0;
dn2(2)=n2(2)*(c/no)*sgmlo*n2(1)*(lcr/lca)-n2

回答2:

矩阵的大小不符合标准

回答3:

好多错误,我竟然能给你改下来
1.第二行 global 中加入lca
2.92行最后一个变量不应该是n2,维数不对,应该是n2(1),n2(2)
3.67、68行的变量n之前并未有赋值,不知道是笔误还是什么。我猜应该分别是n1,n2

更改后如下:

function dublefrequency
global c h no ne nee fep fap fel fal lcr lml lmp k0 T delgm lcae lcao...
vl vp sgm1 sgm2 pp rp sgmle sgmlo t0 w0 ap R lca
c=299792458;
pi=3.1415926535;
h=6.626068e-34;
k0=1.38e-23;
T=300;
pp=80;
lmp=808.8e-7;
lml=1064e-7;
vl=c/lml;
vp=c/lmp;
w0=0.1;
ap=pi*w0^2;
no=1.9573;
ne=2.1652;
lcr=0.1;
lca=1;
R=0.9;
m=ne/no;
ia=5*pi/180;
rp=0.8*pp*(1-exp(-30*lcr))/(h*vp);
E1=[0 110 173 228 437 1e100];
E2=[1966 1987 2046 2067 2157 2180];
E3=[11368 11386 1e100 1e100 1e100 1e100];
E4=[12362 12400 12411 12479 1e100 1e100];
E=[E1;E2;E3;E4];
M=-h*c/k0/T;
fap=exp(M*E(1,1))/(exp(M*E(1,1))+exp(M*E(1,2))+exp(M*E(1,3))+...
exp(M*E(1,4))+exp(M*E(1,5))+exp(M*E(1,6)));
fep=exp(M*E(4,1))/(exp(M*E(4,1))+exp(M*E(4,2))+exp(M*E(4,3))+...
exp(M*E(4,4))+exp(M*E(4,5))+exp(M*E(4,6)));
fal=exp(M*E(2,1))/(exp(M*E(2,1))+exp(M*E(2,2))+exp(M*E(2,3))+...
exp(M*E(2,4))+exp(M*E(2,5))+exp(M*E(2,6)));
fel=exp(M*E(3,1))/(exp(M*E(3,1))+exp(M*E(3,2))+exp(M*E(3,3))+...
exp(M*E(3,4))+exp(M*E(3,5))+exp(M*E(3,6)));
t0=100e-6;
sgm1=25e-19;
sgm2=7.6e-19;
sgmlo=sgm2;
t=[0,1e-2];
N1e=0;
N2e=eps;
N1=[N1e N2e];
N1o=0;
N2o=eps;
N2=[N1o N2o];

for i=1:1:7
alfa=(20-5*i)*pi/180;
nee=((sin(ia+alfa)^2)/ne^2+(cos(ia+alfa)^2/no^2))^(-1/2);
D=sin(alfa)^2+(m^2)*cos(alfa)^2-sin(ia)^2;
k=(m*sin(alfa)*cos(alfa)+sqrt(D)*sin(ia))/(m*((m^2)*cos(alfa)^2-sin(ia)^2));
gme=atan((k-tan(alfa))/(1+k*tan(alfa)));
gmo=asin(sin(ia));
delgm=gme-gmo;
lcre=lcr/cos(gme);
lcro=lcr/cos(gmo);
lcae=lca-lcre*cos(abs(gme-ia))+lcre;
lcao=lca-lcro*cos(abs(gmo-ia))+lcro;
sgmle=((sin(ia+alfa)^2)/sgm1^2+(cos(ia+alfa)^2/sgm2^2))^(-1/2);
[t,n1]=ode23s(@ratee,t,N1);
[t,n2]=ode23s(@rateo,t,N2);
[a1,b1]=size(n1);
[a2,b2]=size(n2);
ne2=n1(a1,2);
no2=n2(a2,2);
Poute(i)=ne2*ap*(1-R)*h*vl*c/2;
Pouto(i)=no2*ap*(1-R)*h*vl*c/2;
ALF(i)=alfa;
end
subplot(1,2,1);plot(ALF,Poute,'rs-')
xlabel('alfa (rad)')
ylabel('Laser out put power of e (W)')
subplot(1,2,2);plot(ALF,Pouto,'rs-')
xlabel('alfa (rad)')
ylabel('Laser out put power of o (W)')

function dn1=ratee(t,n1)
global c h no ne nee fep fap fel fal lcr lca lml lmp k0 T delgm lcae lcao...
vl vp sgm1 sgm2 pp rp sgmle sgmlo t0 w0 ap R
dn1=zeros(2,1);
dn1(1)=rp-(fal+fel)*(c/nee)*n1(1)*sgmle*n1(1)-n1(1)/t0;
dn1(2)=n1(2)*(c/nee)*sgmle*n1(1)*(lcr/lca)-n1(2)*(1-R)*c/(2*lca);

function dn2=rateo(t,n2)
global c h no ne nee fep fap fel fal lcr lca lml lmp k0 T delgm lcae lcao...
vl vp sgm1 sgm2 pp rp sgmle sgmlo t0 w0 ap
dn2=zeros(2,1);
dn2(1)=rp-(fal+fel)*(c/no)*n2(1)*sgmlo*n2(1)-n2(1)/t0;
dn2(2)=n2(2)*(c/no)*sgmlo*n2(1)*(lcr/lca)-n2(2)