Você está na página 1de 24

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

INTRODUO AO SCILAB
Introduo Estas notas, de carter introdutrio e numa verso preliminar, tratam da utilizao do software Scilab na disciplina Clculo Numrico COM400, ministrada por professores do Departamento de Computao/ICEB para vrios cursos de graduao oferecidos pela UFOP. O Scilab (http://www-rocq.inria.fr/scilab) um ambiente voltado para o desenvolvimento de software para a resoluo de problemas numricos. desenvolvido e mantido por um grupo de pesquisadores do INRIA (Institut de Recherche en Informatique et en Automatique), um instituto francs de pesquisa em informtica e automao. Possui um ambiente de programao numrica bastante flexvel. Suas principais caractersticas so: 1. um software de distribuio gratuita, com cdigo fonte disponvel; 2. um ambiente poderoso para gerao de grficos; 3. Implementa diversas funes para manipulao de matrizes. As operaes de concatenao, extrao de elementos, transposio, adio e multiplicao de matrizes so facilmente realizadas; 4. Permite trabalhar com polinmios, funes de transferncia, sistemas lineares e grafos; 5. Apresenta facilidade para a definio de funes, que podem ser passadas para outras funes como argumento de entrada ou de sada; 6. Permite interface com rotinas escritas em linguagem FORTRAN ou C; 7. Suporta o desenvolvimento de conjunto de funes para aplicaes especficas (toolboxes). Estas notas tratam da utilizao do Scilab na sua verso 2.6. Sua tela de abertura apresentada na figura 1.

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Figura 1: Tela inicial do Scilab 2.6 Observe-se que o prompt do Scilab representado por uma seta, -->. chamado de prompt de primeiro nvel. Convenes bsicas 1. Para EXECUTAR um comando digitado basta pressionar a tecla enter. A execuo de um comando apresenta o resultado da sua avaliao; 2. Um nico comando em vrias linhas possvel com a utilizao de ... ao final do comando; 3. Um ponto e vrgula no final do comando suprime a apresentao do resultado, mas, no inibe o seu clculo internamente; 4. Letras maisculas e minsculas so distintas dentro do Scilab;
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 2

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

5. Argumentos de funes devem vir entre parnteses; 6. Comentrios podem ser inseridos em qualquer ponto utilizando-se //. Exemplo // este um comentrio Definio de variveis O Scilab sempre interpreta uma letra como sendo uma varivel. Para atribuir um valor a uma varvel "x" faz-se: x = valor Operadores aritmticos O Scilab indica as operaes aritmticas por smbolos usuais como: x + y + z + para adio; x - t - para subtrao; x*z * para multiplicao; x/y / para diviso; x^y ^ para potenciao; A ordem de precedncias, na realizao dos clculos, a usual, mas parnteses podem ser empregados para indicar a ordem desejada, sempre que houver necessidade. Funes pr-definidas O Scilab carregado com algumas funes pr-definidas, chamadas de primitivas, a seguir alguns exemplos. sqrt(x) raiz quadrada de x

-->sqrt(16) ans = 4.

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

-->sqrt(-2) ans = 1.4142136i log(x) -->log(%e) ans = 1 log10(x) -->log10(100) ans = 2. exp(x) -->exp(2) ans = 7.3890561 sin(x) cos(x) tan(x) cotg(x) seno de x cosseno de x tangente de x cotangente de x e elevado a x logaritmo de x na base 10 logaritmo neperiano de x

Como obter ajuda Em caso de dvida, h vrias formas de se obter ajuda. (i) Utilizando a opo Help na barra de ferramentas; (ii) Digitando help e o nome da funo.

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

CLCULO NUMRICO UTILIZANDO O SCILAB Pacotes no Scilab Se por um lado o Scilab pode ser considerado um software bastante profissional, por outro no tem qualquer preocupao com o aspecto didtico, por este motivo o aprendizado da sua utilizao no to simples, principalmente no que se refere programao. Alm destes inconvenientes, h tambm, o fato de que no disponibiliza funes que utilizam alguns dos mtodos numricos tratados na disciplina Clculo Numrico. Com o objetivo de suprir estas deficincias e de facilitar o uso do Scilab como ferramenta de auxlio na aprendizagem de Clculo Numrico, foram implementadas algumas funes, utilizando a linguagem de programao do software, sobre os seguintes assuntos: Resoluo de sistemas de equaes lineares simultneas; Interpolao polinomial; Resoluo de equaes algbricas e transcendentes. Este texto tem a finalidade de ser um manual de utilizao das funes implementadas. Os cdigos fonte esto disponveis, podendo ser livremente copiados e modificados, desde que seja feita referncia ao autor; que receber de bom grado qualquer sugesto que possibilite aperfeioar as rotinas implementadas e, de um modo geral, este trabalho. Todas as funes implementadas esto armazenadas na forma de pacotes. Pacotes so arquivos de extenso sci, em cdigo ASCII, de funes que no so intrinsecamente construdas no ncleo do Scilab. Todos os pacotes do Scilab esto armazenados em pastas em: C:\Arquivos de programas\Scilab-2.6\macros. Para disponibilizar ao usurio as funes contidas em um pacote, basta acessar o comando getf atravs da opo File do menu horizontal. Outra forma a utilizao do comando getf, que tem a seguinte sintaxe

getf('C:\Arquivos de programas\Scilab-2.6\macros\pasta do pacote\nome do pacote');


Por exemplo, para carregar o pacote gauss.sci, disponibilizando, assim, a funo nele definida, usada a sintaxe:
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 5

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\gauss.sci');
importante observar que o Scilab no exibe qualquer mensagem confirmando que o pacote foi carregado com sucesso; por outro lado, exibe mensagem quando h algum problema.. Neste texto est sendo tomado como referncia que os pacotes esto armazenados na pasta com400 em macros.

1. Pacotes para a resoluo de sistemas de equaes lineares simultneas


1.1 Mtodo de eliminao de Gauss Este pacote est contido no arquivo gauss.sci. Possibilita a resoluo de um sistema de equaes lineares simultneas utilizando o mtodo da eliminao de Gauss, com pivotao parcial. Disponibiliza a funo gauss(Ab). Para utiliz-la basta fornecer a matriz aumentada do sistema de equaes, e ter-se- como retorno o vetor x, soluo do sistema Ax = b. Exemplo Seja resolver o sistema de equaes mx = b, a seguir, utilizando o mtodo de eliminao de Gauss com pivotao parcial.

1 2

1 1 e b=

8 7 6

m = 10 2

3 10

Entrando com a matriz aumentada do sistema de equaes -->ab=[1,5,1,-8;10,2,1,7;2,3,10,6] ab = ! 1. 5. 1. - 8. ! ! 10. 2. 1. 7. ! ! 2. 3. 10. 6. ! Observe-se que os elementos de uma linha da matriz so separados por vrgula e que as linhas por ponto e vrgula. Carregando a funo gauss.sci -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\gauss.sci');

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Resolvendo o sistema de equaes usando a funo gauss.sci -->gauss(ab) Matriz aumentada do sistema de equaes ! 1. 5. 1. - 8. ! ! 10. 2. 1. 7. ! ! 2. 3. 10. 6. ! Troca de posio entre as linhas 1 e 2 ! 10. 2. 1. 7. ! ! 1. 5. 1. - 8. ! ! 2. 3. 10. 6. ! Passo 1 do processo de eliminao O piv neste passo 10.000000 ! 10. 2. ! 0. 4.8 ! 0. 2.6 1. 7. ! .9 - 8.7 ! 9.8 4.6 !

Passo 2 do processo de eliminao O piv neste passo 4.800000 ! 10. 2. 1. 7. ! ! 0. 4.8 .9 - 8.7 ! ! 0. 0. 9.3125 9.3125 ! O vetor soluo ! 1. - 2. 1. !

1.2 Mtodo da decomposio LU Este pacote est contido no arquivo ludec.sci. Possibilita a resoluo de um sistema de equaes lineares simultneas utilizando o mtodo da decomposio LU, com pivotao parcial. Disponibiliza a funo ludec(A,b). Para utiliz-la basta fornecer a matriz dos coeficientes do sistema de equaes e vetor dos termos independentes; ter-se- como retorno o vetor x, soluo do sistema Ax = b. Exemplo Ser utilizado o mesmo sistema de equaes do item 1.1. Entrando com a matriz dos coeficientes e vetor dos termos independentes -->a=[1,5,1;10,2,1;2,3,10] a =
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 7

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

! 1. 5. 1. ! ! 10. 2. 1. ! ! 2. 3. 10. ! -->b=[-8,7,6] b = ! - 8. 7. 6. !

Carregando a funo ludec.sci -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\ludec.sci'); Resolvendo o sistema de equaes usando a funo ludec.sci -->ludec(a,b) Matriz dos coeficientes ! 1. 5. 1. ! ! 10. 2. 1. ! ! 2. 3. 10. ! Troca de posio entre as linhas 1 e 2 ! 10. 2. 1. ! ! 1. 5. 1. ! ! 2. 3. 10. ! Passo 1 do processo de eliminao O piv neste passo 10.000000 ! 10. 2. ! .1 4.8 ! .2 2.6 1. ! .9 ! 9.8 !

Passo 2 do processo de eliminao O piv neste passo 4.800000 ! 10. 2. 1. ! ! .1 4.8 .9 ! ! .2 .5416667 9.3125 ! Termos independentes na entrada ! - 8. 7. 6. ! Vetor de pivotao
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 8

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

! 2. 1. 3. ! Termos independentes na sada ! 7. - 8. 6. !

[More (y or n ) ?] Matriz L ! 1. ! .1 ! .2 0. 0. ! 1. 0. ! .5416667 1. !

Matriz U ! 10. 2. 1. ! ! 0. 4.8 .9 ! ! 0. 0. 9.3125 ! O vetor y ! 7. - 8.7 9.3125 !

A soluo do sistema ! 1. - 2. 1. !

1.3 Mtodo de Jacobi Este pacote est contido no arquivo jacobi.sci. Disponibiliza a funo jacobi(A,b), que permite resolver um sistema de equaes lineares, AX=B, usando o mtodo iterativo de Jacobi. Para a construo da funo foi utilizada uma formulao matricial do mtodo. Para utilizar esta funo basta fornecer a matriz dos coeficientes e o vetor dos termos independentes e ter-se- como retorno o vetor soluo do sistema. Exemplo Ser utilizado o mesmo sistema de equaes do item 1.1 trocando a ordem das equaes 1 e 2. Entrando com a matriz dos coeficientes e vetor dos termos independentes -->a=[10,2,1;1,5,1;2,3,10]

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

a = ! 10. 2. 1. ! ! 1. 5. 1. ! ! 2. 3. 10. ! -->b=[7,-8,6] b = ! 7. - 8. 6. !

Carregando a funo jacobi.sci -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\jacobi.sci'); Resolvendo o sistema de equaes usando a funo jacobi.sci -->jacobi(a,b) Numero maximo de iteracoes: -->10 Precisao desejada: -->0.05 Entre com o vetor x0 na forma [x1 x2...xn]: -->[0,0,0] Iterao 1 .7000 -1.6000 .6000 Maior diferena entre o vetor 1 e 0 = 1.6000 Iterao 2 .9600 -1.8600 .9400 Maior diferena entre o vetor 2 e 1 = .3400 Iterao 3 .9780 -1.9800 .9660 Maior diferena entre o vetor 3 e 2 = .1200

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

10

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Iterao 4 .9994 -1.9888 .9984 Maior diferena entre o vetor 4 e 3 = .0324 Para a preciso .05000 a soluo o vetor: ! .9994 - 1.9888 .9984 !

1.4 Mtodo de Gauss - Seidel Este pacote est contido no arquivo gseidel.sci. Disponibiliza a funo gseidel(A,b), que permite resolver um sistema de equaes lineares, AX=B, usando o mtodo iterativo de Gauss - Seidel. Para a construo da funo foi utilizada uma formulao matricial do mtodo. Para utilizar esta funo basta fornecer a matriz dos coeficientes e o vetor dos termos independentes e ter-se- como retorno o vetor soluo do sistema. Exemplo Ser utilizado o mesmo sistema de equaes do item 1.1 trocando a ordem das equaes 1 e 2. Entrando com a matriz dos coeficientes e vetor dos termos independentes -->a=[10,2,1;1,5,1;2,3,10] a = ! 10. 2. 1. ! ! 1. 5. 1. ! ! 2. 3. 10. ! -->b=[7,-8,6] b = ! 7. - 8. 6. !

Carregando a funo gseidel.sci -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\gseidel.sci'); Resolvendo o sistema de equaes usando a funo gseidel.sci -->gseidel(a,b) Numero maximo de iteracoes: -->10 Precisao desejada:
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 11

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

-->0.05 Entre com o vetor x0 na forma [x1 x2...xn]: -->[0 0 0] Iterao 1 .7000 -1.7400 .9820 Maior diferena entre o vetor 1 e 0 = 1.7400 Iterao 2 .9498 -1.9864 1.0059 Maior diferena entre o vetor 2 e 1 = .2498 Iterao 3 .9967 -2.0005 1.0008 Maior diferena entre o vetor 3 e 2 = .0469 Para a precisao .05000 a soluo o vetor: ! .9966772 - 2.000525 1.0008221 !

2. Pacotes para interpolao polinomial


2.1 Mtodo de Lagrange Este pacote est contido no arquivo lagrange.sci. Disponibiliza a funo lagrange(x,y), que permite obter a equao do polinmio que interpola uma funo em um conjunto de pontos dados e, ainda, determinar um ponto no tabelado. Se o valor a ser interpolado estiver fora do intervalo dado para x, emitida uma mensagem e a execuo abortada. Para utilizar esta funo basta fornecer os vetores x e y. Exemplo Seja y = f(x) uma funo conhecida nos pontos a seguir. i xi yi 0 0 4 1 1 11 2 2 20 3 4 44

Entrando com os vetores x e y


PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 12

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

-->x=[0 1 2 4] x = ! 0. 1. 2. 4. !

-->y=[4 11 20 44] y = ! 4. 11. 20. 44. Carregando a funo lagrange.sci -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\lagrange.sci'); Realizando a interpolao utilizando a funo lagrange.sci -->lagrange(x,y) O polinmio interpolador 2 4 + 6w + w Deseja fazer interpolao (s ou n entre apstrofo)? -->'s' Valor a ser interpolado? -->3 Para x = 3.00000, y =31.00000 Outra interpolao (s ou n entre apstrofo)? -->'n' Sesso encerrada 2.2 Mtodo das diferenas divididas Este pacote est contido no arquivo difdiv.sci. Disponibiliza a funo difdiv(x,y), que permite obter a equao do polinmio que interpola uma funo em um conjunto de pontos dados e, ainda, determinar um ponto no tabelado. Se o valor a ser interpolado estiver fora do intervalo dado para x, emitida uma mensagem e a execuo abortada. Para utilizar esta funo basta fornecer os vetores x e y..

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

13

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Exemplo Seja y = f(x) uma funo conhecida nos pontos a seguir. i xi yi 0 1 2 3 3 5 6 8 1.10 1.27 1.36 1.53

Entrando com os vetores x e y -->x=[3 5 6 8] x = ! 3. 5. 6. 8. !

-->y=[1.1 1.27 1.36 1.53] y = ! 1.1 1.27 1.36 1.53 !

Carregando a funo difdiv.sci -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\difdiv.sci'); Realizando a interpolao usando a funo difdiv.sci -->difdiv(x,y,) Diferenas divididas de ordem zero ! 1.1 1.27 1.36 1.53 !

Diferenas divididas de ordem 1 .08500 .09000 .08500 Diferenas divididas de ordem 2 .00167 - .00167 Diferenas divididas de ordem 3 - .00067 A equao do polinmio interpolador 2 3 .93 + .0296667p + .011p - .0006667p Deseja fazer interpolao (s ou n entre apstrofo)?
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 14

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

-->'s' Valor a ser interpolado? -->4 Para x = 4.00000, y = 1.18200 Outra interpolao (s ou n entre apstrofo)? -->'n' Sesso encerrada 2.3 Mtodo das diferenas finitas ascendentes Este pacote est contido no arquivo difasc.sci. Disponibiliza a funo difasc(x,y), que permite obter a equao do polinmio que interpola uma funo em um conjunto de pontos dados e, ainda, determinar um ponto no tabelado. Se o valor a ser interpolado estiver fora do intervalo dado para x, emitida uma mensagem e a execuo abortada. Para utilizar esta funo basta fornecer os vetores x, com elementos igualmente espaados, e y. Exemplo Seja y = f(x) uma funo conhecida nos pontos a seguir. i 0 1 2 3 xi 0 1 2 3 yi 0 5 10 3 Entrando com os vetores x e y -->x=[0 1 2 3] x = ! 0. 1. 2. 3. !

-->y=[0 5 10 3] y = ! 0. 5. 10. 3. !

Carregando a funo difasc.sci -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\difasc.sci'); Realizando a interpolao usando a funo difasc.sci -->difasc(x,y)

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

15

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Diferenas finitas ascendentes de ordem zero ! 0. 5. 10. 3. ! Diferenas finitas ascendentes de ordem 1 5.00000 5.00000 -7.00000 Diferenas finitas ascendentes de ordem 2 0.00000 -12.00000 Diferenas finitas ascendentes de ordem 3 -12.00000 A equao do polinmio interpolador 2 3 z + 6z - 2z Deseja fazer interpolao (s ou n entre apstrofo)? -->'s' Valor a ser interpolado? -->1.5 Para x = 1.50000, z=1.50000 e y = 8.25000 Outra interpolao (s ou n entre apstrofo)? -->'n' Sesso encerrada

3. Pacotes para o clculo das razes reais de uma equao


3.1 Equaes algbricas polinomiais
3.1.1 Limites das razes reais Este pacote est contido no arquivo limites.sci. Trata-se de uma implementao do teorema de Lagrange para delimitao das razes reais de uma equao algbrica polinomial. Disponibiliza a funo limites(coef), onde "coef" um vetor que contm os coeficientes da equao, que deve ser passado de forma completa, ou seja, coeficientes nulos, devem ser considerados.

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

16

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Exemplo Seja determinar os limites das razes reais da equao y = x3 6x + 2 = 0. Entrando com o vetor dos coeficientes -->c=[1 0 -6 2] c = ! 1. 0. - 6. 2. ! Carregando a funo limites(coef) -->getf('C:\Program Files\Scilab-2.6\macros\com400\limites.sci'); Determinando os limites utilizando a funo limites(coef) -->limites(c) A equao dada de grau 3 Equao dada. Usada no clculo do LSRP 3 2 - 6R + R k=1 M = 6.000000

Equao auxiliar para o clculo do LIRP f1(x) = f(1/x) = 0 2 3 1 - 6R + 2R k=2 M = 6.000000

Equao auxiliar para o clculo do LIRN f2(x) = f(-x) = 0 3 - 2 - 6R + R k=1 M = 6.000000

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

17

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Equao auxiliar para o clculo do LSRN f3(x) = f(-1/x) = 0 2 3 - 1 + 6R + 2R k=0 M = 1.000000

As razes positivas, se existirem, esto no intervalo: [ .25 3.45] As razes negativas, se existirem, esto no intervalo: [-3.45 - .56] 3.1.2 Enumerao das razes reais Este pacote, contido no arquivo enumera.sci, a implementao de um processo para a enumerao das razes reais de uma equao algbrica polinomial que utiliza uma das sucesses de Sturm. Disponibiliza a funo enumera(coef,inf,sup), onde: coef inf sup vetor com os coeficientes do polinmio. Deve ser dado completo, ou seja, coeficientes nulos, devem ser considerados; limite inferior do intervalo no qual sero enumeradas as razes; limite superior do intervalo no qual sero enumeradas as razes.

Exemplo Seja enumerar as razes reais da equao y = x3 6x + 2 = 0, sabendo-se que esto nos intervalos: [ .25 3.45] e Entrando com o vetor dos coeficientes -->c=[1 0 -6 2] c = ! 1. 0. - 6. 2. ! [-3.45 - .56]

Carregando a funo enumera(coef,inf,sup) -->getf('C:\Program Files\Scilab-2.6\macros\com400\enumera.sci');

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

18

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Enumerando as razes utilizando a funo enumera(coef,inf,sup) a) Enumerando as razes positivas -- Entrando com os limites inferior e superior -->li=0.25 li = .25 -->ls=3.45 ls = 3.45 - Usando a funo enumera(coef,inf,sup) -->enumera(c,li,ls) Sucesso de Sturm 3 2 - 6x + x 2 - 6 + 3x - 2 + 4x 5.25 Sinal em --------------> .3 e 3.5 + + + + + + Variaes de sinal 2 0 O nmero de razes no intervalo [ .3 3.5] 2 b) Enumerando as razes negativas -- Entrando com os limites inferior e superior -->ls=-0.56 ls = - .56 - Usando a funo enumera(coef,inf,sup) -->enumera(c,li,ls) Sucesso de Sturm
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 19

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

