- #1
Waxterzz
- 82
- 0
Hi,
I have to describe the famous Newton-rapshon algorithm for finding a root of the function
this is what i came up with, i aint not familiar with MATLAB and programming at all, so this is somewhat a melt from a lot of MATLAB tutorials, I don't master the code, but what's really a challenge is understanding the errors
--------------------------------------------------------
function x = Newton(fun,dfun,x0,tol,Nmax)
x = x0;
f(x) = feval(fun,x);
df(x)= feval(dfun,x);
steps = 0;
re = tol;
myrel = 1;
while myrel > re && (steps < Nmax)
xold = x;
x = x - f(x)/df(x);
steps = steps + 1;
myrel = abs((x-xold)/x);
end;
if myrel <= re
disp( 'Zero found at' )
disp( x )
else
disp( 'Zero NOT found' )
end;
--------------------------------------------------------
when i test it, i find 2 very strange facts
fact 1: it cannot handle non-integer, if I want to test the function in the prompt with sin and cos and x0=3 , it stops on the first iteration: 3,14255...
this is the error:
attempted to acces f(3.14255); index must be a positive inter or logical
My idea: i thought MATLAB had no problems at all with any kind of number, in c++(also a big noob at that) u have to declarate everything, but not so in MATLAB yes?)
and fact2
i only tested the function with sin, cos and 3
when i test it with a simple Polynomial, let's say x²-2 for finding the value of square root of 2 it gives an error in the second line: f(x) = feval...
how can that line work with the first example and not with a simple polynomial in x,
can someone get me on track
I have to describe the famous Newton-rapshon algorithm for finding a root of the function
this is what i came up with, i aint not familiar with MATLAB and programming at all, so this is somewhat a melt from a lot of MATLAB tutorials, I don't master the code, but what's really a challenge is understanding the errors
--------------------------------------------------------
function x = Newton(fun,dfun,x0,tol,Nmax)
x = x0;
f(x) = feval(fun,x);
df(x)= feval(dfun,x);
steps = 0;
re = tol;
myrel = 1;
while myrel > re && (steps < Nmax)
xold = x;
x = x - f(x)/df(x);
steps = steps + 1;
myrel = abs((x-xold)/x);
end;
if myrel <= re
disp( 'Zero found at' )
disp( x )
else
disp( 'Zero NOT found' )
end;
--------------------------------------------------------
when i test it, i find 2 very strange facts
fact 1: it cannot handle non-integer, if I want to test the function in the prompt with sin and cos and x0=3 , it stops on the first iteration: 3,14255...
this is the error:
attempted to acces f(3.14255); index must be a positive inter or logical
My idea: i thought MATLAB had no problems at all with any kind of number, in c++(also a big noob at that) u have to declarate everything, but not so in MATLAB yes?)
and fact2
i only tested the function with sin, cos and 3
when i test it with a simple Polynomial, let's say x²-2 for finding the value of square root of 2 it gives an error in the second line: f(x) = feval...
how can that line work with the first example and not with a simple polynomial in x,
can someone get me on track