How can I code this Newton-Raphson and Secant Methods?
8 次查看(过去 30 天)
显示 更早的评论
Umut Berkcan Karahan
2020-5-10
评论: Muhammad Raihan Ekaputra Idrisatria
2020-11-2
Determine the root of the given equation (3*x*e^x)-1=0 for x ∈ [0,1] using Newton-Raphson and Secant methods. Stop calculation after seven iterations. I've coded a code but I'm not sure it is right or not...
%f is non-linear function.
%fder is derivation of f.
%x0 is initial value of iteration.
%e is tolerance of f function.
%d is first condition tolerance value.
%y is error amount.
%max is maximum iteration number.
syms x
x0 = 0;
x1 = 1;
d = 0.000001;
e = 0.00001;
max = 7;
f = @(x) 3*x*exp(x)-1;
fder = @(x) 3*(exp(x)+exp(x))*x;
for iteration = 0:max
t = fder(x0); %to check the derivation is zero or not.
if abs(t)<e
disp('Derivation value is very close to zero, algorithm stops')
break
end
x1 = x0-(f(x0)/fder(x0));
error = abs(x1-x0);
odderror = 2*error/(abs(x1)+d);
x0 = x1;
y = f(x0);
if(error<d)||(odderror<d)||(abs(y)<e)
break
end
end
disp('Wanted root value')
x1
disp('Error amount')
y
disp('Iteration number')
iteration
1 个评论
Muhammad Raihan Ekaputra Idrisatria
2020-10-29
Use this function that made by me https://www.mathworks.com/matlabcentral/fileexchange/81758-newton-raphson-secant-method
I mixed Newton-Raphson and backward euler to solve the derrivation using numeric method
采纳的回答
David Hill
2020-5-10
The basic code is as follows. You can do other checks as desired.Your code looked ok, except you don't need symbolic variables and your fder function was missing a ')'.
x=0;
f = @(x) 3*x.*exp(x)-1;
fder = @(x) 3*(exp(x)+exp(x).*x);
for k=1:7%newton method
x=x-f(x)/fder(x);
end
y=[0,1];
for k=1:7%secant method
z=y(2);
y(2)=y(2)-f(y(2))*diff(y)/diff(f(y));
y(1)=z;
end
2 个评论
Muhammad Raihan Ekaputra Idrisatria
2020-11-2
better you add an if condition, if f(x0)=0 then x=x0. To avoid a division by 0
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Symbolic Math Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!