3 2 - 6x + x 2 - 6 + 3x - 2 + 4x 5.25 Sinal em --------------> -3.5 + + Variaes de sinal 3 e - .6 + + 2

O nmero de razes no intervalo [-3.5 - .6] 1 3.1.3 Separao das razes reais Para separar as razes reais de uma equao f(x) = 0, situadas em um intervalo [a, b],utilizando-se um recurso computacional, ao invs do mtodo da bisseo pode-se fazer uso do procedimento descrito a seguir. (i) estabelece-se um passo h; (ii) calcula-se o valor de f(x) em cada ponto a, a + h, a + 2h, ..., b h, b; (iii) como j se sabe o nmero de razes reais que a equao tem no intervalo [a, b], basta observar o sinal da f(x) em cada ponto para fazer a separao. Para executar este procedimento no Scilab necessrio, antes, definir a funo que d origem equao. A definio de uma funo on line no Scilab feita utilizando-se a linha de comando cuja sintaxe apresentada a seguir.

deff('[ var dep]=nome da funo(var indep)',['forma analtica da funo' ])


Exemplo Seja definir a funo y = f(x) = x seno(x) 1. Neste caso, tem-se que Varivel dependente: y Nome da funo: f Varivel independente: x
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 20

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Forma analtica da funo: y = x * seno(x) - 1 Desta forma, para este exemplo, a linha de comando que define a funo :.

