#include <iostream> #include <cmath> using namespace std; static const double e= 2.

7182818284590452353602874; double funcion1(double x,double y) // función f a utilizarsse en el método siguiente { return (2-x)*y; } double funcion2(double x) // solución analítica a la ec diferencial { return pow(e,-(x-2)*(x-2)/2); } //al métdodo paso como parámetros el intervalo, las divisiones del mismo, la ec. dif erencial y la condición inicial (condición del extremo izquierdo del intervlao) double* Runge(double inicio,double final,int divisiones, double (*funcion)(doubl e x,double y),double condicion) //método de Runge-Kutta { double h=(final-inicio)/divisiones; // longitud de los intervalos double y[divisiones +1]; // guardo en un vector los valores de los y i´s y[0]=condicion; // condición inicial double k1,k2,k3,k4; for(int i=0;i<divisiones;i++) // fórmulas dadas en la clase { k1= funcion(inicio+i*h,y[i]); k2= funcion(inicio+i*h+h/2,y[i]+h*k1/2); k3= funcion(inicio+i*h+h/2,y[i]+h*k2/2); k4= funcion(inicio+i*h+h ,y[i]+h*k3) ; y[i+1]=y[i]+(k1+2*k2+2*k3+k4)*(h/6); } double min,max; min=pow(10,100); max=0; for(int i=1;i<divisiones+1;i++) { if(abs(y[i]-funcion2(inicio+i*h))<min) min= abs(y[i]-funcion2(inicio+i* h)); // comparo las diferencias para encontrar la mínima y máxima if(abs(y[i]-funcion2(inicio+i*h))>max) max= abs(y[i]-funcion2(inicio+i* h)); } cout << "la minima diferencia con " << divisiones << " divisiones es " << mi n << endl; cout << "la maxima diferencia con " << divisiones << " divisiones es " << ma x << endl; } int main() { Runge(2,10,10,funcion1,1); Runge(2,10,20,funcion1,1); Runge(2,10,50,funcion1,1); }