As equações diferenciais ordinárias (EDOs) são a espinha dorsal da modelagem matemática em inúmeras áreas da ciência e engenharia. Elas descrevem como quantidades mudam ao longo do tempo ou espaço, capturando a dinâmica de fenômenos tão diversos quanto o movimento planetário, reações químicas, crescimento populacional, circuitos elétricos, sistemas mecânicos e a propagação de doenças. No entanto, encontrar soluções analíticas exatas para muitas EDOs, especialmente aquelas que surgem em problemas do mundo real, pode ser uma tarefa árdua ou mesmo impossível. É aqui que os métodos numéricos entram em cena, oferecendo ferramentas poderosas para aproximar as soluções dessas equações complexas. Dentre a vasta gama de técnicas numéricas disponíveis, os métodos de Runge-Kutta se destacam por sua eficiência e precisão na resolução de problemas de valor inicial (PVIs) para EDOs. Um PVI consiste em uma EDO acompanhada de uma condição inicial que especifica o valor da solução em um ponto particular. A ideia central dos métodos de Runge-Kutta é realizar múltiplas avaliações da função que define a EDO (a função que descreve a taxa de variação) dentro de cada passo de integração, combinando-as de forma ponderada para obter uma aproximação mais acurada da solução no próximo ponto.
Os métodos de Runge-Kutta são classificados como métodos de passo simples, o que significa que a aproximação da solução no próximo ponto temporal, digamos $y_{i+1}$, depende apenas da solução no ponto atual, $y_i$, e de informações sobre a derivada (a função $f(t,y))$ avaliada em diferentes pontos intermediários dentro do intervalo $[t_i, t_{i+1}]$. Isso contrasta com os métodos de passo múltiplo, que utilizam informações de vários pontos anteriores para calcular o próximo valor.
A "ordem" de um método Runge-Kutta está diretamente relacionada à sua precisão. De forma simplificada, um método de ordem $p$ consegue igualar os $p+1$ primeiros termos da expansão em série de Taylor da solução exata. Isso implica que o erro local de truncamento (o erro cometido em um único passo, assumindo que todos os valores anteriores são exatos) é proporcional a $h^{p+1}$, onde $h$ é o tamanho do passo. Portanto, métodos de alta ordem tendem a fornecer resultados mais precisos para um mesmo tamanho de passo, ou permitir o uso de passos maiores para alcançar uma precisão desejada, o que pode levar a uma maior eficiência computacional, especialmente em integrações longas.
Os métodos Runge-Kutta "explícitos" são aqueles em que o cálculo da solução no próximo ponto, $y_{i+1}$, pode ser feito diretamente a partir dos valores conhecidos no ponto atual, $y_i$, e das avaliações da função $f(t,y)$. Não há necessidade de resolver equações implícitas para $y_{i+1}$ a cada passo, o que simplifica a implementação computacional. A forma geral de um método Runge-Kutta explícito de s estágios pode ser escrita como:
\[ y_{i+1} = y_i + h \sum_{j=1}^{s} (b_j k_j)\]
onde $h$ é o tamanho do passo, e os $k_j$ são as avaliações intermediárias da função $f$:
$k_1 = f(t_i, y_i) $
$k_2 = f(t_i + c_2h, y_i + h(a_{21}k_1))$
$k_3 = f(t_i + c_3h, y_i + h(a_{31}k_1 + a_{32}k_2))$
...
$k_s = f(t_i + c_sh, y_i + h(a_{s1}k_1 + a_{s2}k_2 + ... + a_{s,s-1}k_{s-1})) $
Os coeficientes $b_j$, $c_j$ e $a_{ij}$ são constantes específicas que definem um método Runge-Kutta particular e determinam sua ordem e propriedades de estabilidade. Esses coeficientes são frequentemente apresentados de forma compacta em uma tabela conhecida como Tabela de Butcher. Um dos exemplos mais conhecidos e amplamente utilizados de método Runge-Kutta explícito é o método clássico de quarta ordem (RK4). Ele requer quatro avaliações da função $f$ por passo e alcança uma precisão de quarta ordem, o que significa que seu erro local é da ordem de $h^5$. Este método oferece um bom equilíbrio entre precisão e custo computacional para uma vasta gama de problemas.
Além do RK4, existem outros métodos Runge-Kutta explícitos de ordens ainda mais elevadas, como os de quinta, sexta ordem, sétima, oitava ordem ou ainda maiores. No entanto, a complexidade na derivação dos coeficientes e o número de avaliações da função por passo aumentam com a ordem. Para problemas que exigem altíssima precisão ou onde a avaliação da função $f$ é computacionalmente cara, a escolha da ordem do método Runge-Kutta torna-se uma consideração crucial.
Outra inovação importante na família Runge-Kutta são os métodos com controle de passo adaptativo, como os métodos de Runge-Kutta-Fehlberg (RKF45) ou Dormand-Prince (DOPRI5). Estes métodos utilizam pares de fórmulas Runge-Kutta explícitas de ordens diferentes (por exemplo, uma de quarta e outra de quinta ordem) para estimar o erro local em cada passo. Com base nessa estimativa de erro, o tamanho do passo $h$ pode ser ajustado dinamicamente: aumentado quando o erro é pequeno (para economizar cálculos) e diminuído quando o erro é grande (para manter a precisão desejada). Essa capacidade de adaptação torna esses métodos particularmente eficientes para problemas onde a solução varia rapidamente em algumas regiões e lentamente em outras.
Em resumo, os métodos Runge-Kutta explícitos de alta ordem representam uma classe de ferramentas numéricas versáteis e poderosas para a solução de equações diferenciais ordinárias. Sua capacidade de alcançar alta precisão com um esforço computacional razoável os tornou um pilar na simulação científica e na engenharia, permitindo-nos explorar e entender a dinâmica de sistemas complexos que, de outra forma, permaneceriam inacessíveis.
Nesta postagem vamos comparar os métodos RK de 6a., 8a. 10a. e 12a. ordens. Usamos o Scilab para fazer as simulações.
Referências:
Feagin, Terry. "A tenth-order Runge-Kutta method with error estimate." Proceedings of the IAENG Conf. on Scientific Computing, 2007.
academia.edu/83821799/The_Effectiveness_of_Runge_Kutta
coeficientes:
https://sce.uhcl.edu/rungekutta/
Resultados gráficos:
y_analitica = (1-exp(-t/2))./(1+exp(-2*t));
dy/dt = (4 e^(2 t))/(e^(2 t) + 1)^2
----------------------
y_analitica = exp(-t).*sin(4*t); dy/dt = 4*exp(-t).*cos(4*t) - y;
----------------
Código Scilab:
close(winsid()); clc;
// Definir a função da equação diferencial dy/dt = f(t, y)
function dydt=ff(t, y)
//dydt = 2*t.*exp(-t) - y;
//dydt=r*y*exp(-t/2)*(1-y) - y/2;
dydt = (exp((3*t)/2)*(-3 + 4*exp(t/2) + exp(2*t)))/(2*(1 + exp(2*t))^2);
//dydt = exp(-t) - y;
//dydt = 4*exp(-t).*cos(4*t) - y;
endfunction
////////
// t0: tempo inicial
// y0: valor inicial de y
// tf: tempo final
// h: tamanho do passo
t0 = 0;
y0 = 0;
tf = 10;
h = 0.25;
r = 2.5;
// Número de passos
N = ceil((tf - t0) / h);
// Inicializar vetores para armazenar os resultados
t = t0:h:(t0 + N*h);
y = zeros(1, N+1);
y6 = y;
y6(1) = y0;
y6i = y0;
for i = 1:N
ti = t(i);
y6i = y6(i);
// Estágios do RK6
k1 = h * ff(ti, y6i);
k2 = h * ff(ti + h/5, y6i + k1/5);
k3 = h * ff(ti + 2*h/5, y6i + 2*k2/5);
k4 = h * ff(ti + h/5, y6i + (11*k1 - 4*k2+5*k3)/60);
k5 = h * ff(ti + 3*h/5, y6i + (-3*k1+4*k2+3*k3+8*k4)/20);
k6 = h * ff(ti + 4*h/5, y6i + (-12*k2-8*k3+22*k4+10*k5)/15);
k7 = h * ff(ti + h, y6i + (51*k1+140*k2+225*k3-280*k4-...
120*k5+60*k6)/76);
// Atualizar y usando a combinação dos estágios
y6(i+1) = y6i + (19*k1+50*k3+75*k4+50*k5+75*k6+19*k7)/288;
end;
//The coefficients in exact form are:
c(1)=0;
c(2)=1/2,
c(3)=1/2,
c(4)=1/2+(1/14)*(21^(1/2)),
c(5)=c(4); //1/2+1/14*21^(1/2),
c(6)=1/2,
c(7)=1/2-(1/14)*(21^(1/2)),
c(8)=c(7); //1/2-1/14*21^(1/2),
c(9)=1/2,
c(10)=c(4); //1/2+1/14*21^(1/2),
c(11)=1,
a(2,1)=1/2,
a(3,1)=1/4,
a(3,2)=1/4,
a(4,1)=1/7,
a(4,2)=-1/14-(3/98)*(21^(1/2)),
a(4,3)=3/7+5/49*21^(1/2),
a(5,1)=11/84+1/84*21^(1/2),
a(5,2)=0,
a(5,3)=2/7+4/63*21^(1/2),
a(5,4)=1/12-1/252*21^(1/2),
a(6,1)=5/48+1/48*21^(1/2),
a(6,2)=0,
a(6,3)=1/4+1/36*21^(1/2),
a(6,4)=-77/120+7/180*21^(1/2),
a(6,5)=63/80-7/80*21^(1/2),
a(7,1)=5/21-1/42*21^(1/2),
a(7,2)=0,
a(7,3)=-48/35+92/315*21^(1/2),
a(7,4)=211/30-29/18*21^(1/2),
a(7,5)=-36/5+23/14*21^(1/2),
a(7,6)=9/5-13/35*21^(1/2),
a(8,1)=1/14,
a(8,2)=0,
a(8,3)=0,
a(8,4)=0,
a(8,5)=1/9-1/42*21^(1/2),
a(8,6)=13/63-1/21*21^(1/2),
a(8,7)=1/9,
a(9,1)=1/32,
a(9,2)=0,
a(9,3)=0,
a(9,4)=0,
a(9,5)=91/576-7/192*21^(1/2),
a(9,6)=11/72,
a(9,7)=-385/1152-25/384*21^(1/2),
a(9,8)=63/128+13/128*21^(1/2),
a(10,1)=1/14,
a(10,2)=0,
a(10,3)=0,
a(10,4)=0,
a(10,5)=1/9,
a(10,6)=-733/2205-1/15*21^(1/2),
a(10,7)=515/504+37/168*21^(1/2),
a(10,8)=-51/56-11/56*21^(1/2),
a(10,9)=132/245+4/35*21^(1/2),
a(11,1)=0,
a(11,2)=0,
a(11,3)=0,
a(11,4)=0,
a(11,5)=-7/3+7/18*21^(1/2),
a(11,6)=-2/5+28/45*21^(1/2),
a(11,7)=-91/24-53/72*21^(1/2),
a(11,8)=301/72+53/72*21^(1/2),
a(11,9)=28/45-28/45*21^(1/2),
a(11,10)=49/18-7/18*21^(1/2),
b(1)=1/20,
b(2)=0,
b(3)=0,
b(4)=0,
b(5)=0,
b(6)=0,
b(7)=0,
b(8)=49/180,
b(9)=16/45,
b(10)=49/180,
b(11)=1/20
// Inicializar vetores para armazenar os resultados
N = ceil((tf - t0) / h);
t = t0:h:(t0 + N*h);
y = zeros(1, N+1);
y8 = y;
y8(1) = y0;
for i = 1:N
ti = t(i);
y8i = y8(i);
k = 0*c;
k(1)=h*ff(ti, y8i)
for n=2:11
sk=0;
for p=1:(n-1)
sk = sk + a(n,p)*k(p);
end;
k(n) = h*ff(ti+c(n)*h, y8i + sk);
end
sb = 0;
for n=1:11
sb = sb + b(n)*k(n);
end
y8(i+1) = y8i + sb;
end;
//////////////
c(1) = 0;
c(2) = 0.1000000000000000000000000000000000000000000000000000000;
c(3) = 0.5393578408029817875324851978813024368572734497010090155055;
c(4) = 0.80903676120447268129872779682195365528591017455151352325825;
c(5) = 0.30903676120447268129872779682195365528591017455151352325825;
c(6) = 0.981074190219795268254879548310562080489056746118724882027805;
c(7) = 0.833333333333333333333333333333333333333333333333333333333333;
c(8) = 0.354017365856802376329264185948796742115824053807373968324184;
c(9) = 0.882527661964732346425501486979669075182867844268052119663791;
c(10) = 0.642615758240322548157075497020439535959501736363212695909875;
c(11) = 0.357384241759677451842924502979560464040498263636787304090125;
c(12) = 0.117472338035267653574498513020330924817132155731947880336209;
c(13) = 0.833333333333333333333333333333333333333333333333333333333333;
c(14) = 0.309036761204472681298727796821953655285910174551513523258250;
c(15) = 0.5393578408029817875324851978813024368572734497010090155055;
c(16) = 0.1000000000000000000000000000000000000000000000000000000000;
c(17) = 1.00000000000000000000000000000000000000000000000000000000000;
b(1) = 0.0333333333333333333333333333333333333333333333333333333333333;
b(2) = 0.025000000000000000000000000000000000000000000000000000000000;
b(3) = 0.0333333333333333333333333333333333333333333333333333333333333;
b(4) = 0;
b(5) = 0.050000000000000000000000000000000000000000000000000000000000;
b(6) = 0;
b(7) = 0.04000000000000000000000000000000000000000000000000000000000;
b(8) = 0;
b(9) = 0.189237478148923490158306404106012326238162346948625830327194;
b(10) = 0.277429188517743176508360262560654340428504319718040836339472;
b(11) = 0.277429188517743176508360262560654340428504319718040836339472;
b(12) = 0.189237478148923490158306404106012326238162346948625830327194;
b(13) = -0.0400000000000000000000000000000000000000000000000000000000000;
b(14) = -0.0500000000000000000000000000000000000000000000000000000000000;
b(15) = -0.0333333333333333333333333333333333333333333333333333333333333;
b(16) = -0.0250000000000000000000000000000000000000000000000000000000000;
b(17) = 0.0333333333333333333333333333333333333333333333333333333333333;
a(2,1) = 0.100000000000000000000000000000000000000000000000000000000000;
a(3,1) = -0.915176561375291440520015019275342154318951387664369720564660;
a(3,2) = 1.45453440217827322805250021715664459117622483736537873607016;
a(4,1) = 0.202259190301118170324681949205488413821477543637878380814562;
a(4,2) = 0.000000000000000000000000000000000000000000000000000000000000;
a(4,3) = 0.606777570903354510974045847616465241464432630913635142443687;
a(5,1) = 0.184024714708643575149100693471120664216774047979591417844635;
a(5,2) = 0.000000000000000000000000000000000000000000000000000000000000;
a(5,3) = 0.197966831227192369068141770510388793370637287463360401555746;
a(5,4) = -0.0729547847313632629185146671595558023015011608914382961421311
a(6,1) = 0.0879007340206681337319777094132125475918886824944548534041378
a(6,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(6,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(6,4) = 0.410459702520260645318174895920453426088035325902848695210406
a(6,5) = 0.482713753678866489204726942976896106809132737721421333413261
a(7,1) = 0.0859700504902460302188480225945808401411132615636600222593880
a(7,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(7,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(7,4) = 0.330885963040722183948884057658753173648240154838402033448632
a(7,5) = 0.489662957309450192844507011135898201178015478433790097210790
a(7,6) = -0.0731856375070850736789057580558988816340355615025188195854775
a(8,1) = 0.120930449125333720660378854927668953958938996999703678812621
a(8,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(8,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(8,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(8,5) = 0.260124675758295622809007617838335174368108756484693361887839
a(8,6) = 0.0325402621549091330158899334391231259332716675992700000776101
a(8,7) = -0.0595780211817361001560122202563305121444953672762930724538856
a(9,1) = 0.110854379580391483508936171010218441909425780168656559807038
a(9,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(9,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(9,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(9,5) = 0.000000000000000000000000000000000000000000000000000000000000
a(9,6) = -0.0605761488255005587620924953655516875526344415354339234619466
a(9,7) = 0.321763705601778390100898799049878904081404368603077129251110
a(9,8) = 0.510485725608063031577759012285123416744672137031752354067590
a(10,1) = 0.112054414752879004829715002761802363003717611158172229329393
a(10,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(10,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(10,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(10,5) = 0.000000000000000000000000000000000000000000000000000000000000
a(10,6) = -0.144942775902865915672349828340980777181668499748506838876185
a(10,7) = -0.333269719096256706589705211415746871709467423992115497968724
a(10,8) = 0.499269229556880061353316843969978567860276816592673201240332
a(10,9) = 0.509504608929686104236098690045386253986643232352989602185060
a(11,1) = 0.113976783964185986138004186736901163890724752541486831640341
a(11,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(11,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(11,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(11,5) = 0.000000000000000000000000000000000000000000000000000000000000
a(11,6) = -0.0768813364203356938586214289120895270821349023390922987406384
a(11,7) = 0.239527360324390649107711455271882373019741311201004119339563
a(11,8) = 0.397774662368094639047830462488952104564716416343454639902613
a(11,9) = 0.0107558956873607455550609147441477450257136782823280838547024
a(11,10) = -0.327769124164018874147061087350233395378262992392394071906457
a(12,1) = 0.0798314528280196046351426864486400322758737630423413945356284
a(12,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(12,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(12,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(12,5) = 0.000000000000000000000000000000000000000000000000000000000000
a(12,6) = -0.0520329686800603076514949887612959068721311443881683526937298
a(12,7) = -0.0576954146168548881732784355283433509066159287152968723021864
a(12,8) = 0.194781915712104164976306262147382871156142921354409364738090
a(12,9) = 0.145384923188325069727524825977071194859203467568236523866582
a(12,10) = -0.0782942710351670777553986729725692447252077047239160551335016
a(12,11) = -0.114503299361098912184303164290554670970133218405658122674674
a(13,1) = 0.985115610164857280120041500306517278413646677314195559520529
a(13,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(13,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(13,4) = 0.330885963040722183948884057658753173648240154838402033448632
a(13,5) = 0.489662957309450192844507011135898201178015478433790097210790
a(13,6) = -1.37896486574843567582112720930751902353904327148559471526397
a(13,7) = -0.861164195027635666673916999665534573351026060987427093314412
a(13,8) = 5.78428813637537220022999785486578436006872789689499172601856
a(13,9) = 3.28807761985103566890460615937314805477268252903342356581925
a(13,10) = -2.38633905093136384013422325215527866148401465975954104585807
a(13,11) = -3.25479342483643918654589367587788726747711504674780680269911
a(13,12) = -2.16343541686422982353954211300054820889678036420109999154887
a(14,1) = 0.895080295771632891049613132336585138148156279241561345991710
a(14,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(14,3) = 0.197966831227192369068141770510388793370637287463360401555746
a(14,4) = -0.0729547847313632629185146671595558023015011608914382961421311
a(14,5) = 0.0000000000000000000000000000000000000000000000000000000000000
a(14,6) = -0.851236239662007619739049371445966793289359722875702227166105
a(14,7) = 0.398320112318533301719718614174373643336480918103773904231856
a(14,8) = 3.63937263181035606029412920047090044132027387893977804176229
a(14,9) = 1.54822877039830322365301663075174564919981736348973496313065
a(14,10) = -2.12221714704053716026062427460427261025318461146260124401561
a(14,11) = -1.58350398545326172713384349625753212757269188934434237975291
a(14,12) = -1.71561608285936264922031819751349098912615880827551992973034
a(14,13) = -0.0244036405750127452135415444412216875465593598370910566069132
a(15,1) = -0.915176561375291440520015019275342154318951387664369720564660
a(15,2) = 1.45453440217827322805250021715664459117622483736537873607016
a(15,3) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,5) = -0.777333643644968233538931228575302137803351053629547286334469
a(15,6) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,7) = -0.0910895662155176069593203555807484200111889091770101799647985
a(15,8) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,9) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,10) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,11) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,12) = 0.000000000000000000000000000000000000000000000000000000000000
a(15,13) = 0.0910895662155176069593203555807484200111889091770101799647985
a(15,14) = 0.777333643644968233538931228575302137803351053629547286334469
a(16,1) = 0.100000000000000000000000000000000000000000000000000000000000
a(16,2) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,3) = -0.157178665799771163367058998273128921867183754126709419409654
a(16,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,5) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,6) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,7) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,8) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,9) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,10) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,11) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,12) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,13) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,14) = 0.000000000000000000000000000000000000000000000000000000000000
a(16,15) = 0.157178665799771163367058998273128921867183754126709419409654
a(17,1) = 0.181781300700095283888472062582262379650443831463199521664945
a(17,2) = 0.675000000000000000000000000000000000000000000000000000000000
a(17,3) = 0.342758159847189839942220553413850871742338734703958919937260
a(17,4) = 0.000000000000000000000000000000000000000000000000000000000000
a(17,5) = 0.259111214548322744512977076191767379267783684543182428778156
a(17,6) = -0.358278966717952089048961276721979397739750634673268802484271
a(17,7) = -1.04594895940883306095050068756409905131588123172378489286080
a(17,8) = 0.930327845415626983292300564432428777137601651182965794680397
a(17,9) = 1.77950959431708102446142106794824453926275743243327790536000
a(17,10) = 0.100000000000000000000000000000000000000000000000000000000000
a(17,11) = -0.282547569539044081612477785222287276408489375976211189952877
a(17,12) = -0.159327350119972549169261984373485859278031542127551931461821
a(17,13) = -0.145515894647001510860991961081084111308650130578626404945571
a(17,14) = -0.259111214548322744512977076191767379267783684543182428778156
a(17,15) = -0.342758159847189839942220553413850871742338734703958919937260
a(17,16) = -0.675000000000000000000000000000000000000000000000000000000000
// Inicializar vetores para armazenar os resultados
N = ceil((tf - t0) / h);
t = t0:h:(t0 + N*h);
y = zeros(1, N+1);
y10 = y;
y10(1) = y0;
for i = 1:N
ti = t(i);
y10i = y10(i);
k = 0*c;
k(1)=h*ff(ti, y10i)
for n=2:17
sk=0;
for p=1:(n-1)
sk = sk + a(n,p)*k(p);
end;
k(n) = h*ff(ti+c(n)*h, y10i + sk);
end
sb = 0;
for n=1:17
sb = sb + b(n)*k(n);
end
y10(i+1) = y10i + sb;
end;
ck=[0 0.000000000000000000000000000000000000000000000000000000000000
1 0.200000000000000000000000000000000000000000000000000000000000
2 0.555555555555555555555555555555555555555555555555555555555556
3 0.833333333333333333333333333333333333333333333333333333333333
4 0.333333333333333333333333333333333333333333333333333333333333
5 1.00000000000000000000000000000000000000000000000000000000000
6 0.671835709170513812712245661002797570438953420568682550710222
7 0.288724941110620201935458488967024976908118598341806976469674
8 0.562500000000000000000000000000000000000000000000000000000000
9 0.833333333333333333333333333333333333333333333333333333333333
10 0.947695431179199287562380162101836721649589325892740646458322
11 0.0548112876863802643887753674810754475842153612931128785028369
12 0.0848880518607165350639838930162674302064148175640019542045934
13 0.265575603264642893098114059045616835297201264164077621448665
14 0.500000000000000000000000000000000000000000000000000000000000
15 0.734424396735357106901885940954383164702798735835922378551335
16 0.915111948139283464936016106983732569793585182435998045795407
17 0.947695431179199287562380162101836721649589325892740646458322
18 0.833333333333333333333333333333333333333333333333333333333333
19 0.288724941110620201935458488967024976908118598341806976469674
20 0.671835709170513812712245661002797570438953420568682550710222
21 0.333333333333333333333333333333333333333333333333333333333333
22 0.555555555555555555555555555555555555555555555555555555555556
23 0.200000000000000000000000000000000000000000000000000000000000
24 1.00000000000000000000000000000000000000000000000000000000000 ];
bk=[0 0.0238095238095238095238095238095238095238095238095238095238095
1 0.0234375000000000000000000000000000000000000000000000000000000
2 0.0312500000000000000000000000000000000000000000000000000000000
3 0.000000000000000000000000000000000000000000000000000000000000
4 0.0416666666666666666666666666666666666666666666666666666666667
5 0.000000000000000000000000000000000000000000000000000000000000
6 0.0500000000000000000000000000000000000000000000000000000000000
7 0.0500000000000000000000000000000000000000000000000000000000000
8 0.000000000000000000000000000000000000000000000000000000000000
9 0.100000000000000000000000000000000000000000000000000000000000
10 0.0714285714285714285714285714285714285714285714285714285714286
11 0.000000000000000000000000000000000000000000000000000000000000
12 0.138413023680782974005350203145033146748813640089941234591267
13 0.215872690604931311708935511140681138965472074195773051123019
14 0.243809523809523809523809523809523809523809523809523809523810
15 0.215872690604931311708935511140681138965472074195773051123019
16 0.138413023680782974005350203145033146748813640089941234591267
17 -0.0714285714285714285714285714285714285714285714285714285714286
18 -0.100000000000000000000000000000000000000000000000000000000000
19 -0.0500000000000000000000000000000000000000000000000000000000000
20 -0.0500000000000000000000000000000000000000000000000000000000000
21 -0.0416666666666666666666666666666666666666666666666666666666667
22 -0.0312500000000000000000000000000000000000000000000000000000000
23 -0.0234375000000000000000000000000000000000000000000000000000000
24 0.0238095238095238095238095238095238095238095238095238095238095];
////
c = ck(:,2);
b = bk(:,2);
ak=[1 0 0.200000000000000000000000000000000000000000000000000000000000
2 0 -0.216049382716049382716049382716049382716049382716049382716049
2 1 0.771604938271604938271604938271604938271604938271604938271605
3 0 0.208333333333333333333333333333333333333333333333333333333333
3 1 0.000000000000000000000000000000000000000000000000000000000000
3 2 0.625000000000000000000000000000000000000000000000000000000000
4 0 0.193333333333333333333333333333333333333333333333333333333333
4 1 0.000000000000000000000000000000000000000000000000000000000000
4 2 0.220000000000000000000000000000000000000000000000000000000000
4 3 -0.0800000000000000000000000000000000000000000000000000000000000
5 0 0.100000000000000000000000000000000000000000000000000000000000
5 1 0.000000000000000000000000000000000000000000000000000000000000
5 2 0.000000000000000000000000000000000000000000000000000000000000
5 3 0.400000000000000000000000000000000000000000000000000000000000
5 4 0.500000000000000000000000000000000000000000000000000000000000
6 0 0.103364471650010477570395435690481791543342708330349879244197
6 1 0.000000000000000000000000000000000000000000000000000000000000
6 2 0.000000000000000000000000000000000000000000000000000000000000
6 3 0.124053094528946761061581889237115328211074784955180298044074
6 4 0.483171167561032899288836480451962508724109257517289177302380
6 5 -0.0387530245694763252085681443767620580395733302341368038804290
7 0 0.124038261431833324081904585980175168140024670698633612292480
7 1 0.000000000000000000000000000000000000000000000000000000000000
7 2 0.000000000000000000000000000000000000000000000000000000000000
7 3 0.000000000000000000000000000000000000000000000000000000000000
7 4 0.217050632197958486317846256953159942875916353757734167684657
7 5 0.0137455792075966759812907801835048190594443990939408530842918
7 6 -0.0661095317267682844455831341498149531672668252085016565917546
8 0 0.0914774894856882983144991846980432197088832099976660100090486
8 1 0.000000000000000000000000000000000000000000000000000000000000
8 2 0.000000000000000000000000000000000000000000000000000000000000
8 3 0.000000000000000000000000000000000000000000000000000000000000
8 4 0.000000000000000000000000000000000000000000000000000000000000
8 5 -0.00544348523717469689965754944144838611346156873847009178068318
8 6 0.0680716801688453518578515120895103863112751730758794372203952
8 7 0.408394315582641046727306852653894780093303185664924644551239
9 0 0.0890013652502551018954509355423841780143232697403434118692699
9 1 0.000000000000000000000000000000000000000000000000000000000000
9 2 0.000000000000000000000000000000000000000000000000000000000000
9 3 0.000000000000000000000000000000000000000000000000000000000000
9 4 0.000000000000000000000000000000000000000000000000000000000000
9 5 0.00499528226645532360197793408420692800405891149406814091955810
9 6 0.397918238819828997341739603001347156083435060931424970826304
9 7 0.427930210752576611068192608300897981558240730580396406312359
9 8 -0.0865117637557827005740277475955029103267246394128995965941585
10 0 0.0695087624134907543112693906409809822706021061685544615255758
10 1 0.000000000000000000000000000000000000000000000000000000000000
10 2 0.000000000000000000000000000000000000000000000000000000000000
10 3 0.000000000000000000000000000000000000000000000000000000000000
10 4 0.000000000000000000000000000000000000000000000000000000000000
10 5 0.129146941900176461970759579482746551122871751501482634045487
10 6 1.53073638102311295076342566143214939031177504112433874313011
10 7 0.577874761129140052546751349454576715334892100418571882718036
10 8 -0.951294772321088980532340837388859453930924498799228648050949
10 9 -0.408276642965631951497484981519757463459627174520978426909934
11 0 0.0444861403295135866269453507092463581620165501018684152933313
11 1 0.000000000000000000000000000000000000000000000000000000000000
11 2 0.000000000000000000000000000000000000000000000000000000000000
11 3 0.000000000000000000000000000000000000000000000000000000000000
11 4 0.000000000000000000000000000000000000000000000000000000000000
11 5 -0.00380476867056961731984232686574547203016331563626856065717964
11 6 0.0106955064029624200721262602809059154469206077644957399593972
11 7 0.0209616244499904333296674205928919920806734650660039898074652
11 8 -0.0233146023259321786648561431551978077665337818756053603898847
11 9 0.00263265981064536974369934736325334761174975280887405725010964
11 10 0.00315472768977025060103545855572111407955208306374459723959783
12 0 0.0194588815119755475588801096525317761242073762016273186231215
12 1 0.000000000000000000000000000000000000000000000000000000000000
12 2 0.000000000000000000000000000000000000000000000000000000000000
12 3 0.000000000000000000000000000000000000000000000000000000000000
12 4 0.000000000000000000000000000000000000000000000000000000000000
12 5 0.000000000000000000000000000000000000000000000000000000000000
12 6 0.000000000000000000000000000000000000000000000000000000000000
12 7 0.000000000000000000000000000000000000000000000000000000000000
12 8 0.0000678512949171812509306121653452367476194364781259165332321534
12 9 -0.0000429795859049273623271005330230162343568863387724883603675550
12 10 0.0000176358982260285155407485928953302139937553442829975734148981
12 11 0.0653866627415027051009595231385181033549511358787382098351924
13 0 0.206836835664277105916828174798272361078909196043446411598231
13 1 0.000000000000000000000000000000000000000000000000000000000000
13 2 0.000000000000000000000000000000000000000000000000000000000000
13 3 0.000000000000000000000000000000000000000000000000000000000000
13 4 0.000000000000000000000000000000000000000000000000000000000000
13 5 0.000000000000000000000000000000000000000000000000000000000000
13 6 0.000000000000000000000000000000000000000000000000000000000000
13 7 0.000000000000000000000000000000000000000000000000000000000000
13 8 0.0166796067104156472828045866664696450306326505094792505215514
13 9 -0.00879501563200710214457024178249986591130234990219959208704979
13 10 0.00346675455362463910824462315246379209427513654098596403637231
13 11 -0.861264460105717678161432562258351242030270498966891201799225
13 12 0.908651882074050281096239478469262145034957129939256789178785
14 0 0.0203926084654484010091511314676925686038504449562413004562382
14 1 0.000000000000000000000000000000000000000000000000000000000000
14 2 0.000000000000000000000000000000000000000000000000000000000000
14 3 0.000000000000000000000000000000000000000000000000000000000000
14 4 0.000000000000000000000000000000000000000000000000000000000000
14 5 0.000000000000000000000000000000000000000000000000000000000000
14 6 0.000000000000000000000000000000000000000000000000000000000000
14 7 0.000000000000000000000000000000000000000000000000000000000000
14 8 0.0869469392016685948675400555583947505833954460930940959577347
14 9 -0.0191649630410149842286436611791405053287170076602337673587681
14 10 0.00655629159493663287364871573244244516034828755253746024098838
14 11 0.0987476128127434780903798528674033899738924968006632201445462
14 12 0.00535364695524996055083260173615567408717110247274021056118319
14 13 0.301167864010967916837091303817051676920059229784957479998077
15 0 0.228410433917778099547115412893004398779136994596948545722283
15 1 0.000000000000000000000000000000000000000000000000000000000000
15 2 0.000000000000000000000000000000000000000000000000000000000000
15 3 0.000000000000000000000000000000000000000000000000000000000000
15 4 0.000000000000000000000000000000000000000000000000000000000000
15 5 0.000000000000000000000000000000000000000000000000000000000000
15 6 0.000000000000000000000000000000000000000000000000000000000000
15 7 0.000000000000000000000000000000000000000000000000000000000000
15 8 -0.498707400793025250635016567442511512138603770959682292383042
15 9 0.134841168335724478552596703792570104791700727205981058201689
15 10 -0.0387458244055834158439904226924029230935161059142806805674360
15 11 -1.27473257473474844240388430824908952380979292713250350199641
15 12 1.43916364462877165201184452437038081875299303577911839630524
15 13 -0.214007467967990254219503540827349569639028092344812795499026
15 14 0.958202417754430239892724139109781371059908874605153648768037
16 0 2.00222477655974203614249646012506747121440306225711721209798
16 1 0.000000000000000000000000000000000000000000000000000000000000
16 2 0.000000000000000000000000000000000000000000000000000000000000
16 3 0.000000000000000000000000000000000000000000000000000000000000
16 4 0.000000000000000000000000000000000000000000000000000000000000
16 5 0.000000000000000000000000000000000000000000000000000000000000
16 6 0.000000000000000000000000000000000000000000000000000000000000
16 7 0.000000000000000000000000000000000000000000000000000000000000
16 8 2.06701809961524912091954656438138595825411859673341600679555
16 9 0.623978136086139541957471279831494466155292316167021080663140
16 10 -0.0462283685500311430283203554129062069391947101880112723185773
16 11 -8.84973288362649614860075246727118949286604835457092701094630
16 12 7.74257707850855976227437225791835589560188590785037197433615
16 13 -0.588358519250869210993353314127711745644125882130941202896436
16 14 -1.10683733362380649395704708016953056176195769617014899442903
16 15 -0.929529037579203999778397238291233214220788057511899747507074
17 0 3.13789533412073442934451608989888796808161259330322100268310
17 1 0.000000000000000000000000000000000000000000000000000000000000
17 2 0.000000000000000000000000000000000000000000000000000000000000
17 3 0.000000000000000000000000000000000000000000000000000000000000
17 4 0.000000000000000000000000000000000000000000000000000000000000
17 5 0.129146941900176461970759579482746551122871751501482634045487
17 6 1.53073638102311295076342566143214939031177504112433874313011
17 7 0.577874761129140052546751349454576715334892100418571882718036
17 8 5.42088263055126683050056840891857421941300558851862156403363
17 9 0.231546926034829304872663800877643660904880180835945693836936
17 10 0.0759292995578913560162301311785251873561801342333194895292058
17 11 -12.3729973380186513287414553402595806591349822617535905976253
17 12 9.85455883464769543935957209317369202080367765721777101906955
17 13 0.0859111431370436529579357709052367772889980495122329601159540
17 14 -5.65242752862643921117182090081762761180392602644189218673969
17 15 -1.94300935242819610883833776782364287728724899124166920477873
17 16 -0.128352601849404542018428714319344620742146491335612353559923
18 0 1.38360054432196014878538118298167716825163268489922519995564
18 1 0.000000000000000000000000000000000000000000000000000000000000
18 2 0.000000000000000000000000000000000000000000000000000000000000
18 3 0.000000000000000000000000000000000000000000000000000000000000
18 4 0.000000000000000000000000000000000000000000000000000000000000
18 5 0.00499528226645532360197793408420692800405891149406814091955810
18 6 0.397918238819828997341739603001347156083435060931424970826304
18 7 0.427930210752576611068192608300897981558240730580396406312359
18 8 -1.30299107424475770916551439123047573342071475998399645982146
18 9 0.661292278669377029097112528107513072734573412294008071500699
18 10 -0.144559774306954349765969393688703463900585822441545655530145
18 11 -6.96576034731798203467853867461083919356792248105919255460819
18 12 6.65808543235991748353408295542210450632193197576935120716437
18 13 -1.66997375108841486404695805725510845049807969199236227575796
18 14 2.06413702318035263832289040301832647130604651223986452170089
18 15 -0.674743962644306471862958129570837723192079875998405058648892
18 16 -0.00115618834794939500490703608435907610059605754935305582045729
18 17 -0.00544057908677007389319819914241631024660726585015012485938593
19 0 0.951236297048287669474637975894973552166903378983475425758226
19 1 0.000000000000000000000000000000000000000000000000000000000000
19 2 0.000000000000000000000000000000000000000000000000000000000000
19 3 0.000000000000000000000000000000000000000000000000000000000000
19 4 0.217050632197958486317846256953159942875916353757734167684657
19 5 0.0137455792075966759812907801835048190594443990939408530842918
19 6 -0.0661095317267682844455831341498149531672668252085016565917546
19 7 0.000000000000000000000000000000000000000000000000000000000000
19 8 0.152281696736414447136604697040747131921486432699422112099617
19 9 -0.337741018357599840802300793133998004354643424457539667670080
19 10 -0.0192825981633995781534949199286824400469353110630787982121133
19 11 -3.68259269696866809932409015535499603576312120746888880201882
19 12 3.16197870406982063541533528419683854018352080342887002331312
19 13 -0.370462522106885290716991856022051125477943482284080569177386
19 14 -0.0514974200365440434996434456698127984941168616474316871020314
19 15 -0.000829625532120152946787043541792848416659382675202720677536554
19 16 0.00000279801041419278598986586589070027583961355402640879503213503
19 17 0.0418603916412360287969841020776788461794119440689356178942252
19 18 0.279084255090877355915660874555379649966282167560126269290222
20 0 0.103364471650010477570395435690481791543342708330349879244197
20 1 0.000000000000000000000000000000000000000000000000000000000000
20 2 0.000000000000000000000000000000000000000000000000000000000000
20 3 0.124053094528946761061581889237115328211074784955180298044074
20 4 0.483171167561032899288836480451962508724109257517289177302380
20 5 -0.0387530245694763252085681443767620580395733302341368038804290
20 6 0.000000000000000000000000000000000000000000000000000000000000
20 7 -0.438313820361122420391059788940960176420682836652600698580091
20 8 0.000000000000000000000000000000000000000000000000000000000000
20 9 -0.218636633721676647685111485017151199362509373698288330593486
20 10 -0.0312334764394719229981634995206440349766174759626578122323015
20 11 0.000000000000000000000000000000000000000000000000000000000000
20 12 0.000000000000000000000000000000000000000000000000000000000000
20 13 0.000000000000000000000000000000000000000000000000000000000000
20 14 0.000000000000000000000000000000000000000000000000000000000000
20 15 0.000000000000000000000000000000000000000000000000000000000000
20 16 0.000000000000000000000000000000000000000000000000000000000000
20 17 0.0312334764394719229981634995206440349766174759626578122323015
20 18 0.218636633721676647685111485017151199362509373698288330593486
20 19 0.438313820361122420391059788940960176420682836652600698580091
21 0 0.193333333333333333333333333333333333333333333333333333333333
21 1 0.000000000000000000000000000000000000000000000000000000000000
21 2 0.220000000000000000000000000000000000000000000000000000000000
21 3 -0.0800000000000000000000000000000000000000000000000000000000000
21 4 0.000000000000000000000000000000000000000000000000000000000000
21 5 0.000000000000000000000000000000000000000000000000000000000000
21 6 0.0984256130499315928152900286856048243348202521491288575952143
21 7 -0.196410889223054653446526504390100417677539095340135532418849
21 8 0.000000000000000000000000000000000000000000000000000000000000
21 9 0.436457930493068729391826122587949137609670676712525034763317
21 10 0.0652613721675721098560370939805555698350543810708414716730270
21 11 0.000000000000000000000000000000000000000000000000000000000000
21 12 0.000000000000000000000000000000000000000000000000000000000000
21 13 0.000000000000000000000000000000000000000000000000000000000000
21 14 0.000000000000000000000000000000000000000000000000000000000000
21 15 0.000000000000000000000000000000000000000000000000000000000000
21 16 0.000000000000000000000000000000000000000000000000000000000000
21 17 -0.0652613721675721098560370939805555698350543810708414716730270
21 18 -0.436457930493068729391826122587949137609670676712525034763317
21 19 0.196410889223054653446526504390100417677539095340135532418849
21 20 -0.0984256130499315928152900286856048243348202521491288575952143
22 0 -0.216049382716049382716049382716049382716049382716049382716049
22 1 0.771604938271604938271604938271604938271604938271604938271605
22 2 0.000000000000000000000000000000000000000000000000000000000000
22 3 0.000000000000000000000000000000000000000000000000000000000000
22 4 -0.666666666666666666666666666666666666666666666666666666666667
22 5 0.000000000000000000000000000000000000000000000000000000000000
22 6 -0.390696469295978451446999802258495981249099665294395945559163
22 7 0.000000000000000000000000000000000000000000000000000000000000
22 8 0.000000000000000000000000000000000000000000000000000000000000
22 9 0.000000000000000000000000000000000000000000000000000000000000
22 10 0.000000000000000000000000000000000000000000000000000000000000
22 11 0.000000000000000000000000000000000000000000000000000000000000
22 12 0.000000000000000000000000000000000000000000000000000000000000
22 13 0.000000000000000000000000000000000000000000000000000000000000
22 14 0.000000000000000000000000000000000000000000000000000000000000
22 15 0.000000000000000000000000000000000000000000000000000000000000
22 16 0.000000000000000000000000000000000000000000000000000000000000
22 17 0.000000000000000000000000000000000000000000000000000000000000
22 18 0.000000000000000000000000000000000000000000000000000000000000
22 19 0.000000000000000000000000000000000000000000000000000000000000
22 20 0.390696469295978451446999802258495981249099665294395945559163
22 21 0.666666666666666666666666666666666666666666666666666666666667
23 0 0.200000000000000000000000000000000000000000000000000000000000
23 1 0.000000000000000000000000000000000000000000000000000000000000
23 2 -0.164609053497942386831275720164609053497942386831275720164609
23 3 0.000000000000000000000000000000000000000000000000000000000000
23 4 0.000000000000000000000000000000000000000000000000000000000000
23 5 0.000000000000000000000000000000000000000000000000000000000000
23 6 0.000000000000000000000000000000000000000000000000000000000000
23 7 0.000000000000000000000000000000000000000000000000000000000000
23 8 0.000000000000000000000000000000000000000000000000000000000000
23 9 0.000000000000000000000000000000000000000000000000000000000000
23 10 0.000000000000000000000000000000000000000000000000000000000000
23 11 0.000000000000000000000000000000000000000000000000000000000000
23 12 0.000000000000000000000000000000000000000000000000000000000000
23 13 0.000000000000000000000000000000000000000000000000000000000000
23 14 0.000000000000000000000000000000000000000000000000000000000000
23 15 0.000000000000000000000000000000000000000000000000000000000000
23 16 0.000000000000000000000000000000000000000000000000000000000000
23 17 0.000000000000000000000000000000000000000000000000000000000000
23 18 0.000000000000000000000000000000000000000000000000000000000000
23 19 0.000000000000000000000000000000000000000000000000000000000000
23 20 0.000000000000000000000000000000000000000000000000000000000000
23 21 0.000000000000000000000000000000000000000000000000000000000000
23 22 0.164609053497942386831275720164609053497942386831275720164609
24 0 1.47178724881110408452949550989023611293535315518571691939396
24 1 0.787500000000000000000000000000000000000000000000000000000000
24 2 0.421296296296296296296296296296296296296296296296296296296296
24 3 0.000000000000000000000000000000000000000000000000000000000000
24 4 0.291666666666666666666666666666666666666666666666666666666667
24 5 0.000000000000000000000000000000000000000000000000000000000000
24 6 0.348600717628329563206854421629657569274689947367847465753757
24 7 0.229499544768994849582890233710555447073823569666506700662510
24 8 5.79046485790481979159831978177003471098279506036722411333192
24 9 0.418587511856506868874073759426596207226461447604248151080016
24 10 0.307039880222474002649653817490106690389251482313213999386651
24 11 -4.68700905350603332214256344683853248065574415794742040470287
24 12 3.13571665593802262152038152399873856554395436199962915429076
24 13 1.40134829710965720817510506275620441055845017313930508348898
24 14 -5.52931101439499023629010306005764336421276055777658156400910
24 15 -0.853138235508063349309546894974784906188927508039552519557498
24 16 0.103575780373610140411804607167772795518293914458500175573749
24 17 -0.140474416950600941142546901202132534870665923700034957196546
24 18 -0.418587511856506868874073759426596207226461447604248151080016
24 19 -0.229499544768994849582890233710555447073823569666506700662510
24 20 -0.348600717628329563206854421629657569274689947367847465753757
24 21 -0.291666666666666666666666666666666666666666666666666666666667
24 22 -0.421296296296296296296296296296296296296296296296296296296296
24 23 -0.787500000000000000000000000000000000000000000000000000000000];
aa = zeros(24,24);
for nn=1:max(size(ak))
px = ak(nn,1);
py = ak(nn,2)+1;
vv = ak(nn,3);
aa(px,py) = vv;
end
// Inicializar vetores para armazenar os resultados
// N = ceil((tf - t0) / h);
// t = t0:h:(t0 + N*h);
y = zeros(1, N+1);
y12 = y;
y12(1) = y0;
for i = 1:N
ti = t(i);
y12i = y12(i);
k = 0*c;
k(1)=h*ff(ti+c(1)*h, y12i);
k(2)=h*ff(ti+c(2)*h, y12i+aa(1,1)*k(1));
k(3)=h*ff(ti+c(3)*h, y12i+aa(2,1)*k(1)+aa(2,2)*k(2));
k(4)=h*ff(ti+c(4)*h, y12i+aa(3,1)*k(1)+aa(3,2)*k(2)+aa(3,3)*k(3));
for n=5:25
sk=0;
for p=1:(n-1)
sk = sk + aa(n-1,p)*k(p);
end;
k(n) = h*ff(ti+c(n)*h, y12i + sk);
end
sb = 0;
for n=1:max(size(b))
sb = sb + b(n)*k(n);
end
y12(i+1) = y12i + sb;
end;
// Solução analítica para comparação
// y_analitica = t.*t.*exp(-t);
// eqs = 'dy/dt = 2texp(-t) - y';
y_analitica = (1-exp(-t/2))./(1+exp(-2*t));
eqs = 'dy/dt = (4 e^(2 t))/(e^(2 t) + 1)^2';
// y_analitica = t.*exp(-t);
// eqs = 'dy/dt = exp(-t) - y';
//y_analitica = exp(-t).*sin(4*t);
//eqs = 'dy/dt = 4*exp(-t).*cos(4*t) - y';
plot(t,y_analitica, 'm',"LineWidth", 2);
plot(t,y6, 'b', "LineWidth", 2);
plot(t,y8, 'k', "LineWidth", 2);
plot(t,y10,'y', "LineWidth", 2);
plot(t,y12,'k', "LineWidth", 2);
title('Sinal e soluções numéricas (RK6, RK8, RK10 e RK12). Passo: '+string(h));
legend('Sinal','RK6','RK8','RK10','RK12',4);
//Erro e erro acumulado:
e6 = y_analitica - y6; E6a = sum(abs(e6));
e8 = y_analitica - y8; E8a = sum(abs(e8));
e10 = y_analitica - y10; E10a = sum(abs(e10));
e12 = y_analitica - y12; E12a = sum(abs(e12));
figure;
subplot(2,2,1); plot(e6); title('Erro RK-6. E6a = '+string(E6a)); xgrid;
subplot(2,2,2); plot(e8); title('Erro RK-8. E8a = '+string(E8a)); xgrid;
subplot(2,2,3); plot(e10); title('Erro RK-10. E10a = '+string(E10a)); xgrid;
subplot(2,2,4); plot(e12); title('Erro RK-12. E12a = '+string(E12a)); xgrid;
Nenhum comentário:
Postar um comentário