deff('[ y]=f(x)',['y=x*sin(x)-1' ])
O nome da funo e das varveis so estabelecidos a critrio do usurio. Uma vez que a funo foi definida, basta utilizar a linha de comando a seguir para gerar uma tabela com duas colunas x f(x). Na linha de comando h um espao em branco entre x e f(x).

for x=a:h:b,disp([x f(x)]),end


Exemplo Seja separar as razes reais da equao f(x) = x2 5x + 6 = 0. Consideremos o intervalo [0; 4,2] e um passo h = 0,7. Defina a funo, de nome f, e digite a linha de comando:

for x=0:0.7:4.2,disp([x f(x)]),end


! 0. ! .7 ! 1.4 6. ! 2.99 ! .96 ! O Scilab produz os resultados ao lado, onde se pode observar que para x = 1.4 tem-se f(x) = 0.96 e para x = 2.1 f(x) = -0.09, logo h uma raiz no intervalo [1.4; 2.1]. Da mesma forma, para x = 2.8 f(x) = -0.16 e para x = 3.5 f(x) = 0.75 sendo assim, h outra raiz no intervalo [2.8; 3.5]. De fato, facilmente verificado que as razes desta equao so 2 e 3. Se na primeira tentativa as razes no forem separadas, basta diminuir o tamanho do passo.

! 2.1 - .09 ! ! 2.8 - .16 ! ! 3.5 ! 4.2 .75 ! 2.64 !

3.2 Mtodos de clculo das razes reais de equaes algbricas e transcendentes


3.2.1 Mtodo da bisseo Este pacote est contido no arquivo bissec.sci. Trata-se de uma implementao do mtodo da bisseo. Disponibiliza a funo bissec(). Exemplo Seja calcular a raiz da equao f(x) = x seno(x) 1 = 0 pertencente ao intervalo [0, 2]. Carregando a funo bissec() -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\bissec.sci'); Calculando a raiz usando a funo bissec()
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 21

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

-->bissec() ************************************ ******** Mtodo da Bisseo ******** ************************************ Limite inferior do intervalo que contm a raiz : -->0 Limite superior do intervalo que contm a raiz : -->2 Preciso desejada : -->0.05 Nmero mximo de iteraes : -->10 Resultados fornecidos pelo Mtodo da Bisseo Iter. 1 2 3 4 5 6 a 0.00000 1.00000 1.00000 1.00000 1.00000 1.06250 b 2.00000 2.00000 1.50000 1.25000 1.12500 1.12500 x 1.00000 1.50000 1.25000 1.12500 1.06250 1.09375 fx - .15853 .49624 .18623 .01505 - .07183 - .02836 deltax 1.00000 .50000 .25000 .12500 .06250 .03125

