Matlab, iteration with Newton's method, noobs & errors

Click For Summary

Discussion Overview

The discussion revolves around the implementation of Newton's method in MATLAB for finding roots of functions. Participants explore issues related to coding errors, particularly with handling different types of inputs and function evaluations.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Homework-related

Main Points Raised

  • One participant describes their implementation of the Newton-Raphson algorithm and expresses confusion over errors encountered when using non-integer values.
  • The same participant notes that the function fails to work with a simple polynomial, raising questions about the behavior of MATLAB with different function types.
  • Another participant suggests that the issue may arise from treating f as an array rather than a function.
  • A further reply proposes modifying the code to evaluate f within the loop instead of pre-defining it outside, indicating a potential solution to the problem.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the exact nature of the errors or the best approach to resolve them, indicating ongoing uncertainty and differing perspectives on the implementation details.

Contextual Notes

There are limitations in the understanding of MATLAB's handling of functions and arrays, as well as potential misunderstandings about the requirements for function declarations in the context of the Newton-Raphson algorithm.

Waxterzz
Messages
82
Reaction score
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
 
Physics news on Phys.org
bump ? anyone ??
 
It sounds like f is set up as an array instead of a function.
 
The problem is that when you write f(x), Matlab treat this as an vector. So the solution is to write something like f=feval(...) inside the while loop (and remove the line f(x)=... and similar for df(x)
 

Similar threads

Replies
7
Views
9K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 14 ·
Replies
14
Views
4K
  • · Replies 1 ·
Replies
1
Views
9K
Replies
1
Views
6K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 1 ·
Replies
1
Views
4K
Replies
1
Views
4K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K