clear, clc % Algoritmo para calcular las raíces de una ecuación no-lineal % aplicando el método del Newton-Raphson: % g(x) = x - f(x)/f'(x), % donde f'(x) es la primera derivada de la función f(x) % del problema original, i.e., % encontrar las raíces de la ecuación f(x) = 0 % g = @(x) x - (2*x.^2 - 5*x + 3)/(4*x - 5); g = @(x) (3-2*x.^2)/(5-4*x); % la convergencia del método (a pesar de ser cuadrática) % depende de la proximidad del valor inicial al punto fijo de g(x) x0 = input('Introduce el valor inicial: '); tolx = input('Introduce el valor de la tolerancia de x: '); tolg = input('Introduce el valor de la tolerancia de g: '); niter = input('Introduce el numero máximo de iteraciones: '); npasos = 0; errorx = tolx +1 ; errorg = tolg +1; % gráfica de la función f(x) % definición de las componentes del vector x x = 0:0.01:1.2; % evaluación de las componentes del vector x por la función f(x) y = g(x); %fplot('(3-2*x.^2)/(5-4*x)',[0 1.2],'b-') % vector de ceros del tamaño del vector x para dibujar el eje de abcisas z = zeros(size(x)); plot(x,y) % para activar la rejilla grid on % para poder representar varias gráficas juntas sin borrar las precedentes % en caso de no hacerlo, sólo aparecerá la última grafica realizada hold on % 'r' signifca "red" y dibuja la gráfica de color rojo plot(x,z,'r') plot(z ,x,'r') plot(x,x,'g') title('g(x)=(3-2*x.^2)/(5-4*x)'); xlabel('x'); ylabel('y'); while (errorx > tolx && errorg > tolg && npasos < niter ) xnew = g(x0); errorx = abs(xnew - x0); errorg = abs(g(xnew)); x0 = xnew; npasos = npasos + 1; end if (errorx < tolx || errorg < tolg ) fprintf('Raiz= %f en la iteracion no. %d\n', xnew,npasos) fprintf('Error de x= %f\n', errorx) fprintf('Residuo = %f\n', errorg) else disp('El método no converge') end