Comp Sci C++ programming, Newtons Method.

AI Thread Summary
The discussion revolves around implementing Newton's method in C++ to find a root of the function eff(x) = x²e^(-x) - 2. The user struggles with understanding loops and the proper implementation of the algorithm, particularly the return statement and variable definitions. Key points include the correct formula for Newton's method, which is y = x - f(x)/f'(x), and the importance of defining variables like x_o. Participants emphasize breaking down the problem step by step and using the provided functions eff and effPrime correctly. Overall, the conversation highlights the need for a clear understanding of both the algorithm and C++ syntax to successfully complete the assignment.
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 occured.



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.
 
First step, can you describe Newton's method of successive approximation?

You can't write a program if you don't know the algorithm.
 
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.
 

Similar threads

Replies
2
Views
3K
Replies
1
Views
2K
Replies
5
Views
2K
Replies
15
Views
3K
Replies
1
Views
2K
Replies
1
Views
2K
Replies
23
Views
3K
Back
Top