I want Solution of my program by using matlab 2008a
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commento
Walter Roberson
il 7 Dic 2012
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.
Risposte (2)
Jan
il 7 Dic 2012
- 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?
0 Commenti
Pritesh Shah
il 7 Dic 2012
Problem because There are many place missing semi column at the end of sen stance.
0 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!