Solving a Nonlinear Equation using Newton-Raphson Method

2.208 visualizaciones (últimos 30 días)
It's required to solve that equation: f(x) = x.^3 - 0.165*x.^2 + 3.993*10.^-4 using Newton-Raphson Method with initial guess (x0 = 0.05) to 3 iterations and also, plot that function.
Please help me with the code (i have MATLAB R2010a) ... I want the code to be with steps and iterations and if possible calculate the error also, please
  4 comentarios
Rajesh
Rajesh el 10 de Dic. de 2022
to solve the given equation (x^2-1)/(x-1) taking minimum values for x and draw the stem graph and step graph

Iniciar sesión para comentar.

Respuesta aceptada

Bruno Pop-Stefanov
Bruno Pop-Stefanov el 25 de Nov. de 2013
Editada: MathWorks Support Team el 27 de Sept. de 2022
The following code implements the Newton-Raphson method for your problem:
fun = @(x)x^3 - 0.165*x^2 + 3.993e-4;
x_true = fzero(fun,[0.01 0.1],optimset("Display","iter"));
Func-count x f(x) Procedure 2 0.1 -0.0002507 initial 3 0.0644397 -1.82743e-05 interpolation 4 0.0617709 5.41455e-06 interpolation 5 0.0623809 -2.96286e-08 interpolation 6 0.0623776 -4.33628e-11 interpolation 7 0.0623776 1.0842e-17 interpolation 8 0.0623776 0 interpolation Zero found in the interval [0.01, 0.1]
x = 0.1;
x_old = 100;
iter = 0;
while abs(x_old-x) > 1e-10 && iter <= 10 % x ~= 0
x_old = x;
x = x - (x^3 - 0.165*x^2 + 3.993e-4)/(3*x^2 - 0.33*x);
iter = iter + 1;
fprintf('Iteration %d: x=%.18f, err=%.18f\n', iter, x, x_true-x);
pause(1);
end
Iteration 1: x=0.016433333333333161, err=0.045944248180416342 Iteration 2: x=0.094298416648742320, err=-0.031920835134992817 Iteration 3: x=0.042655687778369436, err=0.019721893735380067 Iteration 4: x=0.063158887832661437, err=-0.000781306318911934 Iteration 5: x=0.062375951756182137, err=0.000001629757567366 Iteration 6: x=0.062377581507153931, err=0.000000000006595571 Iteration 7: x=0.062377581513749496, err=0.000000000000000007
You can plot the function with, for example:
x = linspace(0,0.1);
f = x.^3 - 0.165*x.^2 + 3.993*10^-4;
figure;
plot(x,f,'b',x,zeros(size(x)),'r--')
grid on
  6 comentarios
Cesar Castro
Cesar Castro el 21 de Sept. de 2021
It did not work , May you help me, please? My F = x(1)^4+x(2)^4+2*x(1)^2*x(2)^2-4*x(1)+3 I Know the root is 1.
I do not know why, it did not work. Thanks in advance.

Iniciar sesión para comentar.

Más respuestas (3)

Dhruv Bhavsar
Dhruv Bhavsar el 28 de Ag. de 2020
  1. Solve the system of non-linear equations.
x^2 + y^2 = 2z
x^2 + z^2 =1/3
x^2 + y^2 + z^2 = 1
using Newton’s method having tolerance = 10^(−5) and maximum iterations upto 20
%Function NewtonRaphson_nl() is given below.
fn = @(v) [v(1)^2+v(2)^2-2*v(3) ; v(1)^2+v(3)^2-(1/3);v(1)^2+v(2)^2+v(3)^2-1];
jacob_fn = @(v) [2*v(1) 2*v(2) -2 ; 2*v(1) 0 2*v(3) ; 2*v(1) 2*v(2) 2*v(3)];
error = 10^-5 ;
v = [1 ;1 ;0.1] ;
no_itr = 20 ;
[point,no_itr,error_out]=NewtonRaphson_nl(v,fn,jacob_fn,no_itr,error)
NewtonRaphson_nl_print(v,fn,jacob_fn,no_itr,error);
# OUTPUT.
Functions Below.
function [v1 , no_itr, norm1] = NewtonRaphson_nl(v,fn,jacob_fn,no_itr,error)
% nargin = no. of input arguments
if nargin <5 , no_itr = 20 ; end
if nargin <4 , error = 10^-5;no_itr = 20 ; end
if nargin <3 ,no_itr = 20;error = 10^-5; v = [1;1;1]; end
v1 = v;
fnv1 = feval(fn,v1);
i = 0;
while true
jacob_fnv1 = feval(jacob_fn,v1);
H = jacob_fnv1\fnv1;
v1 = v1 - H;
fnv1 = feval(fn,v1);
i = i + 1 ;
norm1 = norm(fnv1);
if i > no_itr && norm1 < error, break , end
%if norm(fnv1) < error , break , end
end
end
function [v1 , no_itr, norm1] = NewtonRaphson_nl_print(v,fn,jacob_fn,no_itr,error)
v1 = v;
fnv1 = feval(fn,v1);
i = 0;
fprintf(' Iteration| x | y | z | Error | \n')
while true
norm1 = norm(fnv1);
fprintf('%10d |%10.4f| %10.4f | %10.4f| %10.4d |\n',i,v1(1),v1(2),v1(3),norm1)
jacob_fnv1 = feval(jacob_fn,v1);
H = jacob_fnv1\fnv1;
v1 = v1 - H;
fnv1 = feval(fn,v1);
i = i + 1 ;
norm1 = norm(fnv1);
if i > no_itr && norm1 < error, break , end
%if norm(fnv1) < error , break , end
end
end
This covers answer to your question and also queries for some comments I read in this thread.
  4 comentarios
Munish Jindal
Munish Jindal el 13 de Feb. de 2023
Editada: Munish Jindal el 13 de Feb. de 2023
Got this error.
unrecognized function or variable 'NewtonRaphson_nl_print'.
Walter Roberson
Walter Roberson el 13 de Feb. de 2023
the code is given above starting at the line
function [v1 , no_itr, norm1] = NewtonRaphson_nl_print(v,fn,jacob_fn,no_itr,error)

Iniciar sesión para comentar.


Pourya Alinezhad
Pourya Alinezhad el 25 de Nov. de 2013
you can use the following line of code;
x = fzero(@(x)x.^3 - 0.165*x.^2 + 3.993*10.^-4,0.05)

Mohamed Hakim
Mohamed Hakim el 21 de Mayo de 2021
Editada: Walter Roberson el 12 de Feb. de 2022
function NewtonRaphsonMethod
%Implmentaton of Newton-Raphson method to determine a solution.
%to approximate solution to x = cos(x), we let f(x) = x - cos(x)
i = 1;
p0 = 0.5*pi; %initial conditions
N = 100; %maximum number of iterations
error = 0.0001; %precision required
syms 'x'
f(x) = x - cos(x); %function we are solving
df = diff(f); %differential of f(x)
while i <= N
p = p0 - (f(p0)/df(p0)); %Newton-Raphson method
if (abs(p - p0)/abs(p)) < error %stopping criterion when difference between iterations is below tolerance
fprintf('Solution is %f \n', double(p))
return
end
i = i + 1;
p0 = p; %update p0
end
fprintf('Solution did not coverge within %d iterations at a required precision of %d \n', N, error) %error for non-convergence within N iterations
end

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by