Apostila de Scilab - Atualizada
-
Upload
danusio-gadelha-guimaraes-filho -
Category
Documents
-
view
276 -
download
0
Transcript of Apostila de Scilab - Atualizada
-
8/6/2019 Apostila de Scilab - Atualizada
1/44
S
Danu
Univers
ILAB 5.X
io Gadelha Fil
dade Federal do C
o
ar
-
8/6/2019 Apostila de Scilab - Atualizada
2/44
SUMRIO
CAPTULO
1:INTERFACE
GRFICA DO
SCILAB
CAPTULO 2:OPERAESPRIMRIAS
CAPTULO 3:COMANDOS DEFLUXOS
CAPTULO 4:VETORES&MATRIZES
CAPTULO 5:POLINMIOS
CAPTULO 6:LISTAS
CAPTULO 7:FUNES
CAPTULO 8:GRFICOS
APNDICE:EQUAESDIFERENCIAIS
-
8/6/2019 Apostila de Scilab - Atualizada
3/44
CAPTULO I
INTERFACE GRFICA DO SCILAB
Scilab um ambiente voltado para o desenvolvimento de software pararesoluo de problemas numricos. O Scilab foi criado em 1990 por um grupo de
pesquisadores do INRIA Institut de Recherche en Informatique et en Automatique edo ENPC- cole Nationale des Ponts et Chausses.
Desde 1994, quando passou a ser disponvel na Internet, Scilab gratuito, freesoftware, e distribudo com o cdigo fonte, open source software. Alm da distribuiocom o cdigo fonte, existem, tambm, distribuies pr-compiladas do Scilab paravrios sistemas operacionais.
As principais caractersticas desse ambiente de programao numrica
extremamente flexvel so:
Ambiente poderoso para gerao de grficos bi etridimensionais, inclusive com animaes;
Manipulaes com matrizes so facilitadas por diversasfunes implementadas nos toolboxes;
Permite trabalhar com polinmios, funes detransferncia, sistemas lineares e grafos;
Define funes facilmente; Permite acesso a rotinas escritas em FORTRAN e C;
Pode ser acessado por programas de computaosimblica, como o MuPad; Permite o desenvolvimento de toolboxes.
Alm dos toolboxes desenvolvidos pelo grupo Scilab, esto disponveis outrascomplementares, igualmente gratuitas, como o ANN ( Artificial Neural Network), oFISLAB (Fuzzy Logic Inference) e o FRACLAB (Fractal, Multifractal and Wavelet
Analisys).Algumas funes do Scilab esto alocadas em toolboxes bem definidas,
dadas as suas especificidades. Temos como exemplo:
Funes de lgebra Linear: bibliotecas LINPACK,EISPACK, LAPACK e BLAS; Funes para soluo de Equaes Diferenciais:
bibliotecas ODEPACK e SLATEC; Funes de Otimizao: biblioteca MINPACK.
Descritas algumas caractersticas internas do Scilab, hora de conhecer ajanela de trabalho (Workspace) do Scilab. Na verso 5.3.0 beta 2, ela se apresenta daseguinte forma:
-
8/6/2019 Apostila de Scilab - Atualizada
4/44
Podemos observar o promptinicial, representado pelo smbolo -->, que faz amarcao da linha de comando e o cursor, ao lado do prompt. Nesse espao, podem serrealizados clculos e compilados programas sem serem salvas alteraes. atravs dele
tambm que pode ser acessado o help do programa, atravs do comando help digitadonoprompt. Ser aberta uma janela depois de o comando ser executado (apertando se atecla ENTER), contento uma lista de todas as funes presentes.
Ainda na tela inicial esto presentes os menus drop down com sete opes:File, Edit, Preferences, Control, Editor, Applications e ?. Cada menu possui osseguintes sub menus:
File: New Scilab, Exec, Open, Load, Save, Change Directory, Get CurrentDirectory, Print Setup, Print e Exit.
Edit: Select All, Copy, Paste, Empty Clipboard e History.Preferences: Language, Colors, Toolbar, Files Association, Choose Fonts,
Clear History, Clear Command Window e Console.
Control: Resume, Abort e Interrupt.EditorApplications: Scicos, Edit Graph, m2sci e Browser Variables.?: Scilab Help, Configure, Scilab Demos, Web Links e About.
Conhecidos os menus da tela inicial, vamos analisar algumas peculiaridades dalinguagem. O primeiro tpico a ser abordado sobre variveis especiais presentes noambiente. Esses so valores pr definidos que podem ser usados diretamente na
programao. A maioria dessas variveis prefixada com o smbolo de porcentagem(%). Elas podem ser acessadas atravs da digitao do comando whos no prompt decomando; importante lembrar que, se o usurio definir alguma varivel antes de
digitarwhos, ela tambm aparecer no workspace. Na tabela a seguir, temos a listagemde algumas delas, tal como aparecem na janela.
-
8/6/2019 Apostila de Scilab - Atualizada
5/44
VARIVEL TIPO%F Booleana%T Booleana%z Polinomial%s Polinomial
%nan Constante%inf ConstanteCOMPILER String
%gtk Booleana%gui Booleana
%pvm Booleana%tk Booleana
$ Polinomial%t Booleana%f Booleana
%eps Constante
%io Constante%i Constante%e Constante%pi Constante
Tabela 1 - Variveis Especiais
Temos mais duas importantes variveis: as variveis de localizao dediretrios SCI e PWD. Para entend las, digite as no prompt de comandos.
SCI: diretrio onde o Scilab foi instalado.PWD: diretrio onde o Scilab foi lanado, isto , de onde seu script est
rodando.
Existem ainda funes para manipular arquivos e diretrios. A funo pwdmostra qual o diretrio est sendo usado e chdir muda o diretrio de trabalho. importante lembrar que, depois de usada chdir, o valor de pwd muda, mas PWD
permanece inalterado.Todas as variveis criadas durante os trabalhos no ambiente podem ser
armazenadas em um arquivo. O comando save usado para tal, com a seguinte sintaxe:
save(nome_do_arquivo.dat,variveis)
Para recuperar os valores das variveis, usa se o comando load e o comandoclear usado para limpar variveis no protegidas:
load(nome_do_arquivo,variveis)
O comando help, quando digitado sem caracterizao, abre uma listagem comtodas as funes presentes no programa. Se caracterizado, abre a mesma janela, pormcom a funo j aparecendo diretamente.
Alm de armazenar variveis, possvel criar uma memria de clculo,salvando os comandos digitados em um arquivo, atravs do comando diary:
diary(nome_do_arquivo);diary(0) // Fecha o comando
-
8/6/2019 Apostila de Scilab - Atualizada
6/44
CAPTULO II
OPERAES PRIMRIAS
Scilab um ambiente de programao numrica. Desse modo, existem duasformas de interao com o software: digitao diretamente no prompt, em que se temuso de uma poderosssima mquina de clculo, ou como programao numrica
propriamente dita, em que se delineiam linhas de cdigo. Neste captulo ser abordada aprimeira forma.
A primeira instruo a respeito do prompt quanto ao uso do ponto e vrgula: ele faz com que o compilador interprete o fim da execuo da linha de comandoe esteja pronto para receber outra linha. Neste caso, o resultado da operao ficamascarado para o usurio. Se no for escrito o ponto e vrgula, a quebra de linha vai
denotar fim da execuo, mas o resultado ser exibido para o usurio. Ambas as formastm sua aplicao. Quando se est trabalhando com vetores de muitos elementos, no conveniente esquecer o ponto e vrgula, pois isto pode acarretar perda de tempo etravamento da mquina (o Scilab tem uma ferramento til para evitar esse infortnio: acada algumas linhas de exibio, aparece uma mensagem perguntando se se desejacontinuar a exibio); j quando se quer testar uma operao, debugar um programa ouse as variveis usadas forem de baixa ordem, o ponto e vrgula por vezesnecessrio (no mnimo, facultativo).
Outra observao importante que o Scilab case sensitive. Quando o programador definir uma varivel com letras maisculas e minsculas, deve selembrar de manter a caixa das letras.
OPERAES MATEMTICAS De um modo geral, as variveismatemticas usadas no Scilab so vetores complexos. O nmero imaginrio denotado
por %i e, seguindo a notao padro de um nmero complexo z = a+bi, temos asseguintes operaes possveis:
SOMA +SUBTRAO MULTIPLICAO *DIVISO DIREITA /DIVISO ESQUERDA \POTENCIAO ^
ORGANIZAO DAS LINHAS DE COMANDO A forma usual de seescreverem os comando pr uma instruo por linha. Tambm permitido dispor asinstrues numa mesma linha, desde que separadas pelo ponto e vrgula, e distribuiro comando em vrias linhas, usando as reticncias no final de cada linha (com exceoda ltima) e no comeo da linha seguinte (com exceo da primeira).
AMBIENTE Um ambiente como um espao de trabalho no prompt decomando do Scilab. Pode se trabalhar com mais de um espao de trabalho e indicadaesta prtica caso sejam necessrias operaes paralelas durante a execuo de um
programa principal. Para adicionar se um ambiente, basta digitarpause no workspaceou usar o atalho ctrl c no teclado; uma nova seta, acompanhada do cardinal
-
8/6/2019 Apostila de Scilab - Atualizada
7/44
correspondente hierarquia do ambiente, ir surgir. O retorno ao ambiente principal dado pelo comando aborte ao ambiente anterior, pelos comandos return ou resume.
As variveis definidas num ambiente inferior no so salvas quando se sobe para um ambiente anterior. Caso se queira utilizar algum contedo de ambientesinferiores, deve se usar a linha a=resume(a), onde a a varivel que se deseja salvar.
Se tratando de um software dedicado computao numrica em tecnologia, oScilab traz carregadas algumas funes utilizadas nessa rea, tais como FFT, fatoraoLU, determinante de matrizes, funes de Bessel, dentre vrias outras.
A seguir, temos uma tabela contendo vrias funes bsicas existentes noScilab:
abs abs(x) mdulo (argumento) de x
acos acos(x) arco cosseno de x, em radianos
acosh acosh(x) arco cosseno hiperblico de x, em radianos
asin asin(x) arco seno de x, em radianos
asinh asinh(x) arco seno hiperblico de x, em radianos
atan atan(x) arco tangente de x, em radianosatanh atanh(x) arco tangente hiperblico de x, em radianos
binomial binomial (p,n) binomial normalizado de p classe n*
ceil ceil(x) arredondamento para o maior inteiro posterior
cos cos(x) cosseno de x, com x em radianos
cosh cosh(x) cosseno hiperblico de x, com x em radianos
cotg cotg(x) cotangente de x, com x em radianos
coth coth(x) cotangente hiperblica de x, com x em radianos
cumprod cumprod(v) produto cumulativo do vetor v
cumsum cumsum(v) soma cumulativa do vetor v
diff diff(v) diferencial discreta do vetor v
eval eval(s) valor numrico de uma expresso de strings**exp exp(x) exponencial euleriana de x
factor factor(N) fatores primos de N
find find(k s V) encontra os ndices dos elementos de V que tornam a
comparao verdadeira (s ==,,~=,...)
fix fix(x) arredondamento para o inteiro mais prximo de zero
floor floor(x) arredondamento para o maior inteiro anterior
gsort gsort(V,r/c,i/d) ordenao dos elementos de V
imag imag(z) coeficiente da parte imagnria de z
int int(N) parte inteira de N
linspace linspace(A,B,N) vetor com N pontos entre A e B inclusos
log log(x) logartmo neperiano de xlog10 log10(x) logartmo decimal de x
log2 log2(x) logartmo na base 2 de x
logspace logspace (A,B,N) vetor de N pontos com espao logartmico entre A e B
inclusos
max max(v) mximo valor contido no vetor v
min min(v) mnimo valor contido no vetor v
modulo modulo(m,n) resto da diviso de m por n : i = n - m .* int (n ./ m)
ndims ndims(M) nmero de dimenses de M
pmodulo pmodulo(m,n) resto da diviso de m por n : i = n - m .* floor (n ./ m)
nextpow2 nextpow2(x) potncia de 2 maior e mais prxima de x
norm norm(A) norma de Aperms perms(v) todas as permutaes do vetor v
-
8/6/2019 Apostila de Scilab - Atualizada
8/44
primes primes(N) todos os nmeros primos at N
prod prod(v) produto de todos os elementos de v
rand rand(m,n) matriz m x n de nmeros aleatrios entre 0 e 1
real real(z) parte real do nmero complexo z
round round(N) nmero inteiro mais prximo de N
setdiff setdiff(a,b) retorna os elementos de a que no esto em bsign sign(v) retorna os sinais dos elementos de v: 1, se positivo, e -1.
sin sin(x) seno de x, x em radianos
sinh sinh(x) seno hiperblico de x, x em radianos
sqrt sqrt(x) raiz quadrada de x
ssprint ssprint(expr) modifica a forma de exibio de um sistema linear
sum sum(v) soma de todos os elementos de v
tan tan(x) tangente de x, x em radianos
tanh tanh(x) tangente hiperblica de x, x em radianos
tril tril(M) triangularizao inferior de M
triu triu(M) triangularizao superior de M
vectorfind vectorfind(a,b,s) encontra o vetor a na matriz b, s=rou s=c
* Os termos esto localizados entre 0 e 1** Um exemplo de uso:
-->a=1;-->b=2;-->z='2*a*b-b^2';-->eval(z)ans =
0.
O comando solve soluciona um sistema linear simblico, atravs da definiodos coeficientes das variveis e dos resultados de cada equao, em formato de string.
-->A=['c1','c2';'c3','c4'];-->b=['b1';'b2'];-->solve(A,b)ans =
!c1\(b1-c2*(c4\b2)) !!c4\b2 !
O comando evalpode ser usado para avaliar o resultado para valores de todasas strings.
Dois tipos de funo so imprescindveis para a programao: os comandos deentrada e sada de dados. No Scilab, quando o programador quer que o usurio atribuaum valor para uma varivel, aquele faz o uso da funo input. A varivel atribuda daseguinte forma:
x=input("Expresso");
Uma forma mais elegante de pedir ao usurio que entre com dados necessrios execuo do programa usando caixas de dilogo, atravs da funo x_dialog, naseguinte sintaxe:
-
8/6/2019 Apostila de Scilab - Atualizada
9/44
x=evstr(x_dialog('Expresso','Mscara'));
A funo evstr usada para converter os dados digitados pelo usurio (que soda formastrings) para um formato numrico. A mscara um indicativo da forma dos
dados que se querem obter. Por exemplo, se se deseja uma matriz tringular superior deterceira ordem, pode se proceder da seguinte forma:
M=evstr(x_dialog('Digite a matriz U',['a b c','0 d e','0 0 f']));
H outras caixas de dilogo mais especficas presentes no ambiente. A sintaxede cada uma pode ser observada a seguir:
>> x_choices
l1=list('escolha 1',1,['boto a1','boto a2','boto a3']);
l2=list('escolha 2',2,['boto b1','boto b2','boto b3', 'boto b4']);l3=list('escolha 3',3,['boto c1','boto c2']);rep=x_choices('Menu de Escolhas',list(l1,l2,l3));
>> x_choose
n=x_choose(['item1';'item2';'item3'],['Escolha sua opo';'para a enquete']);
>> x_matrix
m=evstr(x_matrix('entre com uma matriz 3x3',zeros(3,3)));
>> messagebox
x=0.57;messagebox('O valor de x : '+string(x));
>> uigetfile
arquivo=xgetfile([title='string'])
O comando de sada tradicional disp(), que retorna o contedo entreparnteses. Uma forma mais elegante feita com o uso de mtlb_fprintfouprintf, quecombina texto de exibio e variveis. A seguir, exemplos de aplicao das funes:
-->printf('Meu nome : %s','Danusio')Meu nome : Danusio
-->printf('O nmero : %f',435.7666)O nmero : 435.766600
-->disp('Eu sou eu mesmo')
Eu sou eu mesmo
-
8/6/2019 Apostila de Scilab - Atualizada
10/44
-->disp(14)
14.
-->disp(' ')
-->
Pode se obter dados externos em forma de matriz atravs da funofscanfMat(nome_do_arquivo), bem como se pode escrever uma varivel como umamatriz em um arquivo, com a funofprintfMat(arquivo,Matriz,formato).
-
8/6/2019 Apostila de Scilab - Atualizada
11/44
CAPTULO III
COMANDOS DE FLUXO
Os laos so, de longe, a parte mais importante para se programar com oScilab. Os laos reconhecidos pelo ambiente so:for, if, e while.
O laoforsegue a seguinte lgica: para um determinado ndice variando deum valor inicial at um valor final com um determinado incremento, execute oscomando sob o lao. Como exemplo, considere o seguinte exemplo, que carrega parauma matriz Mos nmeros pares de 1 a 100:
clcclear
close
N=100;M=[];
for i=1:2:(N-1)M=[M (i+1)];
end
disp(M)
Note queN o nmero final do intervalo a ser varrido e que a varivel i , naverdade, entendido como um vetor.
O lao if funciona com a seguinte lgica: caso a condio seja verdadeira,execute os comandos. Considere o exemplo, para separar os nmeros pares dos mparesde 1 a 100:
clcclearclose
N=100;P=[];I=[];for i=1:N
if modulo(i,2)==0P=[P i];endif modulo(i,2)==1
I=[I i];end
end
disp(P)
-
8/6/2019 Apostila de Scilab - Atualizada
12/44
disp(I)
Nesse caso, a condio testada o valor retornado pela funo modulo (q.v.).A esse lao, podem ser agregados dois outros comandos: elseife if. Estes dois tornam a
programao mais eficiente, elegante e imune a erros. O programa anterior, se
utilizada a funo else, ficaria:
clcclearclose
N=100;P=[];I=[];for i=1:N
if modulo(i,2)==0
P=[P i];else
I=[I i];end
end
disp(P)disp(I)
O uso de elseif pode ser exemplificado pelo seguinte problema: deseja setambm separar os mltiplos de 7 dentre os pares e os mpares:
clcclearclose
N=100;S=[];
P=[];I=[];for i=1:N
if modulo(i,7)==0S=[S i];elseif modulo(i,2)==0
P=[P i];else
I=[I i];end
end
disp(S)disp(P)
disp(I)
-
8/6/2019 Apostila de Scilab - Atualizada
13/44
importante observar que a mudana da ordem de checagem das condiesinfluencia o resultado. Por exemplo, em vez de testar primeiro se o nmero mltiplode 7, teste se ele mpar. O resultado , na matriz S, os mltiplos pares de 7.
Os operadores lgicos mais comuns ao se usar a estrutura ifso e (&) e ou(| - barra vertical). Estes operadores so postos entre duas condies.
O comando while funciona como um misto de fore if, na medida em que soexecutados comandos at que uma condio no seja mais satisfeita. Funciona como seos laos citados estivessem alinhados, porm sob a condio de haver um nico if
booleano. Um processo iterativo um bom exemplo do uso deste recurso:
clcclearclose
s=5;N=0;
while s>1e-5s=s/10;N=N+1;
end
O contadorN indica o nmero de operaes realizadas at que o valors sejamenor que 1e-5.
A seguir, temos alguns cdigos interessantes em que h os laos apresentados:
Cdigo 1
clcclearclose
disp( Programa para carregar valores de uma funo de duas variveispara domnios de tamanhos diferentes)
disp( )disp( Danusio Gadelha Filho)
disp( )x=1:1:5;y=1:2:8;
disp( Tamanho de x ()disp( )disp(length(x))disp( )disp( Tamanho de y ()disp( )
disp(length(y))disp( )
-
8/6/2019 Apostila de Scilab - Atualizada
14/44
disp( Funo de (x,y) ()disp( )disp( f= (x+y)/(x+y))disp( )
for i=1:length(x)for j=1:length(y)f(i,j)=(x(i)^2+y(j)^3)/(x(i)+y(j));end
end
disp( Valores de f ()disp( )disp(f)
surf(f) //veja captulo sobre grficos
Cdigo 2
clcclearclose
disp(' Programa para simular a transcrio do RNAmensageiro')
disp(' ')disp(' Danusio Gadelha Filho')disp(' ')
DNA=['A' 'G' 'C' 'A' 'G' 'T' 'H' 'C' 'C'];
disp(' DNA a ser transportado -->')disp(' ')disp(DNA)disp(' ')
c=length(DNA);
for i=1:sum(c)if DNA(i)=='A'RNA(i)='T';elseif DNA(i)=='T'RNA(i)='A';elseif DNA(i)=='G'RNA(i)='C';elseif DNA(i)=='C'
RNA(i)='G';else
-
8/6/2019 Apostila de Scilab - Atualizada
15/44
continueend
end
disp(' Codificao do RNA mensageiro -->')
disp(' ')disp(RNA')disp(' ')
Cdigo 3
clcclearclose
disp(' Programa para encontrar a raiz de uma funo em um
intervalo')disp(' ')disp(' Danusio Gadelha Filho')disp(' ')
prec=.0001;X=0:prec:3;N=length(X);cont=1;
x=X(1);err=x^3-2*x^2-5;
disp(' Intervalo -->')disp(' ')disp([string(X(1)),' --> ',string(X($))])disp(' ')disp(' Preciso -->')disp(' ')disp(prec)disp(' ')
disp(' Funo -->')disp(' ')disp(' x-2x-5')disp(' ')
while abs(x^3-2*x^2-5) >= 10*prec & cont
-
8/6/2019 Apostila de Scilab - Atualizada
16/44
disp(' Raiz(es) no intervalo -->')disp(' ')disp(raiz)
-
8/6/2019 Apostila de Scilab - Atualizada
17/44
CAPTULO IV
VETORES E MATRIZES
Vetores so um agrupamento de elementos em uma nica fila (linha oucoluna). No Scilab, eles so sempre indicados entre colchetes; o ponto e vrguladenota mudana de linha, enquanto elementos de ma mesma linha so separados porvrgulas ou espaos.
A transformao de um vetor linha em um vetor coluna, ou vice versa,chamada de transposio, feita atravs do acrscimo de um apstrofo ao lado direitodo colchete de fechamento ou da varivel que identifica o vetor.
Dois vetores esto sujeitos s seguintes operaes entre si:
SOMA: v1+v2, desde que sejam da mesma dimenso.SUBTRAO: v1-v2, desde que sejam da mesma dimenso.MULTIPLICAO ESTRUTURAL: v1.*v2, desde que sejam da mesma
dimenso.DIVISO DIREITA ESTRUTURAL: v1./v2, desde que sejam da mesma
dimenso.DIVISO ESQUERDA ESTRUTURAL: v1.\v2, desde que sejam da mesma
dimenso.MULTIPLICAO: v1*v2, desde que o nmero de colunas de v1 seja igual
ao nmero de linhas de v2.DIVISO DIREITA: v1/v2, desde que sejam da mesma dimenso.
DIVISO ESQUERDA: v1\v2, desde que sejam da mesma dimenso.
Matrizes so conjuntos de elementos dispostos em mltiplas filas. Todas asoperaes definidas para vetores podem ser usadas com matrizes, desde que acompatibilidade entre as dimenses seja observada.
Existem algumas funes teis no tratamento com matrizes, tanto comorecurso de programao quanto para debugar a rotina.
As funes size e length retornam, respectivamente, a ordem e a maiordimenso de uma matriz.
A funo rankretorna o rank da matriz (rank o nmero de filas linearmenteindependentes). A funo norm retorna a norma de uma matriz.
Com o comando trace podemos obter a soma dos elementos da diagonalprincipal da matriz (ou trao da matriz). A diagonal principal pode ser extrada com ocomando diag(M,n), onde n a localizao da matriz principal (de baixo para cima,variando de -L aL, ondeL a maior dimenso de Msubtrada de um).
Uma aplicao interessante do uso das matrizes na resoluo de sistemaslineares. Dado um sistema linear no formato matricial Ax=b, as variveis contidas emx
podem ser obtidas simplesmente porA\b.A priori, todas as variveis para o Scilab so matrizes; deste modo, todas as
operaes acima descritas so vlidas para qualquer varivel definida no programa.Definida uma matriz M, o elemento da linha i e colunaj acessado atravs da
digitao deM(i,j). O caractere especial $ faz com q o ltimo elemento seja acessado:M($). Quando se quer varrer toda uma sequncia de filas, usam se os dois pontos
-
8/6/2019 Apostila de Scilab - Atualizada
18/44
entre o nmero das filas. Por exemplo, se a ordem de M 1 x 15, as colunas de 7 a 11poderiam ser acessadas pelo comando M(7:11). Se se deseja ler toda uma sequncia defilas, pem se apenas os dois pontos, sem nmero algum: M(:,:). Caso seja digitadoapenas M(:), o resultado ser um vetor - coluna contendo todos os elementos de M.
Outra forma de selecionar elementos substituir os elementos desejados por
%T (verdadeiro) e os no selecionados por %F (falso). Por exemplo, se M=[1 2 3 4 5],o comando M([%T %F %F %T %F]) exibir apenas o 2 e o 4.Os elementos de uma fila podem ser organizados em outra matriz atravs do
comando M([n1 n2 ... nZ], c), caso se queira selecionar os elementos de ordem n1, n2at nZda coluna c, ou M(l, [n1 n2 ... nZ]), caso a operao deva ser aplicada na linha l.
Existem matrizes especiais j implementadas dentro do ambiente do Scilab,tais como a matriz identidade, a matriz nula e a matriz de uns, criadas, respectivamente,
poreye,zeros e ones, seguidas pela ordem.A funo bdiag(M) faz a diagonalizao da matriz. A matriz inversa pode ser
calculada pelo comando inv(M). Uma alternativa resoluo de sistemas lineares afuno linsolve(A,b), onde A e b so as matrizes de coeficientes e resultados,
respectivamente. A linha de comando [L U] = lu(M) faz a fatorao LU da matriz M.Outros dois tipos de fatorao presentes so a de Choleski e a fatorao QR, chamadas
pelos comandos chol(M) e qr(M). O comando orth(M) retorna a base ortogonal de umespao vetorial definido pela matriz M. A forma sinttica [r,a]=polar(M) transforma amatriz Mde coordenadas retangulares para coordenadas polares.
Uma operao que pode ser til quando se trabalha com matrizes aeliminao de linhas e/ou colunas. Se se quer eliminar a fila k da matriz M, bastaatribuir uma matriz vazia linha:M(k,:)=[ ]ouM(:,k)=[ ].
Em diversas aplicaes, costuma se denotar certas caractersticas de umsistema atribuindo se 0 ao ndice correspondente na matriz que representa o sistema.Por vezes necessrio avaliar a quantidade de zeros, a posio deles, dentre outras. Aseguir, algumas funes relacionadas a zeros:
nnz(M)Nmero de elementos no nulos deM.sparse(M)TransformaMnuma matriz esparsa.spzeros(M)Retorna uma matriz esparsa do tamanho deM.spget(M) Converte uma matriz esparsa para o formato padro (ndices dos
elementos no nulos, valor dos elementos no nulos e tamanho da matriz):
-->MM =
1. 2. 3.0. 1. 0.0. 0. 1.
-->A=sparse(M)A =
( 3, 3) sparse matrix
( 1, 1) 1.
( 1, 2) 2.( 1, 3) 3.
-
8/6/2019 Apostila de Scilab - Atualizada
19/44
( 2, 2) 1.( 3, 3) 1.
-->[ij,val,size_]=spget(A) size_ =
3. 3.val =
1.2.3.1.1.
ij =
1. 1.1. 2.1. 3.2. 2.3. 3.
Mais funes a respeito podem ser encontradas na biblioteca Sparse.A seguir, um exemplo de uso da fatorao QR para a extrao dos autovalores
de uma matriz:
clcclearclose
// EXTRAI OS AUTOVALORES DA MATRIZ A POR MEIO DA FATORAO QR// CDIGO ESCRITO POR DANUSIO GADELHA FILHO// PERMITIDA REPRODUO COM OS DEVIDOS CRDITOS
format (8) // formato de exibio dos nmeros: um menor nmero de casas decimais
disp(' ')
disp(' Programa de extrao de autovalores por fatorao QR')disp(' Danusio Gadelha Filho')disp(' ')
A=[2.5 -1 0;-1 5 -sqrt(2);0 -sqrt(2) 10];
L=size(A);I=eye(L(1),L(2));
disp('Matriz a ser fatorada -->')disp(' ')
-
8/6/2019 Apostila de Scilab - Atualizada
20/44
disp(A)disp(' ')
format (16) // um maior nmero de casas decimais
[Q R]=qr(A);
N=100; // nmero de iteraesQ1=Q;Q2=Q';
for i=1:N[Q R]=qr(A);Q1=Q*Q1;Q2=Q2*Q';
A=R*Q;end
printf(' Para %d iteraes, a matriz de autovalores : \n',N);disp(' ')disp(clean(A))disp(' ')
O cdigo apresentado abaixo retorna os valores de uma matriz M que estoacima ou abaixo de um valor de corte w. Observe que no foram usados comandoscondicionais (q.v. captulo 2):
clcclearclose
disp(' Programa Filtro Lgico')disp(' Danusio Gadelha Filho')disp(' ')disp(' Este script permite eliminar os elementos de uma matriz abaixo ou acimade um determinado valor')disp(' ')
M=[1/9 3/4 -1 7/6;
1/4 1/3 1/2 1;1 1/4 1/9 -1/16];
L=size(M);
w=.3;disp(' Matriz a ser reduzida: ')disp(' ')disp(M)disp(' ')
printf(' Valor de corte: %f \n',w);
for i=1:L(1)for j=1:L(2)
-
8/6/2019 Apostila de Scilab - Atualizada
21/44
A=bool2s((M(i,j)>w)); // sinal ">" --> script elimina x se x
-
8/6/2019 Apostila de Scilab - Atualizada
22/44
CAPTULO V
POLINMIOS
Esta uma classe de variveis, tal como real ou lgica. Um polinmio gerado no Scilab atravs da funo poly. Caso sejam definidos dois polinmios sob amesma varivel, estes podem ser somados, subtrados, multiplicados e divididos entre sie com nmeros complexos.
Existem duas formas de se criar um polinmio no Scilab: especificando suasrazes ou seus coeficientes. Para a primeira forma, so permitidas trs sintaxes:
P=poly([a b],'s');P=poly([a b], 's', 'r');
P=poly([a b], 's', 'roots');
Quando se deseja a segunda alternativa, as opes so apenas duas:
P=poly([c d], 's', 'c');P=poly([c d], 's', 'coeff');
Caso o usurio no queira trabalhar extensamente com uma varivel polinomial(se quer apenas a raiz de um polinmio qualquer, por exemplo), pode se trabalhar comas duas variveis polinomiais disponibilizadas pelo Scilab: %s e %z.
As razes de um polinmio podem ser obtidas com o comando roots(P) e seu
valor numrico, pelo comando horner(P,N). Uma observao pertinente se refere diviso de polinmios: caso no seja exata, possvel obter o resto e o quociente atravsda operaopdiv:
[r q]=pdiv(P,Q);
A funo coeff(P,n) retorna o coeficiente do polinmio Passociado ao termode grau n.
O comando clean zera na matriz todos os elementos que so menores que atolerncia definida pelo usurio. A sintaxe a que segue:
Q=clean(P,ta,tr)
Os parmetros ta e tr so, respectivamente, as tolerncias absoluta erelativa, abaixo das quais os termos sero zerados:
>>x=[1,2*%s-1,(3+%s^2)/(%s-2);-2+%s,3/(2*%s^3-%s),2];
>>clean(x,.9,.5)
// ------------------------------------------------------------------------------------>>x=[1,2*%s-1,(3+%s 2)/(%s-2);-2+%s,3/(2*%s^3-%s),2;1,2*%s-5, +3/%s];
>>x*inv(x)
>>clean(x*inv(x))
-
8/6/2019 Apostila de Scilab - Atualizada
23/44
Este comando vetores extensos e se desej
A funo coffg rematriz polinomial em ques
x=[1,2*%s-1,(3+[N,D]=coffg(x);N/D-inv(x)
O quociente da dia matriz inversa da matriz
Dada uma matrizordem do argumento de en
As funes denonumeradores de uma matri
Um dos comando
termos de uma matriz poliO determinante deA funo hrmt r
matriz Ude determinante iquesto) igual a um vetofator comum de v.
>>x=poly(0,'x');>>v=[x*(x^2-1),x
>>[pg,U]=hrmt(vU=clean(U)
/pg = fator comu
>>det(U)
A triangularizahtrianr(M). A matriz de en
Se uma matriz po a varivel dos polinmifunopol2des(M). Os ter
A funo polfact
multiplicados, resultam nomnimos fatores.Uma frao polin
que retorna a forma irredutA seguir, uma for
polinmios:
clcclearclose
// EXTRAI OS A
POLINMIO CARACTERS// CDIGO ESCRI
uito em procedimentos numricos, quandreduzir o tempo de execuo.
torna as matrizes inversas do numerador eo:
s^2)/(%s-2);-2+%s,3/(2*%s^3-%s),2;1 2
iso dos dois termos de sada da funo coee polinmios inicial.olinomial, o comando degree retorna uma
rada com o grau de cada elemento.e numer retornam, respectivamente, os de
polinomial racional.mais teis para polinmios o derivat, qu
omial (racional inclusive).uma matriz polinomial pode ser calculado ptorna o fator comum de um vetor linha pgual a 1 e tal que o produto v*U(onde v 1xn (onde n o comprimento de v) onde o
^2*(x+1),(x-2)*(x^2+2*x+1),(3*x^2+2)*(x
;
da matriz polinomial Mpode ser feita atratrada no pode conter termos fracionrios.linomial Mfor dada na formaos de M, os termos A, B e C podem ser
osA,B e Cso chamados de matrizes descrP) retorna os fatores mnimos do polin
polinmio). O argumento de sada um vmial pode ser simplificada atravs do usovel da matriz.ma de encontrar os autovalores de uma ma
TOVALORES DA MATRIZ A POR MEIO
ICOO POR DANUSIO GADELHA FILHO
o se opera com
denominador da
*%s -5+3/%s];
fg exatamente
atriz de mesma
ominadores e os
deriva todos os
ela funo detr.linomial e uma
o vetor linha emltimo termo o
1)^3];
vs do comando
, onde xncontrados pelaitoras de M.io (fatores que,
tor contendo osda funo simp,
riz M utilizando
AS RAZES DO
-
8/6/2019 Apostila de Scilab - Atualizada
24/44
// PERMITIDA REPRODUO COM OS DEVIDOS CRDITOS
format (8) // formato de exibio dos nmeros: um menor nmero de casas decimais
disp(' ')disp(' Programa de extrao de autovalores por polinmio caracterstico')disp(' Danusio Gadelha Filho')disp(' ')
A=[2.5 -1 0;-1 5 -sqrt(2);0 -sqrt(2) 10];
L=size(A);I=eye(L(1),L(2));
disp('Matriz a ser fatorada -->')
disp(' ')disp(A)disp(' ')
polcar=det(A-I*%s);
disp('O polimio caracterstico : ')disp(' ')disp(polcar)disp(' ')
format (16) // um maior nmero de casas decimais
lambda=roots(polcar);
disp(' Os autovalores so: ');disp(' ')disp(lambda)disp(' ')
Script com funes adicionais que utilizam polinmios:
clcclear
close
format (8) // formato de exibio dos nmeros: um menor nmero de casas decimais
disp(' ')disp(' Algumas funes extra para polinmios')disp(' Danusio Gadelha Filho')disp(' ')
disp(' Fatorao Espectral')disp(' ')
z=poly(0,'z');
-
8/6/2019 Apostila de Scilab - Atualizada
25/44
p=(z-1/2)*(2-z)*(3.5-z)*(z-2/7) // Cada raz de p tem um inverso simtrico quetambm raz de p
w=sfact(p) // as razes de w so as razes antiestveis de pdisp(' ')disp(' Verificao: ')disp(' ')disp(w*numer(horner(w,1/z))) // igual a pdisp(' ')
disp(' Equao de Bezout')disp(' p*a+q*b=r')disp(' ')
p=poly([1 2],'x','c');q=poly([10 .2],'x','c');
a=poly([2 1/2],'x','c');
b=poly([-5 1],'x','c');r=p*a+q*b;[x,err]=diophant([p,q],r)
rapproach=clean(p*x(1)+q*x(2))rdisp(' ')
disp(' Forma Hermitiana')disp(' ')
s=poly(0,'s');
disp(' Matriz a ser transformada -->')disp(' ')p=[s, s*(s+1)^2; 2*s^2 s-1];disp(p)[Ar,U]=hermit(p'*p);disp(' ')disp(' Forma Hermitiana de p: ptrans*p*Utrans -->')disp(' ')clean(Ar)disp(' Matriz unimodular U -->')
disp(U)disp(' ')detU=clean(det(U))
-
8/6/2019 Apostila de Scilab - Atualizada
26/44
CAPTULO VI
LISTAS
So outra classe de variveis, parecidas com as matrizes, mas que agrupamcontedo de diferentes tipos.
So implementadas atravs do comando list, seguido dos elementos os quais sedesejam agrupar.
-->L = list('Danusio',rand(3,2),(1/3*1/5*1/7-1),[%F %T %T %F])
Uma operao comum quando se trabalha com listas substituir umdeterminado elemento da lista por outra lista:
--> L(4)=list('God',[%T %T],12*12);--> L--> L(4)(2)(1,2)
As listas so consideradas estruturas de dados e tm sua biblioteca prpria. Aseguir, sero explicados diversos comandos e operaes relacionadas a estruturas dedados.
O comando cellcria um vetor de matrizes vazias segundo uma ordem definida.Esta ordem vem definida por outra matriz, que uma matriz de ndices. Considere oexemplo a seguir, em que criada uma matriz nula c de ordem 2 x 3 x 4 x 2:
-->m=[2 3;4 2];
-->c=cell(m)c =
(:,:,1,1)
!{} {} {} {} !! !!{} {} {} {} !(:,:,2,1)
!{} {} {} {} !! !!{} {} {} {} !(:,:,3,1)
!{} {} {} {} !! !
!{} {} {} {} !(:,:,1,2)
-
8/6/2019 Apostila de Scilab - Atualizada
27/44
!{} {} {} {} !! !!{} {} {} {} !(:,:,2,2)
!{} {} {} {} !! !!{} {} {} {} !(:,:,3,2)
!{} {} {} {} !! !!{} {} {} {} !
No exemplo, temos uma matriz 2 x 3 cujos elementos so matrizes 4 x 2 nulas.
A utilidade de matrizes nulas reside na necessidade de inicializao de matrizesvariveis, destacadamente quando so usados laos.
O comando hypermat inicializa uma matriz N-dimensional atravs de umasrie de dados:
-->M=hypermat([2 3 2 1],[rand(1,5) eye(1,5) zeros(1,2)]);
-->MM =
(:,:,1,1)
0.1280058 0.2119030 0.68568960.7783129 0.1121355 1.
(:,:,2,1)
0. 0. 0.0. 0. 0.
Note que o produto dos ndices entre colchetes deve ser igual ao nmero deelementos da matriz ao lado.
O comando struct a forma mais simples de se criar uma estrutura de dados.Apesar da simplicidade, esta funo d uma boa dinmica estrutura, permitindo umasubstituio intuitiva dos campos e a aquisio de novos campos.
-->dados=struct('Nome','Danusio','Idade',18,'Renda Mensal',100000);
Neste caso, os campos so Nome, Idade e Renda Mensal, e os valoresarmazenados so Danusio, 18 e 100000. Um dado pode ser acessado atravs donome da estrutura seguido por ponto e o nome do campo: dados.Nome. Um novo campo
pode ser adicionado seguindo a mesma sintaxe:
-->dados.Altura=182;
-
8/6/2019 Apostila de Scilab - Atualizada
28/44
-->dadosdados =
Nome: "Danusio"Idade: 18
Renda Mensal: 10000Altura: 182
A funo lstcatconcatena vrias listas numa varivel s: lstcat(l1,l2,...,ln).Por fim, a funo definedfields retorna os ndices definidos dentro de uma lista
( possvel definir uma lista com uma determinada posio sem elemento algum, da aimportncia de se saber quais posies esto preenchidas com elementos).
-
8/6/2019 Apostila de Scilab - Atualizada
29/44
CAPTULO VII
FUNES
Funes so procedimentos sintetizados em uma s operao de comando.Considere a operao de obter os nmeros pares at um nmero N. Podemos sintetiz la em uma funo, por exemplo pares. Os comandos obrigatrios para a definio deuma funo sofunction outputs=nome_da_funo (inputs) e endfunction.
function n=pares(N)n=0;
for i=1:Nif modulo(i,2)==0
n=n+1;endend
endfunction
A partir da execuo deste script, a funo pares pode ser executadanormalmente, como se fosse um comando interno do Scilab.
Caso se tenha uma relao direta entre o outpute os inputs, mais convenientefazer uso da funo deff. Considere o exemplo a seguir:
deff('r=quadr(a,b,c)','r=[(1/(2*a)*(-b+sqrt(b^2-4*a*c)));(1/(2*a)*(-b-sqrt(b^2-4*a*c)))]');
A definio anterior retorna as razes de uma equao quadrtica em funodos coeficientes.
-->quadr(1,-5,6)ans =
3.2.
O comando deffrequer duas strings: o escopo da funo (r=quadr(a,b,c)) e arelao entre o output e os inputs. Este tipo de funo que retorna apenas um argumento tambm chamado de procedimento.
A seguir, temos um exemplo de funo recorrente em clculo vetorial:
// funo que calcula as diferenas entre elementos sucessivos de um vetor x
function x=diff(X)n=length(X);
for i=1:(n-1)
x(i)=X(i+1)-X(i);end
-
8/6/2019 Apostila de Scilab - Atualizada
30/44
endfunction
// Calcula o comprimento da linha formada pelos pontos de coordenada (x,y)
deff('L=compl(x,y)',['dx=diff(x)';'dy=diff(y)';'L=sum(sqrt(dx.^2+dy.^2))']);
O uso de de funes e procedimentos se torna quase obrigatrio em programasmuito longos, na medida em que permitem subdividir o cdigo, o que facilita adebugagem, e realizar comandos comuns na rotina de forma mais prtica. A seguir, umafuno muito til em problemas de interpolao: permite achar os valoresimediatamente acima e abaixo de um pr determinado em uma srie de dados:
function [sup,inf]=limits(X,c)B=bool2s(X>=c);C=bool2s(X
-
8/6/2019 Apostila de Scilab - Atualizada
31/44
CAPTULO VIII
GRFICOS
GRFICOS BIDIMENSIONAIS So constitudos de dois eixos, sendonecessrio, portanto, dois argumentos de entrada para a execuo, que, na verdade, sovetores com a mesma dimenso. As funes responsveis pela plotagem 2D so plot,
plot2d, fplot2d e contour2d. importante notar que, caso um eixo seja funo do outro,todas as operaes devem ser realizadas elemento a elemento .
O comando plot2d plota uma curva bidimensional. Aceita quatroespecificaes (considere um eixo x definido de 0 a 5):
plot2d1:plotagem padro (linear):
clcclearclose
x=0:.01:5;y=sin(x.^2);plot2d1(x,y)
plot2d2:plotagem discreta (histograma ou degraus):
clcclearclose
x=0:.1:5;y=sin(x.^2);plot2d2(x,y)
plot2d3:plotagem em barras verticais:
clcclearclose
x=0:.05:5;y=sin(x.^2);plot2d3(x,y)
plot2d4:plotagem em setas:
clc
clearclose
-
8/6/2019 Apostila de Scilab - Atualizada
32/44
x=0:.05:5;y=sin(x.^2);plot2d4(x,y)
O comando plot2clcclearclose
deff("x=s(t)",["x=t=0:.1:16*%pi;
fplot2d(t,s)
O comando cont
geomtricos da superfcie a
clcclearclose
nz=10; // nmeroa=eye(5,10)+ran= min(a) + (1:nz
x=size(a);contour2d(1:x(1),
dplota uma funo definida porfunction ou
2*sin(.3*t)"]);
ur2dplota curvas de nvel com base numa
ser modelada:
de nveis(5,10)+ones(5,10);// matriz para a plotage*(max(a)-min(a))/(nz+1); //valor numrico
1:x(2),a,nz);
deff.
matriz de dados
e cada nvel
-
8/6/2019 Apostila de Scilab - Atualizada
33/44
O comandopolarclcclearclose
t= 0:.01:2*%pi;polarplot(sin(2*t)
O comandoplotracrscimo de propriedades:
POSIO DOS
x=0:0.1:4*%pi;
plot(x,sin(2*x))a=gca(); // defini
a.y_location ="ria.x_location ="toa.isoview='on'; //
PROPRIEDADE
MARCADOR
-
lotplota as variveis em coordenadas polar
cos(5*t));
ealiza as operaes de plotagem de forma
IXOS:
o da janela de plotagem
ht";// left, middle"; // bottom, originosio centralizada na janela
S DE TRAO:
SIGNIFICADO
Solid line (default)
s:
ais geral, com o
-
8/6/2019 Apostila de Scilab - Atualizada
34/44
-- Dashed line
: Dotted line
-. Dash-dotted line
r Red
g Green
b Blue
c Cyan
m Magenta
y Yellow
k Black
w White
+ Plus sign
o Circle
* Asterisk
. Point
x Cross
'square' or 's' Square
'diamond' or 'd' Diamond
^ Upward-pointing triangle
v Downward-pointing triangle
> Right-pointing triangle
< Left-pointing triangle
'pentagram' Five-pointed star (pentagram)
'none' No marker (default)
EXEMPLO:
x=0:0.1:2*%pi;plot(x,sin(2*x),'rpentagram')
a=gca(); // definio da janela de plotagem
a.y_location ="middle"; // left, middlea.x_location ="middle"; // bottom, origin
GRFICOS TRIDIMENSIONAIS: O comando mais utilizado o plot3d. Oseu uso pode ser observado na rotina a seguir:
clcclearclose
t=[0:0.1:2*%pi]';z=(sin(t).*exp(t))*cos(t');plot3d(t,t,z)
-->size(t)
-
8/6/2019 Apostila de Scilab - Atualizada
35/44
ans =
63. 1.
-->size(z)
ans =
63. 63.
Observe que, seeixo tem dimensoN x N.em cores mltiplas.
Um modo mais rcomando deff, atravs do c
clcclearclose
x=-2:.1:2;y=x;deff('[z]=f(x,y)',[
z=eval3d(f,x,y);plot3d(x,y,z);
eixo base tiver a dimenso 1 x N, a matrsta funo tem uma derivao,plot3d1, que
pido gerar superfcies a partir de funeomando eval3d:
'z= cos(x).*y']);
z imagem destegera uma figura
s definidas pelo
-
8/6/2019 Apostila de Scilab - Atualizada
36/44
CAMPO VETORefy(x,y), que so entendidem funo das coordenada
plota um campo vetorial (u
clcclearclose
x=-2:.2:2;y=-2:.2:2;
fx=-cos(x.^2)'*(y.fy=(sin(x).^2)'*y;
champ(x,y,fx,fy)
IAL: Um campo vetorial descrito por duas como matrizes contendo os valores das ds x e y. Observe o cdigo abaixo, em quese a funo champ1 para plotar em cores):
(2/3)); // matriz com as coordenadas x// matriz com as coordenadas y
funesfx(x,y)as componentes
a funo champ
-
8/6/2019 Apostila de Scilab - Atualizada
37/44
Uma curva tridim
Cdigo 1
clcclearclose
t=0:0.1:10*%pi;param3d(sin(t),co
Cdigo 2
clc
clearclose
t=[0:0.1:5*%pi]';param3d1([sin(t),
A funoparam3
ensional pode ser obtida atravs do comando
s(t),t/5)
sin(2*t)],[t,cos(2*t)],[t t]);
1 permite a plotagem de vrias curvas na m
param3d:
sma janela.
-
8/6/2019 Apostila de Scilab - Atualizada
38/44
O comandopie platributos deste comando:
clc
clearclosepie([53 42 62 20],// Valores, distnc
ota um grfico em pizza. Abaixo esto expl
[2 1 1 1],["parte 1","parte 2","parte 3","parias entre as fatias, rtulos.
citados todos os
te 4"]);
-
8/6/2019 Apostila de Scilab - Atualizada
39/44
Um histogramaDefine se tambm a larg
clcclear
close
y=rand(1,20);
scf(1)bar(y,.25,'r')
scf(2)barh(y,.75,y) //
gerado pelas funes bar e barh aplicara e a cor das barras plotadas:
arras horizontais
o numa matriz.
-
8/6/2019 Apostila de Scilab - Atualizada
40/44
Caso se ponha uum vetor), o eixo das absccardinais iguais ordem da
Outras funes pfiguras presentes neste mamenu da janela de grfic
possibilidade de se alterar
a matriz para ser plotada (os exemplos anissas (ou ordenadas, no caso de ser usado bs linhas da matriz.odem ser encontradas na biblioteca Grapterial foram exportadas para formato de imo gerada: File --> Export to... O menu
s propriedades do grfico e da janela.
eriores so pararh) ter valores
ics Library. Asgem a partir doainda oferece a
-
8/6/2019 Apostila de Scilab - Atualizada
41/44
E
A funo ode reordem, considerando comofuno e sua derivada tema seguir:
clcclearclose
// dy/dt=y^2- sin
function ydot=f(t,ydot=y^2-y*sin(t
endfunction
y0=0; // valor inict0=0; // tempo init=0:0.1:%pi; //esc
y=ode(y0,t0,t,f);
plot(t,y)
APNDICE
UAES DIFERENCIAIS
solve numericamente uma equao ordinvarivel a derivada primeira da funo y.
que ser explicitada atravs de uma funo, c
t)-cos(t), y(0)=0
)-cos(t);
ial de y no tempo inicialialla de tempo
ria de primeirarelao entre a
mo no exemplo
-
8/6/2019 Apostila de Scilab - Atualizada
42/44
Para solues de ordem superior, substitui se y eydotpor dois vetores, como mostrado a seguir, que resolve uma equao de segunda ordem:
clcclear
close
function s=sgn(v)N=length(v);for i=1:N
if v(i)==0s(i)=0;
elses(i)=abs(v(i))/v(i);
endend
endfunction
function ydot=f(t,y)x=y(1,:);v=y(2,:);
ydot(1,:)=v;ydot(2,:)=-(3.8724846^2)*2*%pi*x-0.2096573*9.81*[sgn(v)]';
endfunction
y0=[5;0];t0=[0;0];t=[0:0.01:4*%pi];
y=ode(y0,t0,t,f);ydot=f(t,y);
a=ydot(2,:);v=y(2,:);
x=y(1,:);
subplot(3,1,1)
plot(t,x)subplot(3,1,2)plot(t,v)subplot(3,1,3)plot(t,a)
-
8/6/2019 Apostila de Scilab - Atualizada
43/44
Observe que, em ufuno) at ordem n-1,ordem 1 n.
Uma alternativa aofuno em cada passo. Cola est abaixo, juntamente
clcclearclose
deff('y2dot=f(ydot,
y(1)=5e-3;
ydot(1)=0;y2dot(1)=f(ydot(1),dt=.05;t=0:dt:10;
for i=2:length(t)ydot(i)=ydot(i-1)y(i)=y(i-1)+dt*yd2dot(i)=f(ydot(i)
end
Y=[y ydot y2dot];X=[t' t' t'];
vetor, temos as derivadas da funo da oronde n a ordem da equao, e no outro,
uso da funo ode utilizar laos para obsidere a equaoy + 4y + 0,8y = 0. O scriom o grfico gerado:
)','y2dot=-4*y-0.8*ydot');
y(1));
dt*y2dot(i-1);ot(i-1);y(i));
/ [azul,verde,vermelho]
em 0 (a prpriaas derivadas de
er os valores dat para resolv
-
8/6/2019 Apostila de Scilab - Atualizada
44/44
plot(X,Y)
O princpio simples e bastante intuitivo: dados os valores iniciais develocidade e espao, obtemos a acelerao pela substituio na equao diferencial; osvalores seguintes de deslocamento e acelerao so obtidos pela expresso(discretizao da definio de derivada): ydot(passo i)=ydot(passo i-1)+dt*y2dot(i-1) ey(passo i)=y(passo i-1)+dt*ydot(i-1). A partir da, o processo se repete.