Você está na página 1de 6

Implementação

do Método de
Euler de 1ª
Ordem no Scilab

rftg.development.googlepages.com

Data de criação: 4 de Abril de 2007

Versão: v0.02 – 13/MAI/2008

Autor: Ricardo Filipe Teixeira Gomes


AVISO LEGAL
Este documento foi elaborado por Ricardo Filipe Teixeira Gomes, a quem se reservam todos os
direitos.

© 2008 Ricardo Filipe Teixeira Gomes

Este documento encontra-se disponível para consulta e utilização desde que sejam respeitados
todos os direitos de autor e/ou propriedade intelectual. A cópia parcial ou integral, através de
qualquer tipo de meio, dos textos e imagens disponíveis neste documento encontra-se
expressamente proíbida a menos que o utilizador respeite os direitos de autoria e/ou
propriedade intelectual, citando para isso convenientemente o documento, e incluindo
imperterivelmente uma referência clara à página web do autor:
“rftg.development.googlepages.com”.

O material contido neste documento constitui apenas uma informação de carácter geral
baseada em experiências pessoais e não pretende de forma alguma influenciar o leitor sobre
qualquer matéria específica. O conteúdo deste documento é fornecido como uma comodidade
para os leitores e é constituído apenas por informação não vinculativa.

O conteúdo deste documento é fornecido “como está” e não se oferece qualquer garantia
sobre o mesmo. O autor do documento declina qualquer responsabilidade em caso de prejuízos
que possam ocorrer pelo facto de alguém se basear na informação contida neste documento,
uma vez que essa informação é de carácter meramente informativo, não se prometendo ou
garantindo que seja precisa, completa e actualizada. O mesmo se aplica ao conteúdo de
qualquer referência realizado no mesmo.

Quaisquer conflitos decorrentes do uso ou relacionados com este documento, ou respeitantes a


direitos de autor e/ou propriedade intelectual sobre materiais que façam parte deste
documento deverão ser regidos pela Legislação Portuguesa e sujeitos à jurisdição dos
tribunais de Portugal.

A leitura deste documento e sua utilização pressupõe a aceitação destas condições.

© 2008 Ricardo Filipe Teixeira Gomes. rftg.development.googlepages.com


Instituto Politécnico do Porto

Instituto Superior de Engenharia do Porto

Departamento de Engenharia Electrotécnica

Licenciatura em Engenharia Electrotécnica, ramo Automação e Sistemas

Disciplina de Matemática Aplicada II

Implementação do Método de Euler de 1ª Ordem no Scilab

04-04-2007

Professor/Orientador
Prof. José Magalhães

Trabalho realizado por:


Ricardo Filipe Teixeira Gomes
// (c) 2008 Ricardo Gomes - TODOS OS DIREITOS RESERVADOS
// http://rftg.development.googlepages.com

clear //apaga todas as variáveis definidas

g=input('Qual a função (introduza de modo explicitado) ','s');


x0=input('Qual o valor inicial de x ? ');
y0=input('Qual o valor inicial de y ? ');
h=input('Qual passo de iteração h ? ');
xF=input('Qual é o valor final de x pertendido ? ');

//Parâmetros usados para teste


//g = '2*x*y';
//x0 = 0;
//y0 = 1;
//xF = 2;
//h = 0.2;

//FUNÇÃO:
function out = f(x,y)
out = evstr(g)
endfunction

//Valores iniciais
x(1) = x0;
y(1) = y0;

//cálculo do comprimento dos vectores (de dados) a apresentar


c_vect = (xF-x0) / h;

//*************************** Passo h ***************************


//cálculo do nº de iterações
n_iter = (xF - x0) / h; // que neste caso é igual a 'c_vect'

for i = 1 : n_iter
x(i+1) = x(i) + h;
y(i+1) = y(i) + h * f(x(i),y(i));
end

//copia para o vector de saída


xsaida = x;
y1 = y;
//***************************************************************
//*************************** Passo h/2 *************************
//cálculo do nº de iterações
n_iter = (xF - x0) / (h/2);

for i = 1 : n_iter
x(i+1) = x(i) + (h/2);
y(i+1) = y(i) + (h/2) * f(x(i),y(i));
end

//copia para o vector de saída


y2(1) = y0;
for i = 1 : c_vect
y2(i+1) = y(2*i + 1);
end
//***************************************************************

//*************************** Passo h/4 *************************


//cálculo do nº de iterações
n_iter = (xF - x0) / (h/4);

for i = 1 : n_iter
x(i+1) = x(i) + (h/4);
y(i+1) = y(i) + (h/4) * f(x(i),y(i));
end

//copia para o vector de saída


y4(1) = y0;
for i = 1 : c_vect
y4(i+1) = y(4*i + 1);
end
//***************************************************************

//************************** Cálculo EC1 ************************


EC1(1) = 0;
for i = 1 : c_vect
EC1(i+1) = y2(i+1) - y1(i+1);
end

//***************************************************************

//************************** Cálculo EC2 ************************


EC2(1) = 0;
for i = 1 : c_vect
EC2(i+1) = y4(i+1) - y2(i+1);
end

//***************************************************************
//*********************** Cálculo da Razão **********************
RAZAO(1) = 0;
for i = 1 : c_vect
if EC2(i+1) == 0
RAZAO(i+1) = 0;
else
RAZAO(i+1) = EC1(i+1) / EC2(i+1);
end
end

//***************************************************************

saida=[xsaida y1 y2 y4 EC1 EC2 RAZAO]

Executando a aplicação no Scilab:


-->scipad();

-->Qual a função (introduza de modo explicitado) -->2*x*y


Qual o valor inicial de x ? -->0
Qual o valor inicial de y ? -->1
Qual passo de iteração h ? -->0.2
Qual é o valor final de x pertendido ? -->2
saida =

0. 1. 1. 1. 0. 0. 0.
0.2 1. 1.02 1.0302757 0.02 0.0102757 1.94633
0.4 1.08 1.124448 1.1482993 0.044448 0.0238513 1.8635484
0.6 1.2528 1.3358442 1.3824406 0.0830442 0.0465964 1.7822037
0.8 1.553472 1.7056059 1.7951229 0.1521339 0.0895170 1.699497
1. 2.050583 2.3346334 2.5106623 0.2840503 0.1760290 1.6136569
1.2 2.8708163 3.4179032 3.7769489 0.5470870 0.3590457 1.5237253
1.4 4.2488081 5.340132 6.1035986 1.091324 0.7634665 1.4294326
1.6 6.6281406 8.8859797 10.582204 2.2578391 1.6962242 1.3310971
1.8 10.870151 15.717521 19.660012 4.8473703 3.9424907 1.2295198
2. 18.696659 29.498643 39.092999 10.801984 9.5943562 1.1258686