Ugrás a tartalomhoz

Impulzív jelenségek modelljei

Karsai János

Typotex

4.3. Modellezési séma 1D rendszerekre

4.3. Modellezési séma 1D rendszerekre

Már ismerjük a rögzített pillanatokban ható impulzív rendszerek legfontosabb tulajdonságait és megoldásának módját Mathematica-val. Most egy általános sémát adunk meg, amely tartalmazza az 1D impulzív rendszerek számítógépes vizsgálatának legfontosabb technikai lépéseit.

A modellezés lépései

A vizsgált rendszer az alábbi alakú:

x'=f(t,x), t?t_i, x(t_i+0)=I_i(x(t_i–0)), x ' = f ? ( t , x ) , t ? t i , x ? ( t i + 0 ) = I i ( x ? ( t i - 0 ) ) , (4.3.1)

ahol x?R, t_i///<///t_(i+1)///<///... .

x ? R , t i ///</// t i + 1 ///</// ... . Megjegyezzük, hogy a programokban technikai okokból az impulzusfüggvények változóinak megadása egy kicsit különbözik a fent megadottól (részletek az IDESolve ismertetésében találhatók).

Összefoglalva, a legfontosabb lépések az alábbiak:

–  A differenciálegyenlet és az impulzusok megadása  
–  A megoldás és a megjelenítés paramétereinek megadása 
–  Vizsgálat impulzusok nélkül 
–  Az iránymező és impulzusmező rajzolása 
–  A differenciálegyenlet egyensúlyi helyzetei 
–  Az impulzusfüggvények fixpontjai 
–  Az impulzív rendszer megoldása 
–  Megoldások ábrázolása 
–  Paraméterek változtatása: vizualizációs alkalmazások. 

A lépéseket egy impulzívan perturbált lineáris differenciálegyenleten mutatjuk be. Az alkalmazásokat és a matematikai kérdéseket később tárgyaljuk. A rendszer alakja:

x'=0.5 x, t?i, x(i+0)=?x(i–0). x ' = 0.5 x , t ? i , x ? ( i + 0 ) = ? ? x ? ( i - 0 ) . (4.3.2)

  • A rendszer megadása

  • A differenciálegyenlet

var az ismeretlent tartalmazó lista
t független változó
xdot a var'=xdot var' = xdot egyenlet jobb oldala

eqnparm={a›0.5,b›0};

eqnparm = { a 0.5 , b 0 } ;

var={x};xdot={ax+b};

var = { x } ; xdot = { a ? x + b } ;

  • Az impulzusok

Imax az impulzusok maximális száma
tn az impulzusok idejét tartalmazó lista
Imp[i, tn, xn] az impulzus a tn[[i]] pillanatban

Az impulzus Mathematica-beli alakja:

