#include<stdio.h>
#include<math.h>
#include<stdlib.h>
//Definindo a equação
double f(double t, double y){
return(9.8 - 12.5 * 12.5 / 68 * y);//coloque a função do seu problema
} //Nesse caso: dy/dt=9.8-(12,5²/68)*y, mas vale pra qualquer função
int main(){
FILE*arq;
int N, //quantidade de partições do domínio da solução y(t)
i;
double //troque os valores para se adequar ao seu problema
a=0.0, b=8.0, //extremos do domínio da solução y(t)
alfa=0, //y(t_0)=y(a)=alfa
h=0.01, //tamanho do passo
w, //aproximações da solução y(t) garedas pelo método
t, //domínio da solução y(t)
K_1,K_2,K_3,K_4;
//passo 1
//Inicialização
t=a;
w=alfa;
N=int(b/h)+1;
arq=fopen("Runge_Kutta_4_Ordem.txt","w");
fprintf(arq,"\n Aproximacoes da solucao pelo método de Runge-Kutta de 4 Ordem:\n\n");
fprintf(arq,"\n **********************************");
fprintf(arq,"\n t R_K ordem 4");
fprintf(arq,"\n %lf %lf",t,w);
//passo 2
for(i=1;i<=N;i++){
//passo 3
K_1=h*f(t,w);
K_2=h*f(t+h/2.0,w+K_1/2.0);
K_3=h*f(t+h/2.0,w+K_2/2.0);
K_4=h*f(t+h,w+K_3);
//passo 4
w=w+(K_1+2*K_2+2*K_3+K_4)/6;
t=a+i*h;
if(t==2.4){
printf("\nSolucao para t=%lf: %lf",t,w);
}
if(t==6.0){
printf("\nSolucao para t=%lf: %lf",t,w);
}
if(t==8.0){
printf("\nSolucao para t=%lf: %lf\n\n",t,w);
}
//passo 5
fprintf(arq,"\n %lf %lf",t,w);
}
fprintf(arq,"\n *************************************");
fclose(arq);
printf("==> O restante das solucoes foram gravadas no arquivo Runge_Kutta_4_Ordem.txt.");
getchar();
getchar();
}
Nenhum comentário:
Postar um comentário