I want Solution of my program by using matlab 2008a

1 次查看(过去 30 天)
I wrote a program to find the 3 variables from 3 equations in matlab 2008a. but its taking too much time to giving outputs and some times my system get hanging is I run this program. my system has 16GB ram. Here i posted my program with variables are VL1, L1 and ID. I used simple equations, but why matlab 2008 is taking more time to give outputs?. can anybody give alternate solution/code/commends to solve this 3 variables very quickly by using matlab 2008a.
Program:
clc
clear all
g=4;
L=1.0*1e-4;
a=0.15*1e-4;
W=100*1e-4;
q=1.6*1e-19;
NT1=4*1e15;
NT2=3*1e15;
NT3=4*1e15;
CCp1=3*1e-14;
CCn1=2*1e-14;
CCp2=1*1e-15;
CCn2=2.4*1e-15;
CCp3=1*1e-15;
CCn3=5*1e-15;
Eg=3.2*q;
Ef=1.5313*q;
Et1=Eg-0.67*q;
Et2=Eg-1.65*q;
Et3=Eg-0.93*q;
Ev=0;
Es=85.845*1e-14;
K=8.62*1e-5;
T=300;
KTev=K*T;
KT=0.0259*q;
m0=9.1*1e-31;
mp=0.77*m0;
Vpth=(3*KT/mp)^0.5;
mn=0.351*m0;
Vnth=(3*KT/mn)^0.5;
mc=0.76*m0;
mv=1.2*m0;
h=6.626*1e-34;
Nc=2*((2*pi*mc*KT/h^2)^1.5)*1e-6;
Nv=2*((2*pi*mv*KT/h^2)^1.5)*1e-6;
Nd=5*1e17;
Nref=2*1e17;
Umin=40;
Umax=950;
r=0.76;
vsat=2.07*1e7;
y=(Eg/(2*KT));
ni=((Nc*Nv)^0.5)*exp(-y);
Vbi=0.8-((KT/q)*log(Nc/Nd));
U0= Umin + ((Umax - Umin)/(1+ ((Nd/Nref)^r)));
d1=0.98
Ec=(vsat/U0)*(d1/(1-d1));
Nsam=3*1e15;
Nsdp=5*1e15;
Ep1=CCp1*Vpth*Nv*exp(-((Et1-Ev)/KT));
En1=CCn1*Vnth*Nc*exp(-((Eg-Et1)/KT));
Ep2=CCp2*Vpth*Nv*exp(-((Et2-Ev)/KT));
En2=CCn2*Vnth*Nc*exp(-((Eg-Et2)/KT));
Ep3=CCp3*Vpth*Nv*exp(-((Et3-Ev)/KT));
En3=CCn3*Vnth*Nc*exp(-((Eg-Et3)/KT));
NT1mnoneql=NT1*(Ep1/(Ep1+En1));
NT1meql=NT1/(1+((1/g)*exp((Et1-Ef)/KT)));
NT2mnoneql=NT2*(Ep2/(Ep2+En2));
NT2meql=NT2/(1+((1/g)*exp((Et2-Ef)/KT)));
NT3mnoneql=NT3*(Ep3/(Ep3+En3));
NT3meql=NT3/(1+((1/g)*exp((Et3-Ef)/KT)));
N1subm=NT1mnoneql-NT1meql;
N2subm=NT2mnoneql-NT2meql;
N3subm=NT3mnoneql-NT3meql;
Nsubm=N1subm+N2subm+N3subm;
Ubi=(KT/q)* log(Nd/Nsubm);
Ndepp=Nd-Nsam+Nsdp+(NT1*(En1/(Ep1+En1)))+(NT2*(En2/(Ep2+En2)))+(NT1*(En3/(Ep3+En3)));
k11=((Nsubm/(Nsubm+Ndepp)))^0.5;
G0=(q*(Nd-Nsubm)*U0*W*a)/L;
Vp=(q*Ndepp*a^2)/(2*Es);
k1=q*(Nd-Nsubm)*vsat*W*a*d1;
Z=(q*Ndepp*a^2*U0)/(2*Es*L*vsat);
VG=-2;
VL=0.1;
Rs=25.09;
Rdo=19.5;
VD=0:0.2:3;
for i=1:16
syms Ich ID VL1 L1
Lsg=0.3*1e-4;
Lgd=0.8*1e-4;
Lg=L;
G0=(q*Nd*U0*W);
Vsbi=0.6348;
Vgd=-VG+VD(i);
geta=(Es*Vgd)/(q*Nd*Lgd);
if VD(i)<double(VL)
D=(Lgd*Ich)/(G0*Vgd);
hlsg=(((2*Es)/(q*Nd))*(Vsbi-VG-Vgd+VD(i)))^0.5;
h0=(((2*Es)/(q*Nd))*(Vsbi-VG+(VD(i)-Ich*Rdo)))^0.5;
y=((0.5*(h0^2-hlsg^2)-D*(h0-hlsg))+(D*(D-a)*log (abs((h0+D-a)/(hlsg+D-a)))))-(geta*(Lgd));
P=solve(y)
h011=(((2*Es)/(q*Nd))*(Vsbi-VG+(VD(i)-P*Rdo)))^0.5;
h01=real(h011);
B1=((P/G0)*((Lgd/Vgd)))-a ;
B=real(B1);
K1=hlsg-h01-(B*(log(abs((B+hlsg)/(B+h01)))));
K=real(K1);
Rd1=Lgd*K/(Es*U0*W*Vgd);
Rd=Rd1;
Pr=P;
else
Ps=Pr
h011=(((2*Es)/(q*Nd))*(Vsbi-VG+(VD(i)-Ps*Rdo)))^0.5;
h01=real(h011);
B1=((P/G0)*((Lgd/Vgd)))-a
B=real(B1);
K1=hlsg-h01-(B*(log(abs((B+hlsg)/(B+h01)))));
K=real(K1);
Rd1=Lgd*K/(Es*U0*W*Vgd);
Rd=Rd1;
end
Rd=double(Rd1)
Y1=q*W*U0*vsat*(Nd-Nsubm)/(vsat*L1+U0*(VL1-ID*(Rs)));
hL1=((Vbi-VG+VL1)/Vp)^0.5;
hs=((Vbi-VG+ID*Rs)/Vp)^0.5
h1L1=((Ubi+VL1)/Vp)^0.5
h1s=((Ubi+ID*Rs)/Vp)^0.5;
eq1=VD(i)-VL1-ID*Rd-2*hL1*Ec/pi*sinh(pi*(L-L1)/(2*hL1));
eq2=ID-Y1*a*Vp*(((VL1-ID*Rs)/Vp)-2/3*(hL1^3-hs^3)-2/3*k11*(h1L1^3-h1s^3));
eq3=ID-q*(Nd-Nsubm)*W*d1*vsat*a*(1-hL1-k11*h1L1);
[ID,L1, VL1]=solve(eq1,eq2,eq3,ID,L1,VL1)
VL=VL1
end
  1 个评论
