1

J'utilise pour résoudre une fonction ode simple. Le code est donné ci-dessous.Comment faire passer la valeur dépendant du temps dans Ode45 dans matlab

function window_sine 

% Some constant values to be used later in the code............. 

epsilon0=8.85*10^-12; 
d_mos=0.65*10^-9; 
epsilon_mos_min=5*epsilon0; 
epsilon_mos_max=20*epsilon0; 
d_g=10*10^-9; 
epsilon_g=30*epsilon0; 
epsilon_mos=5*epsilon0; 
vt=0; 
e=1.6*10^-19; 
n=[]; 
i=1; 
u=30; % cm^2/v*S 
h=1.05*10^-34; % j*s 
cond_d=e^2/h; 

%tIME Step........... 

step=0.1; 
t = 0:step:10; 

%Some other constant values..simple.............. 
c_g=(epsilon_g/d_g); 
c_mos=(epsilon_mos/d_mos); 
c_t=1/((1/c_g)+(1/c_mos)); 
% This below equation involves time "t" which is defined above. 
vs=(1-(c_t/c_g))*t; 

%ode function calling............ 

p0=0.01; 
[t,p] = ode45(@state,t,p0); 

%plotting the result.................. 

figure 
plot(t,p) 
title('State Variable') 

%Now the Ode45 function................. 

function dpdt = state(t,p) 

nc=6.8*10^12; 
smooth=1; 
vg=t; 
k=10^-1; 

window1=1-((2*p)-1).^(2*smooth); 

% How to incorporate the time dependent "n" value here.......... 

dpdt=k*(n-nc)*window1; 

end 

end 

Maintenant, le problème est "n" dans la fonction. son temps dépend et sa valeur peut être calculée séparément en utilisant le code suivant. En court, la valeur de "n" augmente linéairement avec le "t". Il est à noter que "t" est le même partout, le temps utilisé en dérivée.

Le problème est de savoir comment incorporer cette valeur "n" dépendante du temps dans ma fonction ode où j'ai écrit "n". ? Où écrire cette partie de code, dans le bloc fonctionnel ou dans le code principal? Merci

Répondre

0

Notez que le premier argument de votre fonction ode est le temps, exactement pour les variables dépendantes du temps comme les vôtres et les contraintes rhéonomiques. Alors, alimentez simplement les constantes à votre fonction et faites le calcul dépendant du temps à l'intérieur de votre fonction ode.

Par exemple:

function dydt = myodefun(t,y,c) 
n=1+t*c; % calculate your time-dependent value n 
dydt = [y(2)*c; (1-y(1)^2)*y(2)-y(1)]; 

Run par exemple avec:

c=1; % a constant, or a structure of constants 
[email protected](t,y)myodefun(t,y,c) 
[tout,yout]=ode45(myodefunn,[0 20],[2 0]);