Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Finding all roots of a group of equations

  • To: mathgroup at smc.vnet.net
  • Subject: [mg25416] Finding all roots of a group of equations
  • From: Fenghua Zhou <fzhou at nal.go.jp>
  • Date: Fri, 29 Sep 2000 01:07:14 -0400 (EDT)
  • Organization: National Aerospace Laboratory
  • Sender: owner-wri-mathgroup at wolfram.com

Dear MathGroup members,

It seems to be a quite basic question but I don't see an efficient method.

I am solving a set of simultaneous equations, numerically:
	f1[a1, a2, ..., an]=0
	f2[a1, a2, ..., an]=0
	.....
	fn[a1, a2, ..., an]=0
Where f1, f2, ... fn are polynomial expressions (to the third power)
of unknown {a1, a2, ..., an}.

Because there are many equations. The command:
NSolve[{f1==0, f2==0, ..., fn==0}, {a1, a2, ..., an}] just doesn't work.

Instead, I use the FindRoot command to solve the equations,
FindRoots[{f1==0, f2==0, ..., fn==0}, {a1, a10}, {a2, a20} ..., {an, an0}]
It find one without difficulty.

The question is, we wish to obtain all the real roots of the equations,
or be sure that beside the already knowns, there is no real roots anymore.
How can we do this efficiently? Not just change the initial points
{a10, a20, ..., an0} in FindRoot command randomly.

The equations are quite smooth. Take a simple, two-variable system for example:
-------------------------------
In[1]:=
f1 = 12 a1^2 + 23 a1 a2 + a2^2 + 2 a1 + 6.5 a2 + 13;
f2 = 2.1 a1^2 + 17 a1 a2 + 5.5 a1 + 17 a2 + 10;
NSolve[{f1 == 0, f2 == 0}, {a1, a2}]

Out[3]=
{{a2 -> 1.39919, a1 -> -1.26916}, {a2 -> 15.5573, a1 -> -1.02484},  
  {a2 -> -0.450807 + 0.0285982 I, a1 -> 0.329769 + 0.830228 I},  
  {a2 -> -0.450807 - 0.0285982 I, a1 -> 0.329769 - 0.830228 I}}

In[4]:=
FindRoot[{f1 == 0, f2 == 0}, {a1, -5}, {a2, -5}, MaxIterations -> 500]

Out[4]=
{a1 -> -1.26916, a2 -> 1.39919}
---------------------------------
How to do next?

Any suggestion is greatly appreciated.

Sept. 26


-- 
Fenghua ZHOU, Ph.D  | 7-44-1 Jindaijihigashi,Chofu,Tokyo 182,JAPAN
Research Fellow,    | Tel +81-422-40-3475,  Fax +81-422-40-3440
Aeroengine Division | Email fzhou at nal.go.jp
------------------- National Aerospace Laboratory (NAL) ----------


  • Prev by Date: Importing graphics, is this really supported?
  • Next by Date: Re: Optimizing a simple sampling function for speed
  • Previous by thread: Importing graphics, is this really supported?
  • Next by thread: LegendreP & Gauss quad bug