Guest User

Untitled

a guest
Sep 19th, 2019
115
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