Para a preciso estabelecida, qualquer valor do intervalo [1.06250 1.12500] pode ser tomado como raiz. 3.2.2 Mtodo da falsa posio Este pacote est contido no arquivo falpos.sci. Trata-se de uma implementao do mtodo da falsa posio. Disponibiliza a funo falpos(). Exemplo Seja calcular a raiz da equao x 2*seno(x) 0.5 = 0 sabendo-se que prxima de 2. Carregando a funo falpos() -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\falpos.sci');

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

22

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

Calculando a raiz usando a funo falpos() -->falpos() ***************************************** ******** Mtodo da falsa posio ******** ***************************************** Limite inferior do intervalo que contm a raiz : -->1.8 Limite superior do intervalo que contm a raiz : -->2.3 Preciso desejada : -->0.001 Nmero mximo de iteraes : -->10 Resultados fornecidos pelo Mtodo da falsa posio Iter. a 1 1.80000 2 2.13865 3 2.16016 b x fx 2.30000 2.13865 2.30000 2.16016 2.30000 2.16125 - .04746 - .00243 - .00012

Para a preciso estabelecida, 2.16125 raiz. 3.2.3 Mtodo de Newton-Raphson Este pacote est contido no arquivo nr.sci. Trata-se de uma implementao do mtodo da falsa posio. Disponibiliza a funo nr(). Exemplo Seja calcular a raiz da equao x2 2 = 0. Claramente, as razes desta equao so - 2 e + 2 . Carregando a funo nr() -->getf('C:\Arquivos de programas\Scilab-2.6\macros\com400\nr.sci'); Calculando a raiz usando a funo nr() -->nr() ************************************
PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc 23

DECOM/ICEB/UFOP - CCULO NUMRICO COM400 - 28/10/03

***** Mtodo de Newton-Raphson ***** ************************************ Estimativa inicial para a raiz: -->1 Preciso desejada: -->0.001 Nmero mximo de iteraes: -->10 Iter. 0 1 2 3 4 x 1.00000 1.50000 1.41667 1.41422 1.41421 f(x) -1.00000 .25000 .00694 .00001 0.00000 df(x) 2.00000 3.00000 2.83333 2.82843 2.82843 deltax ******* .50000 - .08333 - .00245 0.00000

Para a preciso estabelecida, 1.41421 raiz.

PROF. JOS LVARO TADEU FERREIRA -- Arquivo INTRO_Scilab_COM400.doc

24