580 likes | 952 Views
Riešenie rovníc v Matlabe. Lineárne numerické symbolické Nelineárne numerické symbolické Diferenciálne numerické symbolické. Kozák 2001-2004. Demonštračné príklady ku kurzu Matlabu 1999 - 2002 ver. 6. 5-7.1.
E N D
Riešenie rovníc v Matlabe Lineárne numerické symbolické Nelineárnenumerické symbolické Diferenciálne numerické symbolické Kozák 2001-2004
Demonštračné príklady ku kurzu Matlabu 1999-2002 ver.6.5-7.1 % Demo1 - pripravil Š.Kozak,KASR 2001-2004 %Numerické riešenie linearnych rovnic Ax=b, x=inv(A) A=[1 2 1;3 4 1;2 5 7] % vstup matice b=[1 2 3]' %vstup vektora ' znamena transponovanie x1=A\b % ries. systemu rovnic v x1 je riesenie echo on pause % prerus. behu, pokracovanie lub.klavesnicou format long % dlhy format (default je short) x2=inv(A)*b% iny sposob riesenia cez inverziu pause format short% kratky format (4 miesta za des.bodkou) E1=A*x1% skuska spravnosti pause E2=A*x2% skuska spravnosti
% Symbolické a numerické riešenie lineárnych algebraických rovníc syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b1 b2 b3; %deklaracia symbolickych premennych A1 = [a11 a12 ; a21 a22]; % zadanie matice vo vseobecnej forme (2x2) B1=[b1 b2];% zadanie vektora pravej strany XII = A1\B1'; % riesenie systemu rovnic x11 = XII(1) % vyber konkr.riesenia z celkoveho riesenia x12 = XII(2) pause A2=[a11 a12 a13;a21 a22 a23;a31 a32 a33] % zadanie matice vo vseobecnej forme (3x3) B2 = [b1 b2 b3]; a11=1;a12=2;a13=1;a21=3;a22=4;a23=1; a31=2;a32=5;a33=7;b1=1;b2=2;b3=3; XIII=A2\B2'; x21 = XIII(1) x22 = XIII(2) x33 = XIII(3) xs2=subs(XIII)% dosadenie (substitucia) do symbolickeho riesenia b=A*xs2 % skuska riesenia pause Ain=inv(A2) % symbolicka inverziA xs3=Ain*B2'% symbolicke riesenie xr=subs(xs3) % dosadenie (substitucia) do symbolickeho riesenia
Symbolické riešenie rovníc Syntax: SOLVE Symbolické riešenie algebraických rovníc SOLVE('eqn1','eqn2',...,'eqnN') SOLVE('eqn1','eqn2',...,'eqnN','var1,var2,...,varN') SOLVE('eqn1','eqn2',...,'eqnN','var1','var2',...'varN')
Symbolické riešenie sústavy lineárnych rovníc Priamy spôsob riešenia lin.rovníc (nezabudnúť príkaz syms-definovanie symbolických premenných) syms a11 a12 a21 a22 b1 b2 ; %deklaracia symbolickych premennych [x1,x2]=solve('a11*x1+a12*x2=b1','a21*x1+a21*x2=b2') %koniec symbolickeho riesenia, takto mozno riesit aj nelinearne systemy
Symbolické riešenie nelineárnych rovníc % Kvadratická rovnica syms a b c x x = solve(a*x^2 + b*x + c) % sym.riesenie kvadr.rovnice x = solve('a*x^2 + b*x + c = 0') % Kubická rovnica syms a b c x x=solve('a*x^3+b*x^2+c*x+d')
Symbolické riešenie transcedentálnych rovníc [x,y] = solve('sin(x+y)-exp(x)*y = 0','x^2-y = 2') [x1,x2]=solve('2*x1 - x2 - exp(-x1)',... '-x1 + 2*x2 - exp(-x2) ')
Symbolické riešenie diferenciálnych rovníc y = dsolve('Dy = -a*y','y(0) = 1') % symb. ries. dif. rovnice 1.radu y = dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0') % symb. ries. dif. rovnice 2. radu Počiatočné podmienky y = dsolve('D2y = sin(y)'); pretty(y)
dsolve('eqn1','eqn2', ...) symb.ries. dif. rovnic Príklady: dsolve('Dx = -a*x') ans = exp(-a*t)*C1 x = dsolve('Dx = -a*x','x(0) = 1','s') x = exp(-a*s) y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0') y = [ sin(t)] [ -sin(t)] S = dsolve('Df = f + g','Dg = -f + g','f(0) = 1','g(0) = 2')
S.f = exp(t)*cos(t)+2*exp(t)*sin(t) S.g = -exp(t)*sin(t)+2*exp(t)*cos(t) Y = dsolve('Dy = y^2*(1-y)') Warning: Explicit solution could not be found; implicit solution returned. Y = t+1/y-log(y)+log(-1+y)+C1=0 dsolve('Df = f + sin(t)', 'f(pi/2) = 0') dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0') S = dsolve('Dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1') S = dsolve('Du=v, Dv=w, Dw=-u','u(0)=0, v(0)=0, w(0)=1') w = dsolve('D3w = -w','w(0)=1, Dw(0)=0, D2w(0)=0') y = dsolve('D2y = sin(y)'); pretty(y)
Numerické riešenie nelinárnych rovníc FSOLVE riešenie nelineárnych rovníc metódou najmenších štvorcov F(X)=0kde F a X sú vektory alebo matice Syntax : X=FSOLVE(FUN,X0)% X0 vektor start. hodnot FUN system rovníc rovnica) X výsledný vektor alebo matica X=FSOLVE(FUN,X0,OPTIONS) alebo [X,FVAL,EXITFLAG]=FSOLVE(FUN,X0,...) If EXITFLAG je: > 0 riesenie konverguje FSOLVE converged to a solution X. = 0 potom max. počet iterácií bol dosiahnuty. < 0 riesenie nekonverguje
1. 2. 3. fun = inline('sin(3 *x)'); x = fsolve(fun,[1 4],optimset('Display','off')) x = 1.0472 4.1888 fun1 = inline('(x.^2+2.*x+1) ') x = fsolve(fun1,[0 4],optimset('Display','on')) Tretí spôsob riešenia NR: x = fsolve(@mojafun,[2 3 4],optimset('Display','iter')) kde MOJAFUNje MATLAB funkcia napr: function F = mojafun(x) F = sin(x);
fsolve-príklad Pre dve NLR : 2x1-x2–e-x1 =0, -x1+2x2-e-x2=0 Poc.podmienky x0=[-5 -5]. Najlepsie je vytvorit si zvlast funkciu function F = mojafun(x) F = [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]; x0 = [-5; -5]; %Startovacie podmienky options=optimset('Display','iter'); % Zobrazovanie výsledkov (x-je riešenie, fval hodnota ucel.funkcie) Optimization terminated successfully: [x,fval] = fsolve(@mojafun,x0,options)
Vypis riesenia : (x-je riešenie, fval hodnota ucel.funkcie) Optimization terminated successfully: [x,fval] = fsolve(@mojafun,x0,options) Directional Iteration Func-count Residual Step-size derivative 1 2 39.6268 1 -79.3 2 9 2.14377 1.44 11.5 3 15 0.00107228 1.06 -0.0155 4 21 6.6055e-012 1 -1.85e-008 Optimization terminated successfully: Search direction less than tolX x = 0.5671 0.5671 fval = 1.0e-008 * -0.2820 0.6111
fzero Najdenie koreňa funkcie jednej premenneje Syntax x = fzero(fun,x0) x = fzero(fun,x0,options) x = fzero(fun,x0,options,P1,P2,...) [x,fval] = fzero(...) [x,fval,exitflag] = fzero(...) [x,fval,exitflag,output] = fzero(...)
Príklady: X = FZERO(FUN,X0) FUN môže byť definovaná pomocou znaku @: X = fzero(@sin,3) Riešením je pi X = fzero(@sin, 3, optimset('disp','iter')) riešením je pi, (default tolerance a zobrazuje iterácie FUN môže byť zadávaná ako inline objekt: X = fzero(inline('sin(3*x)'),2); Limitations: X = fzero(inline('abs(x)+1'), 1) returns NaN since this function does not change sign any-where on the real axis (and does not have a zero as well).
X = fzero(@tan,2) returns X near 1.5708 because the discontinuity of this function near the point X gives the appearance (numerically) that the function changes sign at X.
Riešenie diferenciálnych rovníc [T,Y] = ODE45(ODEFUN,TSPAN,Y0) with TSPAN = [T0 TFINAL] [T,Y] = ODE45(ODEFUN,TSPAN,Y0,OPTIONS) ODE solvers:ODE23, ODE113, ODE15S, ODE23S, ODE23T, ODE23TB options handling: ODESET, ODEGET output functions: ODEPLOT, ODEPHAS2, ODEPHAS3, ODEPRINT evaluating solution: DEVAL ODE examples: RIGIDODE, BALLODE, ORBITODE Metódy integrácie :
Príklady: [t,y]=ode45(@vanderpoldemo,[0 20],[2 0]) plot(t,y(:,1)) function dydt = vanderpoldemo(t,y,Mu) %VANDERPOLDEMO DefinujeVan der Polovu rovnicu. dydt = [y(2); Mu*(1-y(1)^2)*y(2)-y(1)]; [t,y] = ode23(@prstrana,[t0 tfinal],y0) function yp = prstrana(t,y) %vektor pravych stran. dif.rovnic %y1' = (1 - alpha*y2)*y1, alpha=0.01, beta=0.02 %y2' = (-1 + beta*y1)*y2 % yp=[y(1),y(2)]=… % zapisana ako yp‘=Ay, A=[1 - .01*y(2) 0;0 -1 + .02*y(1)] yp = diag([1 - .01*y(2), -1 + .02*y(1)])*y; % alebo iny zapis yp=A*y, ak dopredu definujeme A
Demonštračné príklady integračné metódy% Model zásobníka vodyecho offglobal ro g A1 A2 Hh Qhro=1000 % [kg/m3]g=9.81 % [m/sek2]A1=pi/4; % [m2]A2=pi/400; % [m2]Hh=1; % [m]Qh=34.77 % [kg/sek]% Integracia systemu nelinearnych rovnic metódou ODE45% Vstupne parametre (nevyhnutne)% Pociatocny cas integracie t0t0=0;% Koncovy cas integracie tftf=300;H0=0.5 % Pociatocna podmienka[t,H]=ode45(@zasps2,[t0 tf],H0); % volanie procedury integraciefigure(1)plot(t,H);gridxlabel('Cas [sek]'),ylabel('H(m)') Q1(t) H Q2(t)
title('Integracia systemu nelinearnych rovnic') %Vypocet vystupneho prietoku figure(2) k3=ro*sqrt(2*g)*A2; Q2=k3*sqrt(H); plot(t,Q2);grid xlabel('Cas [sek]'),ylabel('Q2 [kg/sek]') function Hder=zasps2(t,H)function Q=q(t) global ro g A1 A2 Hh Qh global Qh Q1=q1(t); Q=Qh; k1=-A2*sqrt(2*g)/A1; k2=1/ro/A1; Hder=k1*sqrt(H)+k2*Q1; function Hder=hder(t,H) global ro g A1 A2 Hh Qh Q=q(t) k1=-A2*sqrt(2*g)/A1 k2=1/ro/A1 Hder=k1*sqrt(H)+k2*Q function Q1=q1(t) global Qh k=1; w=0.05; %frekvencia sin.signalu DQ=k*sin(w*t); Q1=Qh+DQ;
Príklady - riesenie a zapis diferencialnych rovnic % Uvazujme system dvoch difrenciálnych rovníc % y1' = (1 - alpha*y2)*y1 % y2' = (-1 + beta*y1)*y2 % Pociatocny cas integracie t0=0, koncový čas tf=15 % Default hodnota presnosti integracie je 1e-3 (0.1 percent). t0 = 0; tfinal = 15; y0 = [20 20]'; % Definicia poc.podmienok % Volanie procedury : % [t,y] = ode23(@prstrana,[t0 tfinal],y0); % funkcia prstrana je prava str.difer.rovnic, zapisuje sa % samostatne % [t,y]=ode45(…..) % Alebo ina metoda integracie ODE45, ODE113, ODE15S, % ODE23S, ODE23T, ODE23TB
pause [t,y] = ode23(@prstrana,[t0 tfinal],y0); % vol.proc.integr. %vykreslenie trajektorii v casovej oblasti plot(t,y), title('Demo-priklad casova oblast') pause %vykreslenie trajektorii vo fazovej rovine plot(y(:,1),y(:,2)), title('Demo- priklad faz.rovina') pause function yp = prstrana(t,y) %vektor pravych stran. dif.rovnic %y1' = (1 - alpha*y2)*y1, alpha=0.01, beta=0.02 %y2' = (-1 + beta*y1)*y2 % yp=[y(1),y(2)]=… % zapisana ako yp‘=Ay, A=[1 - .01*y(2) 0;0 -1 + .02*y(1)] yp = diag([1 - .01*y(2), -1 + .02*y(1)])*y; % alebo iny zapis yp=A*y, ak dopredu definujeme A
Iné priklady zápisu riesenia diferencialnych rovnic Vhodny pre starsie aj nove verzie ODE % [T,Y] = ode45(@prstr1,[t0 tfinal],y0); %Diferencialna rovnica je druheho radu %napr.Van der Pol rovnica y'' + (y^2 - b)y' + y = 0 %v takomto pripade musime ju znizit na system rovnic prveho radu % y1' = y1(1 - y2^2) - y2 % y2' = y1 pause % Strike any key to continue. clc % To simulate the differential equation defined in VDPOL over the % interval 0 < t < 20, použitím ODE23:
t0 = 0; tfinal = 15; y0 = [0 0.25]; % Define initial conditions. % [t,y] = ode23(@prstr1,t0,tfinal,y0); [t,y] = ode23(@prstr1,t0,tfinal,y0); % to je % najjednoduchsie volanie procedury integracie plot(t,y), title('Zobrazenie traj. v casovej oblasti'), pause plot(y(:,1),y(:,2)) title('Zobrazenie trajektorii vo fazovej rovine‘ pause clc % Ak chceme pouzit inu proced.integracie napr. ode 45 % [T,Y] = ode45(@vdpol,t0,tfinal,y0); %volanie proced.
function yp = prstr1(t,y); % prava strana je zapisana ako vektor jednotlivych dif.rovnic yp = [(y(1) .* (1 - y(2).^2) - y(2)); y(1)]; Example 1. Trojrozmerný dynamický systém Zápis pravých stran: function dy = rigid(t,y) dy = zeros(3,1); % a column vector dy(1) = y(2) * y(3); dy(2) = -y(1) * y(3); dy(3) = -0.51 * y(1) * y(2); %Nastavenie presnosti riešenia options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); [t,y] = ode45(@rigid,[0 12],[0 1 1],options); Plotting the columns of the returned array Y versus T shows the solution: plot(t,y(:,1),'-',t,y(:,2),'-.',t,y(:,3),'.')
[x,y]=solve('x^2*y^2 - 2*x - 1 = 0','x^2 - y^2 - 1 = 0') % riesenie systemu 2NR
[x1,x2]=solve('a11*x1+a12*x2=b1','a21*x1+a21*x2=b2') % priamy sposob riesenia lin.rovnic %koniec symbolickeho riesenia, takto mozno riesit aj nelinearne systemy syms a b c x x = solve(a*x^2 + b*x + c)% symbol. riesenie kvadr.rovnice x = solve('a*x^2 + b*x + c = 0') [x,y]=solve('x^2*y^2 - 2*x - 1 = 0','x^2 - y^2 - 1 = 0') % riesenie % systemu [x,y] = solve('sin(x+y)-exp(x)*y = 0','x^2-y = 2') y = dsolve('Dy = -a*y','y(0) = 1') % symb. ries. dif. rovnic y = dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0') y = dsolve('D2y = sin(y)'); pretty(y)
Príklad : Riešenie systému nelinearnych rovnic funkcia echo on % Demo2 - pripravil Š.Kozak,KASR 1999 %Klasické riešenie nelinearnych rovnic x=fsolve('x^2+2*x+1', 0) pause x=fsolve(@(x^2+2*x+1), 0) % symbolicke riesenie pause solve('a*x^3+b*x^2+c*x+d') solve('a*x^3+b*x^2+c*x+d') solve('x^3+3*x^2+3*x+1')
fsolve Pre dve NLS : 2x1-x2–e-x1 =0, -x1+2x2-e-x2=0 Poc.podmienky x0=[-5 -5]. Najlepsie je vytvorit si zvlast funkciu function F = mojafun(x) F = [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]; x0 = [-5; -5]; %Startovacie podmienky options=optimset('Display','iter'); % Zobrazovanie výsledkov (x-je riešenie, fval hodnota ucel.funkcie) Optimization terminated successfully: [x,fval] = fsolve('mojafun',x0,options)%ver.5.3
Vypis riesenia : (x-je riešenie, fval hodnota ucel.funkcie) Optimization terminated successfully: [x,fval] = fsolve('mojafun',x0,options) Directional Iteration Func-count Residual Step-size derivative 1 2 39.6268 1 -79.3 2 9 2.14377 1.44 11.5 3 15 0.00107228 1.06 -0.0155 4 21 6.6055e-012 1 -1.85e-008 Optimization terminated successfully: Search direction less than tolX x = 0.5671 0.5671 fval = 1.0e-008 * -0.2820 0.6111
V starších verziach použijeme priamo zápis riešenia F = '[2*x(1) - x(2) - exp(-x(1));-x(1)+2*x(2)-exp(-x(2))]' [x,fval]=fsolve(F,[-0.5 -0.5]) Riešenie je možné získať priamo : [x,fval]=fsolve('[2*x(1) - x(2) - exp(-x(1));-x(1)+2*x(2)-exp(-x(2))]',[-0.5 -0.5]) x = 0.5671 0.5671 fval = 1.0e-009 * -0.2460 -0.2460
X=FSOLVE(FUN,X0) • Priklady .6.1 • FUN moze byt zavedena cez @: • x = fsolve(@myfun,[2 3 4],optimset('Display','iter')) • kde MYFUN je MATLABovska funkcia: • function F = myfun(x) • F = sin(x); • FUN moze byt zavedena cez inline prikaz: • fun = inline('sin(3*x)'); • x = fsolve(fun,[1 4],optimset('Display','off'))
Finl=inline('[2*x(1) - x(2) - exp(-x(1))]; -x(1) + 2*x(2) - exp(-x(2))]') Finl = Inline function: Finl(x) = [2*x(1) - x(2) - exp(-x(1))]; -x(1) + 2*x(2) - exp(-x(2))] x0=[-5 -5] %Startovacie podmienky options=optimset('Display','iter'); % Zobrazovanie výsledkov [x,fval] = fsolve(Finl,x0,options) % volanie opt.funkcie Finl=inline('2*x(1) - x(2) - exp(-x(1), -x(1) + 2*x(2) - exp(-x(2)') Finl = Inline function: Finl(x) = [2*x(1) - x(2) - exp(-x(1))]; -x(1) + 2*x(2) - exp(-x(2))]
Finl=inline('2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))') • Finl = • Inline function: • Finl(x) = [2*x(1) - x(2) - exp(-x(1))]; -x(1) + 2*x(2) - exp(-x(2))]
fzero Find zero of a function of one variable Syntax x = fzero(fun,x0) x = fzero(fun,x0,options) x = fzero(fun,x0,options,P1,P2,...) [x,fval] = fzero(...) [x,fval,exitflag] = fzero(...) [x,fval,exitflag,output] = fzero(...)
X = FZERO(FUN,X0)Examples FUN can be specified using @: X = fzero(@sin,3) returns pi. X = fzero(@sin, 3, optimset('disp','iter')) returns pi, uses the default tolerance and displays iteration information. FUN can also be an inline object: X = fzero(inline('sin(3*x)'),2); Limitations X = fzero(inline('abs(x)+1'), 1) returns NaN since this function does not change sign anywhere on the real axis (and does not have a zero as well).
X = fzero(@tan,2) returns X near 1.5708 because the discontinuity of this function near the point X gives the appearance (numerically) that the function changes sign at X.
% Find a zero of humps(x) near 1 with FZERO z = fzero(@humps,1,optimset('Display','off')) fplot(@humps,[0,2]) hold on; plot(z,0,'r*'); hold off
Q1(t) Demonštračné príklady integračné metódy% Model zásobníka vodyecho offglobal ro g A1 A2 Hh Qhro=1000 % [kg/m3]g=9.81 % [m/sek2]A1=pi/4; % [m2]A2=pi/400; % [m2]Hh=1; % [m]Qh=34.77 % [kg/sek]% Integracia systemu nelinearnych rovnic metódou ODE45% Vstupne parametre (nevyhnutne)% Pociatocny cas integracie t0t0=0;% Koncovy cas integracie tftf=300;H0=0.5 % Pociatocna podmienka[t,H]=ode45('zasps2',[t0 tf],H0); % volanie procedury integraciefigure(1)plot(t,H);gridxlabel('Cas [sek]'),ylabel('H(m)') H Q2(t)
title('Integracia systemu nelinearnych rovnic') %Vypocet vystupneho prietoku figure(2) k3=ro*sqrt(2*g)*A2; Q2=k3*sqrt(H); plot(t,Q2);grid xlabel('Cas [sek]'),ylabel('Q2 [kg/sek]') function Hder=zasps2(t,H)function Q=q(t) global ro g A1 A2 Hh Qh global Qh Q1=q1(t); Q=Qh; k1=-A2*sqrt(2*g)/A1; k2=1/ro/A1; Hder=k1*sqrt(H)+k2*Q1; function Hder=hder(t,H) global ro g A1 A2 Hh Qh Q=q(t) k1=-A2*sqrt(2*g)/A1 k2=1/ro/A1 Hder=k1*sqrt(H)+k2*Q function Q1=q1(t) global Qh k=1; w=0.05; %frekvencia sin.signalu DQ=k*sin(w*t); Q1=Qh+DQ;
Riesenie a zapis diferencialnych rovnic % Uvazujme system dvoch difrenciálnych rovníc % y1' = (1 - alpha*y2)*y1 % y2' = (-1 + beta*y1)*y2 % % Pociatocny cas integracie t0=0, koncový čas tf=15 % Default hodnota presnosti integracie je 1e-3 (0.1 percent). t0 = 0; tfinal = 15; y0 = [20 20]'; % Definicia poc.podmienok % Volanie procedury : % [t,y] = ode23(@prstrana,[t0 tfinal],y0); % funkcia prstrana je prava str.difer.rovnic, zapisuje sa % samostatne % [t,y]=ode45(…..) % Alebo ina metoda integracie ODE45, ODE113, ODE15S, % ODE23S, ODE23T, ODE23TB
pause [t,y] = ode23(@prstrana,[t0 tfinal],y0); % takto volame % proc.integ. %vykreslenie trajektorii v casovej oblasti plot(t,y), title('Demo-priklad casova oblast') pause %vykreslenie trajektorii vo fazovej rovine plot(y(:,1),y(:,2)), title('Demo- priklad fazova rovina'),pause function yp = prstrana(t,y) %vektor pravych stran. dif.rovnic %y1' = (1 - alpha*y2)*y1, alpha=0.01, beta=0.02 %y2' = (-1 + beta*y1)*y2 % yp=[y(1),y(2)]=… % zapisana ako yp‘=Ay, A=[1 - .01*y(2) 0;0 -1 + .02*y(1)] yp = diag([1 - .01*y(2), -1 + .02*y(1)])*y; % alebo iny zapis yp=A*y, ak dopredu definujeme A
Iné priklady zápisu riesenia diferencialnych rovnic Vhodny pre starsie aj nove verzie ODE % [T,Y] = ode45('prstr1',[t0 tfinal],y0); %Diferencialna rovnica je druheho radu %napr.Van der Pol rovnica y'' + (y^2 - b)y' + y = 0 %v takomto pripade musime ju znizit na system rovnic prveho radu % y1' = y1(1 - y2^2) - y2 % y2' = y1 pause % Strike any key to continue. clc % To simulate the differential equation defined in VDPOL over the % interval 0 < t < 20,použitímODE23:
t0 = 0; tfinal = 15; y0 = [0 0.25]; % Define initial conditions. % [t,y] = ode23('prstr1',t0,tfinal,y0); [t,y] = ode23('prstr1',t0,tfinal,y0); % to je % najjednoduchsie volanie procedury integracie plot(t,y), title('Zobrazenie traj. v casovej oblasti'), pause plot(y(:,1),y(:,2)) title('Zobrazenie trajektorii vo fazovej rovine‘ pause clc %Ak chceme pouzit inu proceduru integracie napr. ode 45 % [T,Y] = ode45('vdpol',t0,tfinal,y0); _ volanie procedury
function yp = prstr1(t,y); % prava strana je zapisana ako vektor jednotlivych dif.rovnic yp = [(y(1) .* (1 - y(2).^2) - y(2)); y(1)]; Example 1. Trojrozmerný dynamický systém Zápis pravých stran: function dy = rigid(t,y) dy = zeros(3,1); % a column vector dy(1) = y(2) * y(3); dy(2) = -y(1) * y(3); dy(3) = -0.51 * y(1) * y(2); %Nastavenie presnosti riešenia options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); [t,y] = ode45('rigid',[0 12],[0 1 1],options); Plotting the columns of the returned array Y versus T shows the solution: plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
Ako je to v novej verzii Matlabu ? Example 2 verziaMatlab 6.0 [t,y]=ode45(@vdp1,[0 20],[2 0]); plot(t,y(:,1)); solves the system y' = vdp1(t,y), using the default relative error tolerance 1e-3 and the default absolute tolerance of 1e-6 for each component, and plots the first component of the solution. ODE solvers: ODE23, ODE113, ODE15S, ODE23S, ODE23T, ODE23TB options handling: ODESET, ODEGET output functions: ODEPLOT, ODEPHAS2, ODEPHAS3, ODEPRINT ODE examples: RIGIDODE, BALLODE, ORBITODE