SHARE
TWEET

Untitled

a guest Sep 19th, 2019 99 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. clear; clc;
  2.  
  3. syms x;
  4.  
  5. fn = input('Escriba la funci�n: ');
  6. h = input('Escriba el paso: ');
  7. intervalo = input('Escriba el intervalo entre corchetes, separado ",": ');
  8. x0 = input('Escriba el valor inicial de X: ');
  9. y0 = input('Escriba el valor inicial de Y: ');
  10.  
  11. fx = str2func(strcat("@(x)", string(fn)));
  12.  
  13. der = diff(str2sym(string(fn))); %Derivada
  14. fn_d = str2func(strcat("@(x)", string(der))); % Convertimos en funci�n la derivada
  15.  
  16. n = intervalo(end); %Calcular el n�mero de elementos del arreglo.
  17.  
  18. cabecera = ["x", "Y verdadero", "Y Euler", "Error relativo porcentual"];
  19.  
  20. %Pre-establecemos los datos para iniciar
  21. x_actual = x0;
  22. y_actual = y0;
  23. y_siguiente = 0;
  24.  
  25. resultados = [cabecera; string(x_actual), string(y_actual), string(y_actual), ""];
  26.  
  27. %Creamos las matrices para almacenar las evaluaciones
  28. x_vals = zeros(1, n);
  29. y_vals = zeros(1, n);
  30. ye_evals = zeros(1, n);
  31.  
  32. %Asignamos a los valores iniciales a la matriz
  33. x_vals(1) = x_actual;
  34. y_evals(1) = y_actual;
  35. ye_evals(1) = y_actual;
  36.  
  37. cont = 1;
  38. %Comenzamos la iteraci�n desde h hasta n por que 0 ya lo tenemos.
  39. for i = h:h:n
  40.    
  41.    y_eul = eul(y_actual, x_actual, h, fn_d); %Calculamos el valor con euler
  42.    eval_real = fx(i);
  43.    
  44.    % Mostrar error si no es la primer iteraci�n
  45.    if i == 0
  46.       error_porcentual = "";
  47.    else
  48.       error_porcentual = abs((eval_real - y_eul) / eval_real)*100;
  49.    end
  50.    
  51.    %Almacenamos los datos en el arreglo.
  52.    resultados = [resultados; string(i), string(eval_real), string(y_eul), string(error_porcentual) + "%"];
  53.    
  54.    x_actual = i;
  55.    y_actual = y_eul;
  56.    
  57.    y_evals(cont+1) = eval_real;
  58.    ye_evals(cont+1) = y_eul;
  59.    
  60.    cont = cont + 1;
  61. end
  62.  
  63. disp(resultados);
  64.  
  65. %Gr�fica
  66. plot([0:h:n], y_evals, [0:h:n], ye_evals);
  67.  
  68.  
  69. function valor_aproximado = eul(yi, xi, h, fn_d)
  70. valor_aproximado = yi + fn_d(xi)*h;
  71. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top