Escolar Documentos
Profissional Documentos
Cultura Documentos
0 Parte 3
Paulo S. Motta Pires pmotta@dca.ufrn.br
Departamento de Engenharia de Computa c ao e Automa c ao Universidade Federal do Rio Grande do Norte NATAL - RN
Scilab 3.0
2005.1
1 / 39
Contatos
Contatos
Scilab 3.0
2005.1
2 / 39
Agenda
Agenda
Parte 1
Introdu c ao: Computa c ao Num erica O Ambiente Scilab
Parte 2
Opera c oes B asicas Polin omios, Vetores, Matrizes e Listas
Parte 3
Programa c ao
Parte 4
Gr acos Considera c oes Finais
Scilab 3.0
2005.1
3 / 39
Agenda
Comandos Condicionais
if-then-else, select-case
Scripts
Exemplo: M etodo de Newton-Raphson
Fun c oes
Exemplo 1: M etodo de Runge-Kutta Exemplo 2: M etodo da Substitui c ao Reversa
Scilab 3.0
2005.1
4 / 39
Introdu c ao
Introdu c ao
Scilab 3.0
2005.1
5 / 39
Scilab 3.0
2005.1
6 / 39
--> Loop for em linha de comando -->for k = 1:3 -->a = k + 1 -->end a = 2. = 3. = 4. -->
Scilab 3.0
2005.1
7 / 39
-->v = [2 3 4 5 6]; // Pode ser -->y = 0; -->for k = v -->y = y + k -->end y = 2. = 5. = 9. = 14. = 20. -->
v = 2:6
L(1) 1. L(2)
! !
1. 3.
2. ! 4. ! L(3)
Signicado igual a menor do que maior do que menor ou igual a maior ou igual a diferente
Scilab 3.0
2005.1
9 / 39
Scilab 3.0
2005.1
10 / 39
ou
if condicao_1 then sequencia_de_instrucoes_1 elseif condicao_2 sequencia_de_instrucoes_2 ... ... ... ... ... ... elseif condicao_n sequencia_de_instrucoes_n else sequencia_de_instrucoes_n+1 end
Scilab 3.0
2005.1
11 / 39
--> if condicao_1 then --> sequencia_de_instrucoes_1 -->elseif condicao_2 --> sequencia_de_instrucoes_2 --> elseif condicao_n --> sequencia_de_instrucoes_n --> else --> sequencia_de_instrucoes_n+1 -->end
-->x = -1; -->if x < 0 then --> y = -x y = 1. -->else --> y = x -->end -->// Outra forma -->x = 1 x = 1. -->if x > 0 then, y = -x, else, y=x, end y = - 1. -->x = -1 x = - 1. // Inicializando
// apresenta a resposta
end Scilab 3.0 -->if x > 0 then, y = -x, else, y=x, 2005.1
12 / 39
Scilab 3.0
2005.1
13 / 39
-->select variavel_de_teste -->case expressao_1 --> sequencia_de_instrucoes_1 -->case expressao_2 --> sequencia_de_instrucoes_2 -->case expressao_n --> sequencia_de_instrucoes_n -->else --> sequencia_de_instrucoes_n+1 -->end
-->x = -1 x = - 1. -->select x -->case 1 --> y = x + 5 -->case -1 --> y = sqrt(x) y = i -->end -->x = 1 x = 1. -->select x,case 1,y = x+5,case -1,y = sqrt(x),end y = 6 -->
Scilab 3.0
2005.1
14 / 39
Scripts
Scripts
Scripts
Cont em comandos Scilab Texto puro (ASCII) Conven c ao - extens ao sce Para executar: -->exec(nome_do_arquivo_de_comandos.sce)
Scilab 3.0
2005.1
15 / 39
Scripts
Scilab 3.0
2005.1
16 / 39
Scripts
Scripts - Exemplos
Scripts - Exemplo
Script na linguagem Scilab para obter a 2 usando o m etodo iterativo de Newton-Raphson. A raiz de uma fun c ao, f (x ) pode ser calculada atrav es da express ao, f (xi ) xi +1 = xi f (xi ) onde f (xi ) representa a derivada da fun c ao f (x ) no ponto xi e i = 0, 1, . . . , n representa o n umero de itera c oes. A fun c ao f (x ) que permite obter a 2 e f (x ) = x 2 2 Assim, usando a f ormula de Newton-Raphson, temos xi +1 = xi
Paulo Motta (DCA-UFRN) Scilab 3.0
x2 2 2x
2005.1 17 / 39
Scripts
Scripts - C odigo
Scripts - C odigo
Usando x0 = 1.0 como aproxima c ao inicial
// Script: metodo de Newton-Raphson // f(x) = x * x - 2 N = 10; // Numero maximo de iteracoes x0 = 1.0; // Aproximacao inicial delta = 10^(-5); // Erro xn = x0; for n=1:N xn1 = xn - (xn * xn - 2)/(2 * xn); if abs((xn1-xn)/xn1) < delta then printf(Valor da raiz = %10.7f,xn1) return end xn = xn1; end printf(Nao converge em n=%f iteracoes", N)
Observar o ; ap os alguns comandos. Isso evita que a execu c ao do script seja um processo ruidoso no ambiente Scilab.
Paulo Motta (DCA-UFRN) Scilab 3.0 2005.1 18 / 39
Scripts
Scripts - Execu c ao
Scripts - Execu c ao
-->exec newton.sce // executando o script
-->delta = 10^(-5);
-->xn = x0; -->for n=1:N --> xn1 = xn - (xn * xn - 2)/(2 * xn); --> if abs((xn1-xn)/xn1) < delta then --> printf(Valor da raiz = %10.8f,xn1) --> return --> end --> xn = xn1; -->end Valor da raiz = 1.41421356 // valor de sqrt(2) ! -->
Scilab 3.0
2005.1
19 / 39
Scripts
Scilab 3.0
2005.1
20 / 39
Fun c oes
onde foo e o nome da fun c ao, xi, i=1,...,m, s ao os seus argumentos de entrada, yj, j=1,...,n, s ao os seus argumentos de sa da e instrucao i, i=1,...,p, representa a seq u encia de instru c oes que devem ser executadas pela fun c ao. Toda fun c ao no Scilab e executada chamado seu nome seguido de seus argumentos.No exemplo, a fun c ao foo e executada atrav es do comando
-->foo(x1, ..., xm)
Scilab 3.0
2005.1
21 / 39
Fun c oes
Scilab 3.0
2005.1
22 / 39
Fun c oes
Scilab 3.0
2005.1
23 / 39
Fun c oes
Scilab 3.0
2005.1
24 / 39
Fun c oes
Scilab 3.0
2005.1
25 / 39
Fun c oes
Scilab 3.0
2005.1
26 / 39
Fun c oes
Fun c oes
Algoritmo Runge-Kutta
Algoritmo Runge-Kutta
Entrada: [a , b ], h e y 0 Fazer x 0 = a Fazer n = (b a )/h for k = 0 to n do Calcular f1 , f2 , f3 e f4 Calcular yk +1 = yk + h 6 (f1 + 2f2 + 2f3 + f4 ) Fazer xk +1 = xk + h end Resultado: Apresentar valores de xk e yk
Scilab 3.0
2005.1
28 / 39
Fun c oes
Runge-Kutta - Exemplo
Runge-Kutta - Exemplo
Resolver a equa c ao diferencial ordin aria, dy = (x y )/2 dx com condi c ao inicial y (0) = 1, utilizando o m etodo de Runge-Kutta de quarta ordem. Vamos considerar o intervalo de integra c ao [0, 3] e o passo de integra c ao igual a h = 1/8. A solu c ao num erica obtida por Runge-Kutta ser a comparada com valores da solu c ao exata que e y (x ) = 3e x /2 + x 2.
Scilab 3.0
2005.1
29 / 39
Fun c oes
Fun c ao Principal
Fun c ao Principal
rk4.sci
function [XY] = rk4(a, b, h, y0) // Resolucao de equacoes diferenciais ordinarias por Runge-Kutta 4a. ordem // Entrada : [a,b] - intervalo de integracao // h - passo da integracao // y0 - condicao inicial em x0 X(1) = a Y(1) = y0 Exato(1) = f2(X(1), Y(1)) n = (b-a)/h for k=1:n xk = X(k) yk = Y(k) hf1 = h * f(xk, yk) hf2 = h * f(xk + h/2, yk + hf1/2) hf3 = h * f(xk + h/2, yk + hf2/2) hf4 = h * f(xk + h, yk + hf3) Y(k+1) = Y(k) + (hf1 + 2*hf2 + 2*hf3 + hf4)/6 X(k+1) = X(k) + h Exato(k+1) = f2(X(k+1), Y(k+1)) end XY = [X Y Exato] endfunction
Scilab 3.0
2005.1
30 / 39
Fun c oes
Scilab 3.0
2005.1
31 / 39
Fun c oes
fsolucao.sci
function [fexato] = f2(x,y) // funcao solucao fexato = 3 * exp(-x/2) + x - 2 endfunction
Scilab 3.0
2005.1
32 / 39
Fun c oes
Scilab 3.0
2005.1
33 / 39
Fun c oes
= 4 = 0 = 3 = 10 = 6
2 6
2 2
1 7
1 1 2 0 2 1 0 0 3
0 3 10 6
2005.1 34 / 39
Scilab 3.0
Fun c oes
Scilab 3.0
2005.1
35 / 39
Fun c oes
Scilab 3.0
2005.1
36 / 39
Fun c oes
Scilab 3.0
2005.1
37 / 39
Fun c oes
nl
2. 2. - 1. - 2. 0.
- 1. 7. - 2. - 1. 3.
! ! ! ! !
Scilab 3.0
2005.1
38 / 39
Fun c oes
Scilab 3.0
2005.1
39 / 39