Está en la página 1de 2

#include<stdio.

h>
#include<math.h>
FILE *OUP[1];
double F(double, double);
void RK4(double , double , double , double *, double *);
void INPUT(int *, double *, double *, double *, int *);
void OUTPUT(FILE **);
main() {
printf("TECNOLOGICO DE ESTUDIOS SUPERIORES DE JOCOTITLAN\n");
printf("INGENIERIA EN MATERIALES\n");
printf("PROGRAMACION DE METODOS NUMERICOS\n");
printf("DOCENTE: ADRIANA SOTELO HURTADO\n");
printf("ALUMNO: DIEGO ANASTACIO MATIAS\n");
printf("METODO DE ADAMS\n");
printf(" ESTE POGRAMA CALCULA LA SOLUCION A UNA ECUACION DIFERENCIAL MEDIANTE EL
METODO DE ADAMS\n");
printf("ES NECESIO ESCRIBIR EL NOMBRE DE UN ARCHIVO DEL BLOC DE NOTAS
EXTENSION .txt PARA LA IMPRESION DE LOS VALORES\n");
printf(" SE EMPLEO LA SIGUIENTE ECUACION\n");
printf(" y'=cos(2t)+sen (3t), 0<=t<=1, y(0)=1, h=0.2\n");
double T[4],W[4];
double A,B,ALPHA,H,T0,W0;
int I,N,J,OK;
INPUT(&OK, &A, &B, &ALPHA, &N);
if (OK) {
OUTPUT(OUP);
H = (B - A) / N;
T[0] = A;
W[0] = ALPHA;
fprintf(*OUP, "%5.3f %11.7f\n", T[0], W[0]);
for (I=1; I<=3; I++) {
RK4(H, T[I-1], W[I-1], &T[I], &W[I]);
fprintf(*OUP, "%5.3f %11.7f\n", T[I], W[I]);
}
for (I=4; I<=N; I++) {
T0 = A + I * H;
W0 = W[3]+H*(55.0*F(T[3],W[3])-59.0*F(T[2],W[2])
+37.0*F(T[1],W[1])-9.0*F(T[0],W[0]))/24.0;
W0 = W[3]+H*(9.0*F(T0,W0)+19.0*F(T[3],W[3])
-5.0*F(T[2],W[2])+F(T[1],W[1]))/24.0;
fprintf(*OUP, "%5.3f %11.7f\n", T0, W0);
for (J=1; J<=3; J++) {
T[J-1] = T[J];
W[J-1] = W[J];
}
T[3] = T0;
W[3] = W0;
}
fclose(*OUP);
}
return 0;
}
double F(double T, double Y)
{
double f;
f = cos(2*T)+ sin(3*T);
return f;
}
void RK4(double H, double T0, double W0, double *T1, double *W1)
{
double K1,K2,K3,K4;
*T1 = T0 + H;
K1 = H * F(T0, W0);
K2 = H * F(T0 + 0.5 * H, W0 + 0.5 * K1);
K3 = H * F(T0 + 0.5 * H, W0 + 0.5 * K2);
K4 = H * F(*T1, W0 + K3);
*W1 = W0 + (K1 + 2.0 * (K2 + K3) + K4) / 6.0;
}
void INPUT(int *OK, double *A, double *B, double *ALPHA, int *N)
{
double X;
*OK = false;
while (!(*OK)) {
printf("Dar los limites del intervalo separados con un espacio\n");
scanf("%lf %lf", A, B);
if (*A >= *B)
printf("El limite derecho debe ser mayor que el izquierdo\n");
else *OK = true;
}
printf("Dar la condicion inicial\n");
scanf("%lf", ALPHA);
*OK = false;
while(!(*OK)) {
printf("Dar un numero de subintervalos mayor a 3 ");
scanf("%d", N);
if (*N < 4) printf("Debe ser al menos 4\n");
else *OK = true;
}
}
void OUTPUT(FILE **OUP)
{
char NAME[30];
printf("Dar el nombre del archivo de salida en el formato:\n");
printf("nombre.txt\n");
scanf("%s", NAME);
*OUP = fopen(NAME, "w");
fprintf(*OUP, " t w\n");
}

También podría gustarte