/********************************************/ /* Program Runge_Kutta_4_Orden */ /********************************************/ #include #include #include float Ecuacion( float Xe, float Ye); void Lee_datos(void); float Xo, Xf; float Xant, Yant; float Ynue; float Fx; float h; int N, i; float K1,K2,K3,K4; /* Programa Principal */ int main(void) { Lee_datos(); printf("\n==========================================================================="); printf("\n i Xi K1 K2 K3 K4 Fx Yi"); printf("\n==========================================================================="); Xant = Xo; Yant = Fx; i=0; printf("\n%3d %10.4f %10.4f",i,Xant,Fx); while (Xant < Xf ) { K1 = Ecuacion(Xant,Yant); K2 = Ecuacion(Xant+h/2,Yant+h*K1/2); K3 = Ecuacion(Xant+h/2,Yant+h*K2/2); K4 = Ecuacion(Xant+h,Yant+h*K3); Fx = (K1 + 2*K2 + 2*K3 + K4)/6; Ynue = Yant + h*Fx; Xant = Xant + h; Yant = Ynue; i+=1; printf("\n%3d%10.4f%10.4f%10.4f%10.4f%10.4f%10.4f%10.4f",i,Xant,K1,K2,K3,K4,Fx,Ynue); } printf("\n==========================================================================="); getche(); } void Lee_datos(void) { clrscr(); printf("\n Dar el Valor inicial de Xo -> "); scanf("%f",&Xo); printf("\n Valor inicial para Fx(Xo) ->"); scanf("%f",&Fx); printf("\n Dar el Valor Final de Xf -> "); scanf("%f",&Xf); printf("\n Tama¤o del incremento (h) ->"); scanf("%f",&h); } /* Calcula el valor de la Ecuacion Diferencial Ordinaria */ float Ecuacion( float Xe, float Ye) /* Problema 9.12 Pag. 322 Metodos Numericos. de Shoichiro Nakamura */ { return 1/(300*900*0.001)*( 3000-(0.8*0.0000000567*(pow(Ye,4)-pow(298,4)))-30*0.25*(Ye-298)); /* return Xe*Xe;*/ }