954,499 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

newton's method with complex coefficients

hi.. this is part of an assignment.. but any help will be greatly appreciated

F(0) = 0
where F(z) is a linear polynomial of order n with complex coefficients

F(z) = A(n)Z^n + A(n-1)Z^n-1 + ... + A(1) Z + A(0) = 0

this hasent formatted very well.. it's A(subscript n-1) and then Z to the power n-1.

I need to solve the comlplex roots Z(1),Z(2),Z(3)...Z(n)

i have already written a complex solver for simple functions eg x^2 = cos(x)-tan(x) and x^x. and i have written a complex quadratic solver. but i am unsure how to implement this function.
i know that when n=2 my quadratic solver should be able to solve the two remaining roots.
does anyone have any advice?

ICTGUY
Newbie Poster
3 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

I, personally, don't know...
...but I did find this .

thines01
Postaholic
Team Colleague
2,424 posts since Oct 2009
Reputation Points: 445
Solved Threads: 402
 
I, personally, don't know... ...but I did find this .

i had found that myself before.. but alas it is of no help to me. my newtons solver works pertectly and i use analytical differentiation... but i cant see how i can transform the series into a form that i can use

ICTGUY
Newbie Poster
3 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

Newton's Method works exactly the same for an equation with complex coefficients as it does for an equation with only real coefficients. The only difference is the extra bit of algebra involved for manipulating complex numbers.

For example, dividing real numbers is as simple as doing a/b.

However, dividing complex numbers involves a little more:

z1 = x + iy
z2 = u + iv

z1/z2 = (x + iy)/(u + iv)

= {(x + iy)/(u + iv)}*{(u - iv)/(u - iv)}

= {(x + iy)*(u - iv)}/{u^2 + v^2)}

It is a bit more hassle, but doable.

One suggestion I can make:
the starting point of the algorithm MUST BE OFF THE REAL AXIS. If you start the algorithm with an initial guess for the zero of the equation as a real-only number, Newton's Method will never leave the real axis. If the root is complex, it will never be found. So always ensure that your initial guess for a root is complex.

DavidB
Posting Whiz in Training
213 posts since Jul 2006
Reputation Points: 48
Solved Threads: 10
 

Newton's Method works exactly the same for an equation with complex coefficients as it does for an equation with only real coefficients. The only difference is the extra bit of algebra involved for manipulating complex numbers.

For example, dividing real numbers is as simple as doing a/b.

However, dividing complex numbers involves a little more:

z1 = x + iy z2 = u + iv

z1/z2 = (x + iy)/(u + iv)

= {(x + iy)/(u + iv)}*{(u - iv)/(u - iv)}

= {(x + iy)*(u - iv)}/{u^2 + v^2)}

It is a bit more hassle, but doable.

One suggestion I can make: the starting point of the algorithm MUST BE OFF THE REAL AXIS. If you start the algorithm with an initial guess for the zero of the equation as a real-only number, Newton's Method will never leave the real axis. If the root is complex, it will never be found. So always ensure that your initial guess for a root is complex.


this is the gerenal terms of my basic complex newton. the complex division and addtion are simple... i am still doing maths. but the complex library has all this taken care of anyway. this example solves x^x = c where c is enterd from the keyboard. it works fine, xnew has an inital starting value of (2,0). its the function f (that is f(x)) that is more difficult. so far im just summating the series and (trying to) store the coefficients in a septerate array so they can be passed into my complex quadratic solver. (thats for when n=2, i.e ax^2 + bx + c ) where a,b,c are complexcomplex<double> newton(complex<double> xnew,complex<double> c)
{

int s=0;
double err=1.0;

while(err > ERROR)
{


err=abs(f(xnew,c)/f1(xnew,c)); //err=abs(err);

xnew = xnew-f(xnew,c)/f1(xnew,c);

s++;
}
cout <<"iterations: " <<s<<endl;
return(xnew);

}
complex<double> f(complex<double> x, complex<double> c)
{
return x*log(x)-log(c);/// example enter c = 27 return x= 3
// when this becomes 0 interceptin x axis = value xnew
}

complex<double> f1(complex<double> x,complex<double> c)
{

return (f(x+0.05,c)- f(x-0.05,c))/0.1;

}

ICTGUY
Newbie Poster
3 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: