Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

I want Solution of my program by using matlab 2008a

Asked by Siva Malla on 6 Dec 2012

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 Comment

Walter Roberson on 7 Dec 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.

Siva Malla

Products

No products are associated with this question.

2 Answers

Answer by Jan Simon on 7 Dec 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 Comments

Jan Simon
Answer by Pritesh Shah on 7 Dec 2012

Problem because There are many place missing semi column at the end of sen stance.

0 Comments

Pritesh Shah

Contact us