x[tn[[i]]+0]:=x[tn[[i]]*An[[i]].

Clear[tn,An,Imp,p,A];

Clear [ tn , An , Imp , p , A ] ;

Imax=50;Iparm={p›1.,A›0.7};tn=Table[np,{n,0,Imax}]/.Iparm;

Imax = 50 ; Iparm = { p 1. , A 0.7 } ; tn = Table [ n ? p , { n , 0 , Imax } ] /. Iparm ;

An=Table[{A},{i,0,Imax}]/.Iparm;

An = Table [ { A } , { i , 0 , Imax } ] /. ? Iparm ;

Imp[n_,tn_List,x_List]:=x*An[[n]];

Imp [ n_ , tn_List , x_List ] := x * An [ n ] ;

  • A megoldás és megjelenítés paraméterei

t független változó
t0 kezdő időpillanat
t1 végső időpillanat
[x1, x2] megjelenítés intervalluma

t0=0; t1=10; x1=0; x2=3.5;

t0 = 0 ; t1 = 10 ; x1 = 0 ; x2 = 3.5 ;

  • Vektormezők

  • Az iránymező

PlotFld=PlotVectorField[{1,xdot[[1]]}/.eqnparm,{t,t0,t1},{x,x1,x2},Axes›True,HeadLength›0.,ScaleFactor›0.6];

PlotFld = PlotVectorField [ { 1 , xdot [ 1 ] } /. ? eqnparm , { t , t0 , t1 } , { x , x1 , x2 } , Axes True , HeadLength 0. , ScaleFactor 0.6 ] ;

  • Az impulzusmező

A differenciálegyenlettel ellentétben az impulzusokat jelző nyilak nem csak az irányt, hanem a tényleges ugrást is mutatják.

PlotImp=PlotFixedImpulseField[Imp,tn,11,{x,x1,x2,1},Axes›True];

PlotImp = PlotFixedImpulseField [ Imp , tn , 11 , { x , x1 , x2 , 1 } , Axes True ] ;

A két mező együtt jól jelzi a rendszer várható viselkedését:

Show[PlotFld,PlotImp];

Show [ PlotFld , PlotImp ] ;

Mivel t nem változik az impulzusmező vektorai mentén, az ábra gyakran használhatatlan. Ekkor magukat az impulzusfüggvényeket ábrázolhatjuk. Ebből következtethetünk a fixpontokra, ami az egyensúlyi helyzetek meghatározásához szükséges. Az alábbi ábra egy animáció első kockája, ami most elegendő, hiszen az impulzusok azonosak. Az impulzust (vastagabb vonal) és az x egyenest ábrázoljuk.

AnimateImpulse[Imp,tn,1,{x,x1,x2}];

AnimateImpulse [ Imp , tn , 1 , { x , x1 , x2 } ] ;

Az alábbi 3D ábrázolás az egyes ugrásokat időben együtt mutatja be.

StackImpulse[Imp,tn,5,{x,x1,x2},BoxRatios›{3,1,1}];

StackImpulse [ Imp , tn , 5 , { x , x1 , x2 } , BoxRatios { 3 , 1 , 1 } ] ;

  • Egyensúlyi helyzetek

  • A differenciálegyenlet egyensúlyi helyzetei

A Mathematica-ban járatlan olvasók az egyenletek megoldását végző szimbolikus és numerikus függvényeket az elektronikus melléklet M1.4. fejezetében megtalálják.

Steady=x /. NSolve[xdot==0,{x}]/. eqnparm

Steady = x /. NSolve [ xdot == 0 , { x } ] /. eqnparm

{0}

{ 0 }

  • Az impulzusfüggvények fixpontjai

SteadyImp=var/.Solve[Imp[1,tn,var]==var,var]

SteadyImp = var /. ? Solve [ Imp [ 1 , tn , var ] == var , var ]

{{0}}

{ { 0 } }

  • Az impulzív rendszer megoldása

Az IDESolve numerikus megoldóprogramot használjuk. A kezdeti feltételeket az x0tab lista tartalmazza, azaz x[t0]=x0tab[[i]] (i=1,2,...)

( i = 1 , 2 , ... ) :

x0tab={{0.},{0.1},{0.4},{0.5}};

x0tab = { { 0. } , { 0.1 } , { 0.4 } , { 0.5 } } ;

Sol=IDESolve[xdot/.eqnparm,var,tn/.Iparm,Imp,x0tab,{t,t0,t1}];

Sol = IDESolve [ xdot /. ? eqnparm , var , tn /. ? Iparm , Imp , x0tab , { t , t0 , t1 } ] ;

  • Az iránymező és a megoldások ábrázolása

PlotSol=Plot[Evaluate[Sol],{t,t0,t1},PlotRange›{x1,x2},PlotStyle›{RGBColor[0,0,1]}];

PlotSol = Plot [ Evaluate [ Sol ] , { t , t0 , t1 } , PlotRange { x1 , x2 } , PlotStyle { RGBColor [ 0 , 0 , 1 ] } ] ;

ShPlot=Show[PlotSol,PlotFld,PlotRange›{x1,x2}];

ShPlot = Show [ PlotSol , PlotFld , PlotRange { x1 , x2 } ] ;

Az impulzusok idejétől való függés

Most az impulzusok időpontjai közti p távolság változtatásának hatását mutatjuk be animáció segítségével. Az egyes képkockák színe a paraméter változásának megfelelően változik.

tn=Table[np,{n,0,Imax}];

tn = Table [ n ? p , { n , 0 , Imax } ] ;

TAnim=10;x0Anim={0.5};p0min=0.5;p0max=1.5;Np0=8;

TAnim = 10 ; x0Anim = { 0.5 } ; p0min = 0.5 ; p0max = 1.5 ; Np0 = 8 ;

  • A képkockák ábrázolása E

    E

Animp0=Table[Plot[Evaluate[IDESolve[xdot/.eqnparm,var,tn,Imp,{x0Anim},{t,t0,TAnim}]], {t,t0,TAnim},PlotRange›{x1,x2},PlotStyle›{RGBColor[(p–p0min/p0max–p0min),0,0]}],{p,p0min,p0max,(p0max–p0min/Np0)}];

Animp0 = Table [ Plot [ Evaluate [ IDESolve [ xdot /. ? eqnparm , var , tn , Imp , { x0Anim } , { t , t0 , TAnim } ] ] , { t , t0 , TAnim } , PlotRange { x1 , x2 } , PlotStyle { RGBColor [ p - p0min p0max - p0min , 0 , 0 ] } ] , { p , p0min , p0max , p0max - p0min Np0 } ] ;

  • A képkockák együtt

Show[Evaluate[Animp0]];

Show [ Evaluate [ Animp0 ] ] ;

A kezdeti feltételektől való függés

Most a megoldás kezdeti x0 értékét változtatjuk.

Clear[x0];

Clear [ x0 ] ;

TAnim=10;x0min=0;x0max=0.5;Nx0=8;

TAnim = 10 ; x0min = 0 ; x0max = 0.5 ; Nx0 = 8 ;

  • A képkockák ábrázolása E

    E

Animx0=Table[Plot[Evaluate[IDESolve[xdot/.eqnparm,var,tn/.Iparm,Imp,{{x0}},{t,t0,TAnim}]],{t,t0,TAnim}, PlotStyle›{RGBColor[(x0–x0min/x0max–x0min),0,0]},PlotRange›{x1,x2}],{x0,x0min,x0max,(x0max–x0min/Nx0)}];

Animx0 = Table [ Plot [ Evaluate [ IDESolve [ xdot /. ? eqnparm , var , tn /. ? Iparm , Imp , { { x0 } } , { t , t0 , TAnim } ] ] , { t , t0 , TAnim } , PlotStyle { RGBColor [ x0 - x0min x0max - x0min , 0 , 0 ] } , PlotRange { x1 , x2 } ] , { x0 , x0min , x0max , x0max - x0min Nx0 } ] ;

  • A képkockák együtt

Show[Evaluate[Animx0]];

Show [ Evaluate [ Animx0 ] ] ;

Az impulzusok nagyságától való függés

Ebben az animációban az impulzusok nagyságát, az x(i+0)=?x(i–0)

x ? ( i + 0 ) = ? ? x ? ( i - 0 ) impulzusban az ? együtthatót változtatjuk. A többi paramétert most közvetlenül adjuk meg.

Clear[p,A];

Clear [ p , A ] ;

x0=0.3; TAnim=10; x1=0; x2=2.5;

x0 = 0.3 ; TAnim = 10 ; x1 = 0 ; x2 = 2.5 ;

Amin=0; Amax=0.8; NAA=8; Iparm1={p-///>///N[1]};

Amin = 0 ; Amax = 0.8 ; NAA = 8 ; Iparm1 = { p -///>/// N [ 1 ] } ;

An=Table[{A},{i,0,Imax}];

An = Table [ { A } , { i , 0 , Imax } ] ;

  • A képkockák ábrázolása E

    E

AnimA=Table[Plot[Evaluate[IDESolve[xdot/.eqnparm,var,tn/.Iparm1,Imp,{{x0}},{t,t0,TAnim}]], {t,t0,TAnim},PlotRange›{x1,x2},PlotStyle›{RGBColor[(A–Amin/Amax–Amin),0,0]}],{A,Amin,Amax,(Amax–Amin/NAA)}];

AnimA = Table [ Plot [ Evaluate [ IDESolve [ xdot /. ? eqnparm , var , tn /. ? Iparm1 , Imp , { { x0 } } , { t , t0 , TAnim } ] ] , { t , t0 , TAnim } , PlotRange { x1 , x2 } , PlotStyle { RGBColor [ A - Amin Amax - Amin , 0 , 0 ] } ] , { A , Amin , Amax , Amax - Amin NAA } ] ;

  • A képkockák együtt

Show[Evaluate[AnimA]];

Show [ Evaluate [ AnimA ] ] ;