C++ programming, Newtons Method.

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
8 replies · 5K views
Jtenbroek
Messages
2
Reaction score
0
Having a lot of trouble the my C++ course, loops especially. This is the assignment giving me trouble

The function you are to implement finds a root of the given function eff(x) using Newton's method. The given version of eff(x) implements f(x) = x2e-x-2 (where e is the base of the natual logarithm) and effPrime(x) implements its derrivative, but your code could be used to find a root of other functions by substituting different implementations of eff and effPrime. Your program should use both of the above techniques to stop iteration (i.e., it should stop when either condition is satisfied).

The function you are to implement is as follows:

double Newton(double x, double tol, int maxIt)
Finds a root of eff using Newton's method starting at x and stoping when successive approximations are within tol of each other or maxIt iterations have occurred.



These files were given;
double
eff(double x)
{
return x*x * exp(-x) - 2;
}

double
effPrime(double x)
{
return 2.0 * x * exp(-x) - x * x * exp(-x);
}





This is all I have so far, not even sure how to begin

#include "assign4.h"
#include <cmath>

double Newton(double x, double tol, int maxIt); {
return x_1 = x_o - (f(x_o) / f(x_o));

}
 
Physics news on Phys.org
You did not use the return statement properly, instead you would write

Code:
return x_o - (f(x_o) / f(x_o));

In other words, you shouldn't be returning x1 = something
just return something

EXCEPT:
I do not see the variable "x_o" defined.

Even if it was defined, this is not the correct equation for Newton's method.
 
MisterX said:
You did not use the return statement properly, instead you would write

Code:
return x_o - (f(x_o) / f(x_o));

In other words, you shouldn't be returning x1 = something
just return something
Actually, you can do it this way. In C and C++, the value of an assignment expression is the value that is stored in the variable on the left side of the assignment. I wouldn't do it this way, but it's not incorrect.


MisterX said:
EXCEPT:
I do not see the variable "x_o" defined.

Even if it was defined, this is not the correct equation for Newton's method.
 
Mark44 said:
Actually, you can do it this way. In C and C++, the value of an assignment expression is the value that is stored in the variable on the left side of the assignment. I wouldn't do it this way, but it's not incorrect.

Yes, but the OP shouldn't do it this way. The only way it would make any sense would be if one needed to set a (non-local) variable to the return value of a function every time the function was called.
 
MisterX said:
Yes, but the OP shouldn't do it this way. The only way it would make any sense would be if one needed to set a (non-local) variable to the return value of a function every time the function was called.
I agree.
 
I think this is what they suggested I use in the assignment "y = x - f(x)/f'(x),"
 
Jtenbroek said:
I think this is what they suggested I use in the assignment "y = x - f(x)/f'(x),"

This won't work. The compiler will complain about the symbol ' after f. Your header file defines two functions. Use them.
 
Try solving the problem with pencil and paper and maybe you'll see how to program it.
Do one step at a time like a computer on a separate line.