Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.1.0 - Português


odedc

solucionador de EDOs contínuas/discretas

Seqüência de Chamamento

yt = odedc(y0, nd, stdel, t0, t, f)

Parâmetros

y0

vetor coluna de reais (condições iniciais), y0=[y0c;y0d] onde y0d tem nd componentes.

nd

inteiro, dimensão de y0d

stdel

vetor de reais com uma ou duas entradas, stdel=[h,delta] (com delta=0 como valor padrão).

t0

escalar real (tempo inicial).

t

vetor (linha de reais), instantes onde yt é calculado .

f

função externa i.e. função, string ou lista com seqüência de chamamento: yp=f(t,yc,yd,flag).

Descrição

y = odedc([y0c;y0d], nd, [h,delta], t0, t, f) computa a solução de um sistema misto contínuo/discreto. O estado de sistema discreto ydk é embutido em uma função de tempo seccional constante yd(t) como segue: yd(t) = ydk para t em [tk = h*(delta+k) , tk+1 = h*(delta+k+1) ).

As equações simuladas são agora para t em [ tk , tk+1 ):

dyc/dt = f(t, yc(t), yd(t), 0)
yc(t0) = y0c

e nos instantes tdk a variável discreta yd é atualizada por

yd(tk+) = f(yc(tk-), yd(tk-), 1).

Note que, utilizando a definição de yd(t), a última equação fornece

ydk = f(tk, yc(tk-), yd(tk-1), 1)

(yc é de tempo contínuo : yc(tk-) = yc(tk)).

Os parâmetros de chamada de f são fixados: ycd = f(t,yc,yd,flag); esta função deve retornar a derivada do vetor yc se flag=0 ou a atualização de yd se flag=1.

ycd = dot(yc) deve ser um vetor de mesma dimensão que yc se flag=0 e ycd = update(yd) deve ser um vetor com a mesma dimensão que yd se flag=1.

t é um vetor de constantes onde a solução y é computada.

y é o vetor y = [y(t(1)), y(t(2)),...].

Esta função pode ser chamada com os mesmo parâmetro opcionais da função ode (desde que nd e stdel sejam dados na seqüência de chamamento como segundo e terceiro parâmetros). Em particular, flags de integração e tolerâncias podem ser ajustadas. Parâmetros opcionais podem ser ajustados pela função odeoptions.

Rotinas externas podem ser ligadas dinamicamente (ver link).

Exemplos

//sistema linear com entrada alternante
deff('xdu = phis(t,x,u,flag)','if flag==0 then xdu = A*x + B*u; else xdu = 1-u; end');
x0 = [1;1]; A = [-1,2;-2,-1]; B = [1;2]; u = 0; nu = 1; stdel = [1,0]; u0 = 0; t = 0:0.05:10;
xu = odedc([x0;u0],nu,stdel,0,t,phis);x=xu(1:2,:);u=xu(3,:);
nx = 2;
plot2d(t, x', [1:nx],'161')
plot2d2('onn',t',u',[nx+1:nx+nu],'000');

//função externa FORTRAN (ver fydot2.f):
norm(xu-odedc([x0;u0],nu,stdel,0,t,'phis'),1)

//feedback (resposta) amostrado
//
//        |     xcdot=fc(t,xc,u)
//  (sistema)   |
//        |     y=hc(t,xc)
//
//
//        |     xd+=fd(xd,y)
//  (feedback) |
//        |     u=hd(t,xd)
//
deff('xcd=f(t,xc,xd,iflag)',...
  ['if iflag==0 then '
   '  xcd=fc(t,xc,e(t)-hd(t,xd));'
   'else '
   '  xcd=fd(xd,hc(t,xc));'
   'end']);
A = [-10,2,3;4,-10,6;7,8,-10];
B = [1;1;1];C=[1,1,1];
Ad = [1/2,1;0,1/20];
Bd = [1;1];Cd=[1,1];
deff('st = e(t)','st = sin(3*t)')
deff('xdot=fc(t,x,u)', 'xdot=A*x+B*u')
deff('y = hc(t,x)','y = C*x')
deff('xp = fd(x,y)','xp = Ad*x + Bd*y')
deff('u = hd(t,x)','u = Cd*x')
h = 0.1; t0 = 0; t = 0:0.1:2;
x0c = [0;0;0]; x0d = [0;0]; nd = 2;
xcd = odedc([x0c;x0d],nd,h,t0,t,f);
norm(xcd-odedc([x0c;x0d],nd,h,t0,t,'fcd1')) // cálculo rápido (ver fydot2.f)
plot2d([t',t',t'],xcd(1:3,:)');
scf(2);
plot2d2("gnn",[t',t'],xcd(4:5,:)');
scf(0);

Ver Também

  • ode — Solucionador de equações diferenciais ordinárias
  • link — dynamic linker
  • odeoptions — ajusta opções para solucionadores de EDO
  • csim — simulation (time response) of linear system
  • external — objeto Scilab, função ou rotina externa
Report an issue
<< ode_root Equações Diferenciais odeoptions >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon May 22 12:42:12 CEST 2023