Understanding Newton's Method in C++

Click For Summary
SUMMARY

The discussion focuses on troubleshooting a C++ implementation of Newton's Method for finding roots of the function defined by fun1 and fun2. The original code fails to loop correctly due to an improper condition in the do-while loop. The solution involves maintaining two variables for iterations and checking the difference between them to determine convergence. The correct mathematical formulation for fun1 is confirmed to be x^3 + 4*x^2 - x - 1, addressing a common misunderstanding regarding the function definitions.

PREREQUISITES
  • Understanding of Newton's Method for root finding
  • Proficiency in C++ programming
  • Familiarity with function definitions and mathematical expressions
  • Knowledge of convergence criteria in iterative methods
NEXT STEPS
  • Implement and test Newton's Method in C++ with proper convergence checks
  • Explore numerical methods for root finding beyond Newton's Method
  • Learn about debugging techniques in C++ for iterative algorithms
  • Study the mathematical principles behind derivative calculations in root finding
USEFUL FOR

Students learning numerical methods, C++ developers implementing mathematical algorithms, and anyone interested in understanding iterative root-finding techniques.

Sumaya
Messages
29
Reaction score
0

Homework Statement



why the loop not looping ?

Homework Equations



fun1=x^3+4^2-x-1
fun2=3x^2+8x-1

The Attempt at a Solution



Code:
#include "stdafx.h"
#include<iostream>
using namespace std;
float fun1(float);
float fun2(float);
void main()
{
float a;
cin>>a;

if (fun2(a)>0)

do
{
	a=a-(fun1(a)/fun2(a));
	cout<<a<<endl;

	
}
	while(fun2(a)<0.001);
	


}
		 
float fun1( float a)
{
	float y;
	y=a*a*a+4*a*a-a-1;
	return y;
}
float fun2( float b)
{
	float y;
	y=3*b*b+8*b-1;
	return y;
}
 
Physics news on Phys.org
Try to trace your program watching values of variable a and values returned by fun1 and fun2. Is it doing what you hoped for, or is it doing something else?
 
Code:
while(fun2(a)<0.001);

Are you sure about this?
 
Keep two variables for iterations.
If the difference between them is < 0.001 then stop loop.

Something like this :

x1 = a - (fun1(a) / fun2(a));

do{
x0 = x1;
x1 = x0 - (fun1(x0) / fun2(x0));
d = x0 - x1;
}while(d > 0.001);
 
Also, check your (math in) function FUN2.
 
TheoMcCloskey said:
Also, check your (math in) function FUN2.
I don't see anything wrong with it.
 
I don't see anything wrong with it.

You're CORRECT - I misread OP's function F(x)! fun2 code is correct for fun1 code.
 
TheoMcCloskey said:
You're CORRECT - I misread OP's function F(x)! fun2 code is correct for fun1 code.
?

Maybe you're referring to this line in the OP, in the Relevant equations section:
sumaya said:
fun1=x^3+4^2-x-1
There's a missing x. 4^2 should be 4*x^2.
The code has the right formula, though.
 
thank u all
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
12K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 15 ·
Replies
15
Views
7K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 13 ·
Replies
13
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K