C++ programming, Newtons Method.

Click For Summary

Discussion Overview

The discussion revolves around implementing Newton's method in C++ to find the roots of a given function. Participants are addressing issues related to coding, specifically the correct use of return statements, variable definitions, and the algorithmic steps involved in Newton's method.

Discussion Character

  • Technical explanation
  • Homework-related
  • Debate/contested

Main Points Raised

  • One participant expresses confusion about the assignment and how to begin coding the Newton's method function.
  • Another participant points out improper use of the return statement and questions the definition of the variable "x_o".
  • A request is made for a description of Newton's method to clarify the algorithm before coding.
  • There is a discussion about the validity of using assignment expressions in return statements, with differing opinions on whether it is appropriate.
  • One participant suggests that the assignment specifies using the formula "y = x - f(x)/f'(x)", but another warns that this will lead to a compiler error due to incorrect syntax.
  • A suggestion is made to solve the problem on paper first to understand the programming steps better.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the correct implementation details, with multiple competing views on coding practices and the application of Newton's method. The discussion remains unresolved regarding the best approach to take.

Contextual Notes

There are limitations regarding the clarity of variable definitions and the correctness of the equations presented for Newton's method. Participants have not fully resolved the mathematical steps or coding syntax issues.

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.
 
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 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 15 ·
Replies
15
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 23 ·
Replies
23
Views
3K