Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
do Método de
Runge-Kutta de
2ª e 4ª Ordem no
Scilab
rftg.development.googlepages.com
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.
25-04-2007
Professor/Orientador:
Prof. José Magalhães
4/11
De seguida é apresentado o código desenvolvido para a implementação do
método RK2:
//FUNÇÕES:
function out = f(x,y)
out = evstr(g)
endfunction
//Valores iniciais
x(1) = x0;
y(1) = y0;
for i = 1 : n_iter
k1 = h * f(x(i),y(i));
k2 = h * f(x(i) + h,y(i) + k1);
end
for i = 1 : n_iter
k1 = (h/2) * f(x(i),y(i));
k2 = (h/2) * f(x(i) + (h/2),y(i) + k1);
end
for i = 1 : n_iter
k1 = (h/4) * f(x(i),y(i));
k2 = (h/4) * f(x(i) + (h/4),y(i) + k1);
end
//***************************************************************
//***************************************************************
//***************************************************************
printf("\n\n\n\n")
printf("*********************************\n")
printf("* Tabela método RK2 *\n")
printf("*********************************\n")
printf("\nOs parâmetros apresentados são, respectivamente:\n")
printf("\n x; y para h; y para h/2; y para h/4; Erro 1; Erro 2; Razão \n\n")
//Implementação do RK4
//v0.01 25-04-2007
//Elaborado por: Ricardo Gomes, nº 1020405, 4ªano EC-AS
//FUNÇÕES:
function out = f(x,y)
out = evstr(g)
endfunction
//Valores iniciais
x(1) = x0;
y(1) = y0;
for i = 1 : n_iter
k1 = h * f(x(i) , y(i));
x(i+1) = x(i) + h;
end
7/11
//*************************** Passo h/2 *************************
//cálculo do nº de iterações
n_iter = (xF - x0) / (h/2);
for i = 1 : n_iter
end
for i = 1 : n_iter
end
//***************************************************************
//***************************************************************
8/11
//*********************** 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
//***************************************************************
printf("\n\n\n\n")
printf("*********************************\n")
printf("* Tabela método RK4 *\n")
printf("*********************************\n")
printf("\nOs parâmetros apresentados são, respectivamente:\n")
printf("\n x; y para h; y para h/2; y para h/4; Erro 1; Erro 2; Razão \n\n")
9/11
Executando ambas as aplicações no Scilab:
*********************************
* Tabela método RK2 *
*********************************
Os parâmetros apresentados são, respectivamente:
Fim.
*********************************
* Tabela método RK4 *
*********************************
Os parâmetros apresentados são, respectivamente:
Fim.
10/11
Conclusões
Para este caso específico (da expressão usada no teste) efectuando uma
comparação directa dos valores obtidos através do método de Euler (de 1ª ordem) e o
método de Taylor de 2ª Ordem (ver abaixo) é possível observar que ocorreu um
aumento da precisão de cálculo aquando da aplicação dos métodos de Runge-Kutta de
2ª ordem (RK2) e 4ª ordem (RK4), visto que ocorreu uma redução significativa do
erro do relativamente ao valor analítico (disponível na 2ª coluna da tabela produzida
aquando da aplicação do método de Taylor de 2ª ordem). Ignorando o valor analítico
que serve de solução à expressão em causa e, tomando como referência a estimativa
do erro (EC1 e EC2), podemos também inferir a mesma conclusão.
*********************************
* Tabela método Taylor 2ª ordem *
*********************************
Os parâmetros apresentados são, respectivamente:
x; y(x); y para h; y para h/2; y para h/4; Erro 1; Erro 2; Razão
Tabela =
0. 1. 1. 1. 1. 0. 0. 0.
0.2 1.0408108 1.04 1.040502 1.0407196 0.000502 0.0002176 2.3069436
0.4 1.1735109 1.168128 1.1718627 1.1730583 0.0037347 0.0011956 3.1236791
0.6 1.4333294 1.4167056 1.4284046 1.4319937 0.0116989 0.0035891 3.259548
0.8 1.8964809 1.8541843 1.8839578 1.8930814 0.0297735 0.0091236 3.2633545
1. 2.7182818 2.6166249 2.6878302 2.7099647 0.0712052 0.0221345 3.2169335
1.2 4.2206958 3.9772699 4.1464242 4.2002253 0.1691543 0.0538011 3.1440693
1.4 7.0993271 6.5036318 6.9133307 7.0474891 0.4096990 0.1341584 3.053845
1.6 12.935817 11.42558 12.451365 12.799052 1.0257847 0.3476866 2.9503143
1.8 25.533722 21.534934 24.211098 25.154888 2.6761647 0.9437900 2.8355509
2. 54.59815 43.483338 50.794026 53.490859 7.3106883 2.6968328 2.7108422
Fim.
Método de Euler:
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
11/11