function result = aufgabe8() tolerance = 10^(-10); tolerance_mod = 10^(-12); x0 = [10;10;10]; [x, steps, residuals_unmod, jacobi_residuals_unmod] = MyNewton(x0, tolerance, false); [x_mod, steps_mod, residuals_mod, jacobi_residuals_mod] = MyNewton(x0, tolerance_mod, true); x steps figure 1; semilogy(1:length(residuals_unmod), residuals_unmod); residuals_unmod figure 2; plot(1:length(jacobi_residuals_unmod), jacobi_residuals_unmod); % x_mod % steps_mod % figure 3; % semilogy(1:length(residuals_mod), residuals_mod); % residuals_mod % figure 4; % plot(1:length(jacobi_residuals_mod), jacobi_residuals_mod); end function [result, steps, residuals, jacobi_residuals] = MyNewton(x0, tolerance, modification) x_new = x0; x = [0;0;0]; residual = 1; steps = 0; residual = 1; residuals = []; jacobi_residuals = []; while (residual > tolerance) x = x_new; [delta, jacobi_steps, jacobi_residuals_cur] = MyJacobi([0;0;0], DF(x(1), x(2), x(3)), -F(x(1), x(2), x(3)), tolerance, 5, modification); % delta = DF(x(1), x(2), x(3))\(-F(x(1), x(2), x(3))); % jacobi_steps = 0; % jacobi_residuals_cur = 0; x_new = x + delta; steps = steps + jacobi_steps; residual = norm(x_new-x); residuals = [residuals residual]; jacobi_residuals = [jacobi_residuals jacobi_residuals_cur]; end result = x_new; end function [delta, steps, residuals] = MyJacobi(x_ini, A, b, tolerance, iterations, modification) [n, m] = size(A); delta_new = x_ini; D = diag(diag(A)); L = tril(A) - D; R = triu(A) - D; delta_cur = (zeros(n))(:,1); steps = 0; residual = 1; residuals = []; while (residual > tolerance) delta_cur = delta_new; delta_new = (D^(-1)) * (b - (L+R)*delta_cur); eig((D^(-1))*(D - A)) pause steps = steps + 1; residual = norm(delta_new - delta_cur); residuals = [residuals residual]; if (modification && steps >= 5) break end end delta = delta_new; end function zeroth = little_f(x,y,z) zeroth = 10*(x^2 + y^2 + z^2) + x*y^2*z + 2*x + y - (3/4)*z; end function first = F(x,y,z) first = [2 + 20*x + (y^2)*z; 1 + 20*y + 2*x*y*z; -(3/4) + x*y^2 + 20*z]; end function second = DF(x,y,z) second = [20, 2*y*z, y^2; 2*y*z, 20 + 2*x*z, 2*x*y; y^2, 2*x*y, 20]; end