Apostila de Scilab - Atualizada

Embed Size (px)

Citation preview

  • 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.