Walter Roberson
Walter Roberson 2012-12-7
Have you profiled to figure out which part is slow?
I do not have the Symbolic Toolbox, but if you can show the inputs to one of the solve() that is taking so long, I can test to see roughy how long would be expected.

请先登录,再进行评论。

回答(2 个)

Jan
Jan 2012-12-7
  • Avoid all repeated processing inside the loop. E.g. this can be move outside the FOR loop and I guess trhis concerns a lot of other lines also:
syms Ich ID VL1 L1
Lsg=0.3*1e-4;
Lgd=0.8*1e-4;
Lg=L;
  • sqrt(x) is faster than x^0.5
  • 3.14e8 is faster than 3.14 * 1e8
  • When most of the time is spent in the solve() command, improving the shown code is irrelevant. Use tic, toc to measure this.
  • The code looks complicated, which impedes a debugging. Therefore I do not understand the sentence "I used simple equations".Any simplifications would be a good strategy. Comments do not increase the run-time, but reduce the debug time.
  • Please explain, what "but its taking too much time to giving outputs" means. Actually "too much time" might be a seconds or a month, but you get a result in both cases.
  • "why matlab 2008 is taking more time" - more time than what?

Pritesh Shah
Pritesh Shah 2012-12-7
Problem because There are many place missing semi column at the end of sen stance.

Community Treasure Hunt

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

Start Hunting!

Translated by