Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear; clc;
- syms x;
- fn = input('Escriba la funci�n: ');
- h = input('Escriba el paso: ');
- intervalo = input('Escriba el intervalo entre corchetes, separado ",": ');
- x0 = input('Escriba el valor inicial de X: ');
- y0 = input('Escriba el valor inicial de Y: ');
- fx = str2func(strcat("@(x)", string(fn)));
- der = diff(str2sym(string(fn))); %Derivada
- fn_d = str2func(strcat("@(x)", string(der))); % Convertimos en funci�n la derivada
- n = intervalo(end); %Calcular el n�mero de elementos del arreglo.
- cabecera = ["x", "Y verdadero", "Y Euler", "Error relativo porcentual"];
- %Pre-establecemos los datos para iniciar
- x_actual = x0;
- y_actual = y0;
- y_siguiente = 0;
- resultados = [cabecera; string(x_actual), string(y_actual), string(y_actual), ""];
- %Creamos las matrices para almacenar las evaluaciones
- x_vals = zeros(1, n);
- y_vals = zeros(1, n);
- ye_evals = zeros(1, n);
- %Asignamos a los valores iniciales a la matriz
- x_vals(1) = x_actual;
- y_evals(1) = y_actual;
- ye_evals(1) = y_actual;
- cont = 1;
- %Comenzamos la iteraci�n desde h hasta n por que 0 ya lo tenemos.
- for i = h:h:n
- y_eul = eul(y_actual, x_actual, h, fn_d); %Calculamos el valor con euler
- eval_real = fx(i);
- % Mostrar error si no es la primer iteraci�n
- if i == 0
- error_porcentual = "";
- else
- error_porcentual = abs((eval_real - y_eul) / eval_real)*100;
- end
- %Almacenamos los datos en el arreglo.
- resultados = [resultados; string(i), string(eval_real), string(y_eul), string(error_porcentual) + "%"];
- x_actual = i;
- y_actual = y_eul;
- y_evals(cont+1) = eval_real;
- ye_evals(cont+1) = y_eul;
- cont = cont + 1;
- end
- disp(resultados);
- %Gr�fica
- plot([0:h:n], y_evals, [0:h:n], ye_evals);
- function valor_aproximado = eul(yi, xi, h, fn_d)
- valor_aproximado = yi + fn_d(xi)*h;
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement