12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382 |
- Sun Aug 18 18:03:26 2002 run on Windows
- % Tests of the root finding package.
- % Author: Stanley L. Kameny (stan_kameny@rand.org)
- comment Addition for roots mod 1.95. The function multroot has been
- added to the roots package in mod 1.95. This provides the capability
- to solve a nest of n polynomials in n variables, provided that each
- polynomial either is univariate or introduces a new variable to the
- set. The solutions can be either real solutions only, or complex
- solutions. All solutions to the new examples, problems 117) and
- subsequent, are correct to all digits shown. As in the prior examples,
- root order and values should agree exactly with that given here.
- comment This test file works only with Reduce version 3.5 and later
- and contains examples all of which are solved by roots mod 1.94.
- Answers are rounded to the value given by rootacc (default = 6)
- unless higher accuracy is needed to separate roots. Format may differ
- from that given here, but root order and values should agree exactly.
- (Although the function ROOTS may obtain the roots in a different order,
- they are sorted into a standard order in mod 1.94 and later.)
- In the following, problems 20) and 82) are time consuming and
- have been commented out to speed up the test.
- The hard examples 111) through 115) almost double the test time
- but are necessary to test some logical paths.
- A new "hardest" example has been added as example 116). It is
- commented out, since it is time consuming, but it is solved by roots
- mod 1.94. The time needed to run the three commented-out examples is
- almost exactly equal to the time for the rest of the test. Users of
- fast computers can uncomment the lines marked with %**%. The three
- examples by themselves are contained in the test file rootsxtr.tst.
- When answers are produced which require precision increase for
- printing out or input of roots, roots functions cause precision
- increase to occur. If the precision is already higher than the
- default value, a message is printed out warning of the the precision
- normally needed for input of those values.$
- realroots x;
- {x=0}
- % To load roots package.
- write "This is Roots Package test ", symbolic roots!-mod$
- This is Roots Package test Mod 1.96, 30 March 1995.
- % Simple root finding.
- % 1) multiple real and imaginary roots plus two real roots.
- zz:= (x-3)**2*(100x**2+113)**2*(1000000x-10000111)*(x-1);
- 8 7 6 5
- zz := 10000000000*x - 170001110000*x + 872607770000*x - 1974219158600*x
- 4 3 2
- + 2833796550200*x - 3810512046359*x + 3119397498913*x
- - 2030292260385*x + 1149222756231
- roots zz;
- {x=1.06301*i,
- x=1.06301*i,
- x= - 1.06301*i,
- x= - 1.06301*i,
- x=3.0,
- x=3.0,
- x=1,
- x=10.0001}
- %{x=1.06301*i,x=1.06301*i,x=-1.06301*i,x=-1.06301*i,
- %x=3.0,x=3.0,x=1,x=10.0001} (rootacc caused rounding to 6 places)
- % Accuracy is increased whenever necessary to separate distinct roots.
- % 2) accuracy increase to 7 required for two roots.
- zz:=(x**2+1)*(x-2)*(1000000x-2000001);
- 4 3 2
- zz := 1000000*x - 4000001*x + 5000002*x - 4000001*x + 4000002
- roots zz;
- {x=i,
- x= - i,
- x=2.0,
- x=2.000001}
- %{x=i,x= -i,x=2.0,x=2.000001}
- % 3) accuracy increase to 8 required.
- zz:= (x-3)*(10000000x-30000001);
- 2
- zz := 10000000*x - 60000001*x + 90000003
- roots zz;
- {x=3.0,x=3.0000001}
- %{x=3.0,x=3.0000001}
- % 4) accuracy increase required here to separate repeated root from
- % simple root.
- zz := (x-3)*(1000000x-3000001)*(x-3)*(1000000x-3241234);
- 4 3 2
- zz := 2*(500000000000*x - 6120617500000*x + 28085557620617*x
- - 57256673223702*x + 43756673585553)
- roots zz;
- {x=3.0,
- x=3.0,
- x=3.000001,
- x=3.24123}
- %{x=3.0,x=3.0,x=3.000001,x=3.24123}
- % other simple examples
- % 5) five real roots with widely different spacing.
- zz:= (x-1)*(10x-11)*(x-1000)*(x-1001)*(x-100000);
- 5 4 3 2
- zz := 10*x - 1020031*x + 2013152032*x - 1005224243011*x + 2104312111000*x
- - 1101100000000
- roots zz;
- {x=1,
- x=1.1,
- x=1000.0,
- x=1001.0,
- x=1.0e+5}
- %{x=1,x=1.1,x=1000.0,x=1001.0,x=1.0E+5}
- % 6) a cluster of 5 roots in complex plane in vicinity of x=1.
- zz:= (x-1)*(10000x**2-20000x+10001)*(10000x**2-20000x+9999);
- 5 4 3 2
- zz := 100000000*x - 500000000*x + 1000000000*x - 1000000000*x + 499999999*x
- - 99999999
- roots zz;
- {x=0.99,
- x=1,
- x=1 + 0.01*i,
- x=1 - 0.01*i,
- x=1.01}
- %{x=0.99,x=1,x=1 + 0.01*i,x=1 - 0.01*i,x=1.01}
- % 7) four closely spaced real roots.
- zz := (x-1)*(100x-101)*(100x-102)*(100x-103);
- 4 3 2
- zz := 2*(500000*x - 2030000*x + 3090550*x - 2091103*x + 530553)
- roots zz;
- {x=1,
- x=1.01,
- x=1.02,
- x=1.03}
- %{x=1,x=1.01,x=1.02,x=1.03}
- % 8) five closely spaced roots, 3 real + 1 complex pair.
- zz := (x-1)*(100x-101)*(100x-102)*(100x**2-200x+101);
- 5 4 3 2
- zz := 2*(500000*x - 2515000*x + 5065100*x - 5105450*x + 2575601*x - 520251)
- roots zz;
- {x=1,
- x=1 + 0.1*i,
- x=1 - 0.1*i,
- x=1.01,
- x=1.02}
- %{x=1,x=1 + 0.1*i,x=1 - 0.1*i,x=1.01,x=1.02}
- % 9) symmetric cluster of 5 roots, 3 real + 1 complex pair.
- zz := (x-2)*(10000x**2-40000x+40001)*(10000x**2-40000x+39999);
- 5 4 3 2
- zz := 100000000*x - 1000000000*x + 4000000000*x - 8000000000*x
- + 7999999999*x - 3199999998
- roots zz;
- {x=1.99,
- x=2.0,
- x=2.0 + 0.01*i,
- x=2.0 - 0.01*i,
- x=2.01}
- %{x=1.99,x=2.0,x=2.0 + 0.01*i,x=2.0 - 0.01*i,x=2.01}
- % 10) closely spaced real and complex pair.
- ss:= (x-2)*(100000000x**2-400000000x+400000001);
- 3 2
- ss := 100000000*x - 600000000*x + 1200000001*x - 800000002
- roots ss;
- {x=2.0,x=2.0 + 0.0001*i,x=2.0 - 0.0001*i}
- %{x=2.0,x=2.0 + 0.0001*i,x=2.0 - 0.0001*i}
- % 11) Zero roots and multiple roots cause no problem.
- % Multiple roots are shown when the switch multiroot is on
- %(normally on.)
- zz:= x*(x-1)**2*(x-4)**3*(x**2+1);
- 7 6 5 4 3 2
- zz := x*(x - 14*x + 74*x - 186*x + 249*x - 236*x + 176*x - 64)
- roots zz;
- {x=0,
- x=4.0,
- x=4.0,
- x=4.0,
- x=1,
- x=1,
- x=i,
- x= - i}
- %{x=0,x=4.0,x=4.0,x=4.0,x=1,x=1,x=i,x= - i}
- % 12) nearestroot will find a single root "near" a value, real or
- % complex.
- nearestroot(zz,2i);
- {x=i}
- %{x=i}
- % More difficult examples.
- % Three examples in which root scaling is needed in the complex
- % iteration process.
- % 13) nine roots, 3 real and 3 complex pairs.
- zz:= x**9-45x-2;
- 9
- zz := x - 45*x - 2
- roots zz;
- {x= - 1.60371,
- x= - 1.13237 + 1.13805*i,
- x= - 1.13237 - 1.13805*i,
- x= - 0.0444444,
- x=0.00555357 + 1.60944*i,
- x=0.00555357 - 1.60944*i,
- x=1.14348 + 1.13804*i,
- x=1.14348 - 1.13804*i,
- x=1.61483}
- %{x= - 1.60371,x=-1.13237 + 1.13805*i,x=-1.13237 - 1.13805*i,
- % x= - 0.0444444,x=0.00555357 + 1.60944*i,x=0.00555357 - 1.60944*i,
- % x=1.14348 + 1.13804*i,x=1.14348 - 1.13804*i,x=1.61483}
- comment In the next two examples, there are complex roots with
- extremely small real parts (new capability in Mod 1.91.);
- % 14) nine roots, 1 real and 4 complex pairs.
- zz:= x**9-9999x**2-0.01;
- 9 2
- 100*x - 999900*x - 1
- zz := ------------------------
- 100
- roots zz;
- {x= - 3.3584 + 1.61732*i,
- x= - 3.3584 - 1.61732*i,
- x= - 0.829456 + 3.63408*i,
- x= - 0.829456 - 3.63408*i,
- x=5.0025e-29 + 0.00100005*i,
- x=5.0025e-29 - 0.00100005*i,
- x=2.32408 + 2.91431*i,
- x=2.32408 - 2.91431*i,
- x=3.72754}
- %{x=-3.3584 + 1.61732*i,x=-3.3584 - 1.61732*i,
- % x=-0.829456 + 3.63408*i,x=-0.829456 - 3.63408*i,
- % x=5.0025E-29 + 0.00100005*i,x=5.0025E-29 - 0.00100005*i,
- % x=2.32408 + 2.91431*i,x=2.32408 - 2.91431*i,x=3.72754}
- comment Rootacc 7 produces 7 place accuracy. Answers will print in
- bigfloat format if floating point print >6 digits is not implemented.;
- % 15) nine roots, 1 real and 4 complex pairs.
- rootacc 7;
- 7
- zz:= x**9-500x**2-0.001;
- 9 2
- 1000*x - 500000*x - 1
- zz := -------------------------
- 1000
- roots zz;
- {x= - 2.189157 + 1.054242*i,
- x= - 2.189157 - 1.054242*i,
- x= - 0.5406772 + 2.368861*i,
- x= - 0.5406772 - 2.368861*i,
- x=1.6e-26 + 0.001414214*i,
- x=1.6e-26 - 0.001414214*i,
- x=1.514944 + 1.899679*i,
- x=1.514944 - 1.899679*i,
- x=2.429781}
- %{x=-2.189157 + 1.054242*i,x=-2.189157 - 1.054242*i,
- % x=-0.5406772 + 2.368861*i,x=-0.5406772 - 2.368861*i,
- % x=1.6E-26 + 0.001414214*i,x=1.6E-26 - 0.001414214*i,
- % x=1.514944 + 1.899679*i,x=1.514944 - 1.899679*i,x=2.429781}
- % the famous Wilkinson "ill-conditioned" polynomial and its family.
- % 16) W(6) four real roots plus one complex pair.
- zz:= 10000*(for j:=1:6 product(x+j))+27x**5;
- 6 5 4 3 2
- zz := 10000*x + 210027*x + 1750000*x + 7350000*x + 16240000*x + 17640000*x
- + 7200000
- roots zz;
- {x= - 6.143833,
- x= - 4.452438 + 0.02123455*i,
- x= - 4.452438 - 0.02123455*i,
- x= - 2.950367,
- x= - 2.003647,
- x= - 0.9999775}
- %{x= - 6.143833,x=-4.452438 + 0.02123455*i,x=-4.452438 - 0.02123455*i,
- % x= - 2.950367,x= - 2.003647,x= - 0.9999775}
- % 17) W(8) 4 real roots plus 2 complex pairs.
- zz:= 1000*(for j:=1:8 product(x+j))+2x**7;
- 8 7 6 5 4 3
- zz := 2*(500*x + 18001*x + 273000*x + 2268000*x + 11224500*x + 33642000*x
- 2
- + 59062000*x + 54792000*x + 20160000)
- roots zz;
- {x= - 8.437546,
- x= - 6.494828 + 1.015417*i,
- x= - 6.494828 - 1.015417*i,
- x= - 4.295858 + 0.2815097*i,
- x= - 4.295858 - 0.2815097*i,
- x= - 2.982725,
- x= - 2.000356,
- x= - 0.9999996}
- %{x= - 8.437546,x=-6.494828 + 1.015417*i,x=-6.494828 - 1.015417*i,
- % x=-4.295858 + 0.2815097*i,x=-4.295858 - 0.2815097*i,
- % x= - 2.982725,x= - 2.000356,x= - 0.9999996}
- % 18) W(10) 6 real roots plus 2 complex pairs.
- zz:=1000*(for j:= 1:10 product (x+j))+x**9;
- 10 9 8 7 6
- zz := 1000*x + 55001*x + 1320000*x + 18150000*x + 157773000*x
- 5 4 3 2
- + 902055000*x + 3416930000*x + 8409500000*x + 12753576000*x
- + 10628640000*x + 3628800000
- roots zz;
- {x= - 10.80988,
- x= - 8.70405 + 1.691061*i,
- x= - 8.70405 - 1.691061*i,
- x= - 6.046279 + 1.134321*i,
- x= - 6.046279 - 1.134321*i,
- x= - 4.616444,
- x= - 4.075943,
- x= - 2.998063,
- x= - 2.000013,
- x= - 1}
- %{x= - 10.80988,x=-8.70405 + 1.691061*i,x=-8.70405 - 1.691061*i,
- % x=-6.046279 + 1.134321*i,x=-6.046279 - 1.134321*i,x= - 4.616444,
- % x= - 4.075943,x= - 2.998063,x= - 2.000013,x= - 1}
- % 19) W(12) 6 real roots plus 3 complex pairs.
- zz:= 10000*(for j:=1:12 product(x+j))+4x**11;
- 12 11 10 9 8
- zz := 4*(2500*x + 195001*x + 6792500*x + 139425000*x + 1873657500*x
- 7 6 5
- + 17316585000*x + 112475577500*x + 515175375000*x
- 4 3 2
- + 1643017090000*x + 3535037220000*x + 4828898880000*x
- + 3716107200000*x + 1197504000000)
- roots zz;
- {x= - 13.1895,
- x= - 11.02192 + 2.23956*i,
- x= - 11.02192 - 2.23956*i,
- x= - 7.953917 + 1.948001*i,
- x= - 7.953917 - 1.948001*i,
- x= - 5.985629 + 0.8094247*i,
- x= - 5.985629 - 0.8094247*i,
- x= - 4.880956,
- x= - 4.007117,
- x= - 2.999902,
- x= - 2.0,
- x= - 1}
- %{x= - 13.1895,x=-11.02192 + 2.23956*i,x=-11.02192 - 2.23956*i,
- % x=-7.953917 + 1.948001*i,x=-7.953917 - 1.948001*i,
- % x=-5.985629 + 0.8094247*i,x=-5.985629 - 0.8094247*i,
- % x= - 4.880956,x= - 4.007117,x= - 2.999902,x= - 2.0,x= - 1}
- % 20) W(20) 10 real roots plus 5 complex pairs. (The original problem)
- % This example is commented out, since it takes significant time without
- % being particularly difficult or checking out new paths:
- %**% zz:= x**19+10**7*for j:=1:20 product (x+j); roots zz;
- %{x= - 20.78881,x=-19.45964 + 1.874357*i,x=-19.45964 - 1.874357*i,
- % x=-16.72504 + 2.731577*i,x=-16.72504 - 2.731577*i,
- % x=-14.01105 + 2.449466*i,x=-14.01105 - 2.449466*i,
- % x=-11.82101 + 1.598621*i,x=-11.82101 - 1.598621*i,
- % x=-10.12155 + 0.6012977*i,x=-10.12155 - 0.6012977*i,
- % x= - 8.928803,x= - 8.006075,x= - 6.999746,x= - 6.000006,
- % x= - 5.0,x= - 4.0,x= - 3.0,x= - 2.0,x= - 1}
- rootacc 6;
- 6
- % 21) Finding one of a cluster of 8 roots.
- zz:= (10**16*(x-1)**8-1);
- 8 7 6
- zz := 10000000000000000*x - 80000000000000000*x + 280000000000000000*x
- 5 4 3
- - 560000000000000000*x + 700000000000000000*x - 560000000000000000*x
- 2
- + 280000000000000000*x - 80000000000000000*x + 9999999999999999
- nearestroot(zz,2);
- {x=1.01}
- %{x=1.01}
- % 22) Six real roots spaced 0.01 apart.
- c := 100;
- c := 100
- zz:= (x-1)*for i:=1:5 product (c*x-(c+i));
- 6 5 4 3
- zz := 40*(250000000*x - 1537500000*x + 3939625000*x - 5383556250*x
- 2
- + 4137919435*x - 1696170123*x + 289681938)
- roots zz;
- {x=1,
- x=1.01,
- x=1.02,
- x=1.03,
- x=1.04,
- x=1.05}
- %{x=1,x=1.01,x=1.02,x=1.03,x=1.04,x=1.05}
- % 23) Six real roots spaced 0.001 apart.
- c := 1000;
- c := 1000
- zz:= (x-1)*for i:=1:5 product (c*x-(c+i));
- 6 5 4
- zz := 40*(25000000000000*x - 150375000000000*x + 376877125000000*x
- 3 2
- - 503758505625000*x + 378762766881850*x - 151883516888703*x
- + 25377130631853)
- roots zz;
- {x=1,
- x=1.001,
- x=1.002,
- x=1.003,
- x=1.004,
- x=1.005}
- %{x=1,x=1.001,x=1.002,x=1.003,x=1.004,x=1.005}
- % 24) Five real roots spaced 0.0001 apart.
- c := 10000;
- c := 10000
- zz:= (x-1)*for i:=1:4 product (c*x-(c+i));
- 5 4 3
- zz := 8*(1250000000000000*x - 6251250000000000*x + 12505000437500000*x
- 2
- - 12507501312562500*x + 6255001312625003*x - 1251250437562503)
- roots zz;
- {x=1,
- x=1.0001,
- x=1.0002,
- x=1.0003,
- x=1.0004}
- %{x=1,x=1.0001,x=1.0002,x=1.0003,x=1.0004}
- % 25) A cluster of 9 roots, 5 real, 2 complex pairs; spacing 0.1.
- zz:= (x-1)*(10**8*(x-1)**8-1);
- 9 8 7 6
- zz := 100000000*x - 900000000*x + 3600000000*x - 8400000000*x
- 5 4 3 2
- + 12600000000*x - 12600000000*x + 8400000000*x - 3600000000*x
- + 899999999*x - 99999999
- roots zz;
- {x=0.9,
- x=0.929289 + 0.0707107*i,
- x=0.929289 - 0.0707107*i,
- x=1,
- x=1 + 0.1*i,
- x=1 - 0.1*i,
- x=1.07071 + 0.0707107*i,
- x=1.07071 - 0.0707107*i,
- x=1.1}
- %{x=0.9,x=0.929289 + 0.0707107*i,x=0.929289 - 0.0707107*i,
- % x=1,x=1 + 0.1*i,x=1 - 0.1*i,
- % x=1.07071 + 0.0707107*i,x=1.07071 - 0.0707107*i,x=1.1}
- % 26) Same, but with spacing 0.01.
- zz:= (x-1)*(10**16*(x-1)**8-1);
- 9 8 7
- zz := 10000000000000000*x - 90000000000000000*x + 360000000000000000*x
- 6 5 4
- - 840000000000000000*x + 1260000000000000000*x - 1260000000000000000*x
- 3 2
- + 840000000000000000*x - 360000000000000000*x + 89999999999999999*x
- - 9999999999999999
- roots zz;
- {x=0.99,
- x=0.992929 + 0.00707107*i,
- x=0.992929 - 0.00707107*i,
- x=1,
- x=1 + 0.01*i,
- x=1 - 0.01*i,
- x=1.00707 + 0.00707107*i,
- x=1.00707 - 0.00707107*i,
- x=1.01}
- %{x=0.99,x=0.992929 + 0.00707107*i,x=0.992929 - 0.00707107*i,
- % x=1,x=1 + 0.01*i,x=1 - 0.01*i,
- % x=1.00707 + 0.00707107*i,x=1.00707 - 0.00707107*i,x=1.01}
- % 27) Spacing reduced to 0.001.
- zz:= (x-1)*(10**24*(x-1)**8-1);
- 9 8
- zz := 1000000000000000000000000*x - 9000000000000000000000000*x
- 7 6
- + 36000000000000000000000000*x - 84000000000000000000000000*x
- 5 4
- + 126000000000000000000000000*x - 126000000000000000000000000*x
- 3 2
- + 84000000000000000000000000*x - 36000000000000000000000000*x
- + 8999999999999999999999999*x - 999999999999999999999999
- roots zz;
- {x=0.999,
- x=0.999293 + 0.000707107*i,
- x=0.999293 - 0.000707107*i,
- x=1,
- x=1 + 0.001*i,
- x=1 - 0.001*i,
- x=1.00071 + 0.000707107*i,
- x=1.00071 - 0.000707107*i,
- x=1.001}
- %{x=0.999,x=0.999293 + 0.000707107*i,x=0.999293 - 0.000707107*i,
- % x=1,x=1 + 0.001*i,x=1 - 0.001*i,
- % x=1.00071 + 0.000707107*i,x=1.00071 - 0.000707107*i,x=1.001}
- % 28) Eight roots divided into two clusters.
- zz:= (10**8*(x-1)**4-1)*(10**8*(x+1)**4-1);
- 8 6 4
- zz := 10000000000000000*x - 40000000000000000*x + 59999999800000000*x
- 2
- - 40000001200000000*x + 9999999800000001
- roots zz;
- {x= - 0.99,
- x=0.99,
- x= - 1 - 0.01*i,
- x=1 + 0.01*i,
- x= - 1 + 0.01*i,
- x=1 - 0.01*i,
- x= - 1.01,
- x=1.01}
- %{x= - 0.99,x=0.99, x=-1 - 0.01*i,x=1 + 0.01*i,
- % x=-1 + 0.01*i,x=1 - 0.01*i,x= - 1.01,x=1.01}
- % 29) A cluster of 8 roots in a different configuration.
- zz:= (10**8*(x-1)**4-1)*(10**8*(100x-102)**4-1);
- 8 7
- zz := 1000000000000000000000000*x - 8080000000000000000000000*x
- 6 5
- + 28562400000000000000000000*x - 57694432000000000000000000*x
- 4 3
- + 72836160149999999900000000*x - 58848320599199999600000000*x
- 2
- + 29716320897575999400000000*x - 8574560597551679600000000*x
- + 1082432149175678300000001
- roots zz;
- {x=0.99,
- x=1 + 0.01*i,
- x=1 - 0.01*i,
- x=1.01,
- x=1.0199,
- x=1.02 + 0.0001*i,
- x=1.02 - 0.0001*i,
- x=1.0201}
- %{x=0.99,x=1 + 0.01*i,x=1 - 0.01*i,x=1.01,
- % x=1.0199,x=1.02 + 0.0001*i,x=1.02 - 0.0001*i,x=1.0201}
- % 30) A cluster of 8 complex roots.
- zz:= ((10x-1)**4+1)*((10x+1)**4+1);
- 8 6 4 2
- zz := 4*(25000000*x - 1000000*x + 20000*x + 200*x + 1)
- roots zz;
- {x= - 0.0292893 - 0.0707107*i,
- x=0.0292893 + 0.0707107*i,
- x= - 0.0292893 + 0.0707107*i,
- x=0.0292893 - 0.0707107*i,
- x= - 0.170711 - 0.0707107*i,
- x=0.170711 + 0.0707107*i,
- x= - 0.170711 + 0.0707107*i,
- x=0.170711 - 0.0707107*i}
- %{x=-0.0292893 - 0.0707107*i,x=0.0292893 + 0.0707107*i,
- % x=-0.0292893 + 0.0707107*i,x=0.0292893 - 0.0707107*i,
- % x=-0.170711 - 0.0707107*i,x=0.170711 + 0.0707107*i,
- % x=-0.170711 + 0.0707107*i,x=0.170711 - 0.0707107*i}
- comment In these examples, accuracy increase is required to separate a
- repeated root from a simple root.;
- % 31) Using allroots;
- zz:= (x-4)*(x-3)**2*(1000000x-3000001);
- 4 3 2
- zz := 1000000*x - 13000001*x + 63000010*x - 135000033*x + 108000036
- roots zz;
- {x=3.0,
- x=3.0,
- x=3.000001,
- x=4.0}
- %{x=3.0,x=3.0,x=3.000001,x=4.0}
- % 32) Using realroots;
- realroots zz;
- {x=3.0,
- x=3.0,
- x=3.000001,
- x=4.0}
- %{x=3.0,x=3.0,x=3.000001,x=4.0}
- comment Tests of new capabilities in mod 1.87 for handling complex
- polynomials and polynomials with very small imaginary parts or very
- small real roots. A few real examples are shown, just to demonstrate
- that these still work.;
- % 33) A trivial complex case (but degrees 1 and 2 are special cases);
- zz:= x-i;
- zz := - i + x
- roots zz;
- {x=i}
- %{x=i}
- % 34) Real case.
- zz:= y-7;
- zz := y - 7
- roots zz;
- {y=7.0}
- %{y=7.0}
- % 35) Roots with small imaginary parts (new capability);
- zz := 10**16*(x**2-2x+1)+1;
- 2
- zz := 10000000000000000*x - 20000000000000000*x + 10000000000000001
- roots zz;
- {x=1 + 0.00000001*i,x=1 - 0.00000001*i}
- %{x=1 + 0.00000001*i,x=1 - 0.00000001*i}
- % 36) One real, one complex root.
- zz:=(x-9)*(x-5i-7);
- 2
- zz := - 5*i*x + 45*i + x - 16*x + 63
- roots zz;
- {x=9.0,x=7.0 + 5.0*i}
- %{x=9.0,x=7.0 + 5.0*i}
- % 37) Three real roots.
- zz:= (x-1)*(x-2)*(x-3);
- 3 2
- zz := x - 6*x + 11*x - 6
- roots zz;
- {x=1,x=2.0,x=3.0}
- %{x=1,x=2.0,x=3.0}
- % 38) 2 real + 1 imaginary root.
- zz:=(x**2-8)*(x-5i);
- 2 3
- zz := - 5*i*x + 40*i + x - 8*x
- roots zz;
- {x= - 2.82843,x=2.82843,x=5.0*i}
- %{x= - 2.82843,x=2.82843,x=5.0*i}
- % 39) 2 complex roots.
- zz:= (x-1-2i)*(x+2+3i);
- 2
- zz := i*x - 7*i + x + x + 4
- roots zz;
- {x= - 2.0 - 3.0*i,x=1 + 2.0*i}
- %{x=-2.0 - 3.0*i,x=1 + 2.0*i}
- % 40) 2 irrational complex roots.
- zz:= x**2+(3+2i)*x+7i;
- 2
- zz := 2*i*x + 7*i + x + 3*x
- roots zz;
- {x= - 3.14936 + 0.212593*i,x=0.149358 - 2.21259*i}
- %{x=-3.14936 + 0.21259*i,x=0.149358 - 2.21259*i}
- % 41) 2 complex roots of very different magnitudes with small imaginary
- % parts.
- zz:= x**2+(1000000000+12i)*x-1000000000;
- 2
- zz := 12*i*x + x + 1000000000*x - 1000000000
- roots zz;
- {x= - 1.0e+9 - 12.0*i,x=1 - 0.000000012*i}
- %{x=-1.0E+9 - 12.0*i,x=1 - 0.000000012*i}
- % 42) Multiple real and complex roots cause no difficulty, provided
- % that input is given in integer or rational form, (or if in decimal
- % fraction format, with switch rounded off or adjprec on and
- % coefficients input explicitly,) so that polynomial is stored exactly.
- zz :=(x**2-2i*x+5)**3*(x-2i)*(x-11/10)**2;
- 8 7 6 5 4
- zz := ( - 800*i*x + 1760*i*x - 6768*i*x + 12760*i*x - 25018*i*x
- 3 2 9 8
- + 39600*i*x - 46780*i*x + 55000*i*x - 30250*i + 100*x - 220*x
- 7 6 5 4 3 2
- - 779*x + 1980*x - 9989*x + 19580*x - 28269*x + 38500*x - 21175*x)
- /100
- roots zz;
- {x= - 1.44949*i,
- x= - 1.44949*i,
- x= - 1.44949*i,
- x=3.44949*i,
- x=3.44949*i,
- x=3.44949*i,
- x=1.1,
- x=1.1,
- x=2.0*i}
- %{x=-1.44949*i, x=-1.44949*i, x=-1.44949*i,
- % x=3.44949*i, x=3.44949*i, x=3.44949*i, x=1.1, x=1.1, x=2.0*i}
- % 42a) would have failed in roots Mod 1.93 and previously (bug)
- realroots zz;
- {x=1.1,x=1.1}
- %{x=1.1,x=1.1}
- % 43) 2 real, 2 complex roots.
- zz:= (x**2-4)*(x**2+3i*x+5i);
- 3 2 4 2
- zz := 3*i*x + 5*i*x - 12*i*x - 20*i + x - 4*x
- roots zz;
- {x= - 2.0,
- x=2.0,
- x= - 1.2714 + 0.466333*i,
- x=1.2714 - 3.46633*i}
- %{x= - 2.0,x=2.0,x=-1.2714 + 0.466333*i,x=1.2714 - 3.46633*i}
- % 44) 4 complex roots.
- zz:= x**4+(0.000001i)*x-16;
- 4
- i*x + 1000000*x - 16000000
- zz := -----------------------------
- 1000000
- roots zz;
- {x= - 2.0 - 0.0000000625*i,
- x= - 2.0*i,
- x=2.0*i,
- x=2.0 - 0.0000000625*i}
- %{x=-2.0 - 0.0000000625*i,x=-2.0*i,x=2.0*i,x=2.0 - 0.0000000625*i}
- % 45) 2 real, 2 complex roots.
- zz:= (x**2-4)*(x**2+2i*x+8);
- 3 4 2
- zz := 2*i*x - 8*i*x + x + 4*x - 32
- roots zz;
- {x= - 2.0,
- x=2.0,
- x= - 4.0*i,
- x=2.0*i}
- %{x= - 2.0,x=2.0,x=-4.0*i,x=2.0*i}
- % 46) Using realroots to find only real roots.
- realroots zz;
- {x= - 2.0,x=2.0}
- %{x= - 2.0,x=2.0}
- % 47) Same example, applying nearestroot to find a single root.
- zz:= (x**2-4)*(x**2+2i*x+8);
- 3 4 2
- zz := 2*i*x - 8*i*x + x + 4*x - 32
- nearestroot(zz,1);
- {x=2.0}
- %{x=2.0}
- % 48) Same example, but focusing on imaginary point.
- nearestroot(zz,i);
- {x=2.0*i}
- %{x=2.0*i}
- % 49) The seed parameter can be complex also.
- nearestroot(zz,1+i);
- {x=2.0*i}
- %{x=2.0*i}
- % 50) One more nearestroot example. Nearest root to real point may be
- % complex.
- zz:= (x**2-4)*(x**2-i);
- 2 4 2
- zz := - i*x + 4*i + x - 4*x
- roots zz;
- {x= - 2.0,
- x=2.0,
- x= - 0.707107 - 0.707107*i,
- x=0.707107 + 0.707107*i}
- %{x= - 2.0,x=2.0,x=-0.707107 - 0.707107*i,x=0.707107 + 0.707107*i}
- nearestroot (zz,1);
- {x=0.707107 + 0.707107*i}
- %{X=0.707107 + 0.707107*i}
- % 51) 1 real root plus 5 complex roots.
- zz:=(x**3-3i*x**2-5x+9)*(x**3-8);
- 5 2 6 4 3
- zz := - 3*i*x + 24*i*x + x - 5*x + x + 40*x - 72
- roots zz;
- {x= - 1 + 1.73205*i,
- x= - 1 - 1.73205*i,
- x=2.0,
- x= - 2.41613 + 1.19385*i,
- x=0.981383 - 0.646597*i,
- x=1.43475 + 2.45274*i}
- %{x=-1 + 1.73205*i,x=-1 - 1.73205*i,x=2.0,
- % x=-2.41613 + 1.19385*i,x=0.981383 - 0.646597*i,x=1.43475 + 2.45274*i}
- nearestroot(zz,1);
- {x=0.981383 + 0.646597*i}
- %{x=0.981383 - 0.646597*i}
- % 52) roots can be computed to any accuracy desired, eg. (note that the
- % imaginary part of the second root is truncated because of its size,
- % and that the imaginary part of a complex root is never polished away,
- % even if it is smaller than the accuracy would require.)
- zz := x**3+10**(-20)*i*x**2+8;
- 2 3
- i*x + 100000000000000000000*x + 800000000000000000000
- zz := ---------------------------------------------------------
- 100000000000000000000
- rootacc 12;
- 12
- roots zz;
- {x= - 2.0 - 3.33333333333e-21*i,x=1 - 1.73205080757*i,x=1 + 1.73205080757*i}
- rootacc 6;
- 6
- %{x=-2.0 - 3.33333333333E-21*i,x=1 - 1.73205080757*i,
- % x=1 + 1.73205080757*i}
- % 53) Precision of 12 required to find small imaginary root,
- % but standard accuracy can be used.
- zz := x**2+123456789i*x+1;
- 2
- zz := 123456789*i*x + x + 1
- roots zz;
- {x= - 1.23457e+8*i,x=0.0000000081*i}
- %{x=-1.23457E+8*i,x=0.0000000081*i}
- % 54) Small real root is found with root 10*18 times larger(new).
- zz := (x+1)*(x**2+123456789*x+1);
- 3 2
- zz := x + 123456790*x + 123456790*x + 1
- roots zz;
- {x= - 1.23457e+8,x= - 1,x= - 0.0000000081}
- %{x= - 1.23457E+8,x= - 1,x= - 0.0000000081}
- % 55) 2 complex, 3 real irrational roots.
- ss := (45*x**2+(-10i+12)*x-10i)*(x**3-5x**2+1);
- 4 3 2 5 4 3
- ss := - 10*i*x + 40*i*x + 50*i*x - 10*i*x - 10*i + 45*x - 213*x - 60*x
- 2
- + 45*x + 12*x
- roots ss;
- {x= - 0.429174,
- x=0.469832,
- x=4.95934,
- x= - 0.448056 - 0.19486*i,
- x=0.18139 + 0.417083*i}
- %{x= - 0.429174,x=0.469832,x=4.95934,
- % x=-0.448056 - 0.19486*i,x=0.18139 + 0.417083*i}
- % 56) Complex polynomial with floating coefficients.
- zz := x**2+1.2i*x+2.3i+6.7;
- 2
- 12*i*x + 23*i + 10*x + 67
- zz := ----------------------------
- 10
- roots zz;
- {x= - 0.427317 + 2.09121*i,x=0.427317 - 3.29121*i}
- %{x=-0.427317 + 2.09121*i,x=0.427317 - 3.29121*i}
- % 56a) multiple roots will be found if coefficients read in exactly.
- % Exact read-in will occur unless dmode is rounded or complex-rounded.
- zz := x**3 + (1.09 - 2.4*i)*x**2 + (-1.44 - 2.616*i)*x + -1.5696;
- 2 3 2
- - 6000*i*x - 6540*i*x + 2500*x + 2725*x - 3600*x - 3924
- zz := -------------------------------------------------------------
- 2500
- roots zz;
- {x=1.2*i,x=1.2*i,x= - 1.09}
- %{x=1.2*i,x=1.2*i,x= - 1.09}
- % 57) Realroots, isolater and rlrootno accept 1, 2 or 3 arguments: (new)
- zz:= for j:=-1:3 product (x-j);
- 4 3 2
- zz := x*(x - 5*x + 5*x + 5*x - 6)
- rlrootno zz;
- 5
- % 5
- realroots zz;
- {x=0,
- x= - 1,
- x=1,
- x=2.0,
- x=3.0}
- %{x=0,x= -1,x=1,x=2.0,x=3.0}
- rlrootno(zz,positive);
- 3
- %positive selects positive, excluding 0.
- % 3
- rlrootno(zz,negative);
- 1
- %negative selects negative, excluding 0.
- % 1
- realroots(zz,positive);
- {x=1,x=2.0,x=3.0}
- %{x=1,x=2.0,x=3.0}
- rlrootno(zz,-1.5,2);
- 4
- %the format with 3 arguments selects a range.
- % 4
- realroots(zz,-1.5,2);
- {x=0,x= - 1,x=1,x=2.0}
- %the range is inclusive, except that:
- %{x=0,x= - 1,x=1,x=2.0}
- % A specific limit b may be excluded by using exclude b. Also, the
- % limits infinity and -infinity can be specified.
- realroots(zz,exclude 0,infinity);
- {x=1,x=2.0,x=3.0}
- % equivalent to realroots(zz,positive).
- %{x=1,x=2.0,x=3.0}
- rlrootno(zz,-infinity,exclude 0);
- 1
- % equivalent to rlrootno(zz,negative).
- % 1
- rlrootno(zz,-infinity,0);
- 2
- % 2
- rlrootno(zz,infinity,-infinity);
- 5
- %equivalent to rlrootno zz; (order of limits does not matter.)
- % 5
- realroots(zz,1,infinity);
- {x=1,x=2.0,x=3.0}
- % finds all real roots >= 1.
- %{x=1,x=2.0,x=3.0}
- realroots(zz,1,positive);
- {x=2.0,x=3.0}
- % finds all real roots > 1.
- %{x=2.0,x=3.0}
- % 57a) Bug corrected in mod 1.94. (handling of rational limits)
- zz := (x-1/3)*(x-1/5)*(x-1/7)*(x-1/11);
- 4 3 2
- 1155*x - 886*x + 236*x - 26*x + 1
- zz := --------------------------------------
- 1155
- realroots(zz,1/11,exclude(1/3));
- {x=0.0909091,x=0.142857,x=0.2}
- %{x=0.0909091,x=0.142857,x=0.2}
- realroots(zz,exclude(1/11),1/3);
- {x=0.142857,x=0.2,x=0.333333}
- %{x=0.142857,x=0.2,x=0.333333}
- % New capabilities added in mod 1.88.
- % 58) 3 complex roots, with two separated by very small real difference.
- zz :=(x+i)*(x+10**8i)*(x+10**8i+1);
- 2 3 2
- zz := 200000001*i*x + 100000001*i*x - 10000000000000000*i + x + x
- - 10000000200000000*x - 100000000
- roots zz;
- {x= - 1 - 1.0e+8*i,x= - 1.0e+8*i,x= - i}
- %{x=-1 - 1.0E+8*i,x=-1.0E+8*i,x= - i}
- % 59) Real polynomial with two complex roots separated by very small
- % imaginary part.
- zz:= (10**14x+123456789000000+i)*(10**14x+123456789000000-i);
- 2
- zz := 10000000000000000000000000000*x + 24691357800000000000000000000*x
- + 15241578750190521000000000001
- roots zz;
- {x= - 1.23457 + 1.0e-14*i,x= - 1.23457 - 1.0e-14*i}
- %{x=-1.23457 + 1.0E-14*i,x=-1.23457 - 1.0E-14*i}
- % 60) Real polynomial with two roots extremely close together.
- zz:= (x+2)*(10**10x+12345678901)*(10**10x+12345678900);
- 3 2
- zz := 100*(1000000000000000000*x + 4469135780100000000*x
- + 6462429435342508889*x + 3048315750285017778)
- roots zz;
- {x= - 2.0,x= - 1.2345678901,x= - 1.23456789}
- %{x= - 2.0,x= - 1.2345678901,x= - 1.23456789}
- % 61) Real polynomial with multiple root extremely close to simple root.
- zz:= (x-12345678/10000000)*(x-12345679/10000000)**2;
- 3 2
- zz := (500000000000000000000*x - 1851851800000000000000*x
- + 2286236726108825000000*x - 940838132549050755399)/500000000000000000\
- 000
- roots zz;
- {x=1.2345679,x=1.2345679,x=1.2345678}
- %{x=1.2345679,x=1.2345679,x=1.2345678}
- % 62) Similar problem using realroots.
- zz:=(x-2**30/10**8)**2*(x-(2**30+1)/10**8);
- 3 2
- zz := (610351562500000000*x - 19660800006103515625*x + 211106232664064000000*x
- - 755578637962830675968)/610351562500000000
- realroots zz;
- {x=10.73741824,x=10.73741824,x=10.73741825}
- %{x=10.73741824,x=10.73741824,x=10.73741825}
- % 63) Three complex roots with small real separation between two.
- zz:= (x-i)*(x-1-10**8i)*(x-2-10**8i);
- 2 3 2
- zz := - 200000001*i*x + 300000003*i*x + 9999999999999998*i + x - 3*x
- - 10000000199999998*x + 300000000
- roots zz;
- {x=i,x=1 + 1.0e+8*i,x=2.0 + 1.0e+8*i}
- %{x=i,x=1 + 1.0E+8*i,x=2.0 + 1.0E+8*i}
- % 64) Use of nearestroot to isolate one of the close roots.
- nearestroot(zz,10**8i+99/100);
- {x=1 + 1.0e+8*i}
- %{x=1 + 1.0E+8*i}
- % 65) Slightly more complicated example with close complex roots.
- zz:= (x-i)*(10**8x-1234-10**12i)*(10**8x-1233-10**12i);
- 2
- zz := 2*( - 100005000000000000000*i*x + 1233623350000000*i*x
- 3 2
- + 499999999999999999239239*i + 5000000000000000*x - 123350000000*x
- - 500099999999999999239239*x + 1233500000000000)
- roots zz;
- {x=i,x=0.00001233 + 10000.0*i,x=0.00001234 + 10000.0*i}
- %{x=i,x=0.00001233 + 10000.0*i,x=0.00001234 + 10000.0*i}
- % 66) Four closely spaced real roots with varying spacings.
- zz:= (x-1+1/10**7)*(x-1+1/10**8)*(x-1)*(x-1-1/10**7);
- 4 3
- zz := (10000000000000000000000*x - 39999999900000000000000*x
- 2
- + 59999999699999900000000*x - 39999999699999800000001*x
- + 9999999899999900000001)/10000000000000000000000
- roots zz;
- {x=0.9999999,
- x=0.99999999,
- x=1,
- x=1.0000001}
- %{x=0.9999999,x=0.99999999,x=1,x=1.0000001}
- % 67) Complex pair plus two close real roots.
- zz:= (x**2+1)*(x-12345678/10000000)*(x-12345679/10000000);
- 4 3 2
- zz := (50000000000000*x - 123456785000000*x + 126207888812681*x
- - 123456785000000*x + 76207888812681)/50000000000000
- roots zz;
- {x=i,
- x= - i,
- x=1.2345678,
- x=1.2345679}
- %{x=i,x= - i,x=1.2345678,x=1.2345679}
- % 68) Same problem using realroots to find only real roots.
- realroots zz;
- {x=1.2345678,x=1.2345679}
- %{x=1.2345678,x=1.2345679}
- % The switch ratroot causes output to be given in rational form.
- % 69) Two complex roots with output in rational form.
- on ratroot,complex;
- zz:=x**2-(5i+1)*x+1;
- 2
- zz := x - (1 + 5*i)*x + 1
- sss:= roots zz;
- 346859 - 1863580*i 482657 + 2593180*i
- sss := {x=--------------------,x=--------------------}
- 10000000 500000
-
- % 346859 - 1863580*i 482657 + 2593180*i
- %sss := {x=--------------------,x=--------------------}
- % 10000000 500000
- % With roots in rational form, mkpoly can be used to reconstruct a
- % polynomial.
- zz1 := mkpoly sss;
- 2
- zz1 := 5000000000000*x - (4999999500000 + 25000010000000*i)*x
- + 5000012308763 - 2110440*i
- % 2
- %zz1 := 5000000000000*x - (4999999500000 + 25000010000000*i)*x
- %
- % + 5000012308763 - 2110440*i
- % Finding the roots of the new polynomial zz1.
- rr:= roots zz1;
- 346859 - 1863580*i 482657 + 2593180*i
- rr := {x=--------------------,x=--------------------}
- 10000000 500000
-
- % 346859 - 1863580*i 482657 + 2593180*i
- %rr := {x=--------------------,x=--------------------}
- % 10000000 500000
- % The roots are stable to the extent that rr=ss, although zz1 and
- % zz may differ.
- zz1 - zz;
- 2
- 4999999999999*x - (4999999499999 + 25000009999995*i)*x
- + 5000012308762 - 2110440*i
- % 2
- %4999999999999*x - (4999999499999 + 25000009999995*i)*x
- %
- % + 5000012308762 - 2110440*i
- % 70) Same type of problem in which roots are found exactly.
- zz:=(x-10**8+i)*(x-10**8-i)*(x-10**8+3i/2)*(x-i);
- 4 3 2
- zz := (2*x - (600000000 - i)*x + 60000000000000005*x
- - (2000000000000000800000000 + 29999999999999999*i)*x
- + 30000000000000003 + 2000000000000000200000000*i)/2
- rr := roots zz;
- rr := {x=100000000 + i,
- x=100000000 - i,
- x=i,
- 200000000 - 3*i
- x=-----------------}
- 2
- % 4 3 2
- %zz := (2*x - (600000000 - i)*x + 60000000000000005*x
- %
- % - (2000000000000000800000000 + 29999999999999999*i)*x
- %
- % + (30000000000000003 + 2000000000000000200000000*i))/2
- %rr := {x=100000000 + i,x=100000000 - i,x=i,
- %
- % 200000000 - 3*i
- % x=-----------------}
- % 2
- % Reconstructing a polynomial from the roots.
- ss := mkpoly rr;
- 4 3 2
- ss := 2*x - (600000000 - i)*x + 60000000000000005*x
- - (2000000000000000800000000 + 29999999999999999*i)*x + 30000000000000003
- + 2000000000000000200000000*i
- % 4 3 2
- %ss := 2*x - (600000000 - i)*x + 60000000000000005*x
- %
- % - (2000000000000000800000000 + 29999999999999999*i)*x
- %
- % + (30000000000000003 + 2000000000000000200000000*i)
- % In this case, the same polynomial is obtained.
- ss - num zz;
- 0
- % 0
- % 71) Finding one of the complex roots using nearestroot.
- nearestroot(zz,10**8-2i);
- 200000000 - 3*i
- {x=-----------------}
- 2
-
- % 200000000 - 3*I
- %{x=-----------------}
- % 2
- % Finding the other complex root using nearestroot.
- nearestroot(zz,10**8+2i);
- {x=100000000 + i}
- %{x=100000000 + I}
- % 72) A realroots problem which requires accuracy increase to avoid
- % confusion of two roots.
- zz:=(x+1)*(10000000x-19999999)*(1000000x-2000001)*(x-2);
- 4 3 2
- zz := 10000000000000*x - 50000009000000*x + 60000026999999*x
- + 40000000000001*x - 80000035999998
- realroots zz;
- {x= - 1,
- 19999999
- x=----------,
- 10000000
- x=2,
- 2000001
- x=---------}
- 1000000
-
- % 19999999 2000001
- % {x=-1,x=----------,x=2,x=---------}
- % 10000000 1000000
- % 73) Without the accuracy increase, this example would produce the
- % obviously incorrect answer 2.
- realroots(zz,3/2,exclude 2);
- 19999999
- {x=----------}
- 10000000
-
- % 19999999
- % {x=----------}
- % 10000000
- % Rlrootno also gives the correct answer in this case.
- rlrootno(zz,3/2,exclude 2);
- 1
- % 1
- % 74) Roots works equally well in this problem.
- rr := roots zz;
- rr := {x= - 1,
- 19999999
- x=----------,
- 10000000
- x=2,
- 2000001
- x=---------}
- 1000000
- % 19999999 2000001
- %rr := {x= - 1,x=----------,x=2,x=---------}
- % 10000000 1000000
- % 75) The function getroot is convenient for obtaining the value of a
- % root.
- rr1 := getroot(1,rr);
- rr1 := -1
- % 19999999
- % rr1 := ----------
- % 10000000
- % 76) For example, the value can be used as an argument to nearestroot.
- nearestroot(zz,rr1);
- {x= - 1}
-
- % 19999999
- % {x=----------}
- % 10000000
- comment New capabilities added to Mod 1.90 for avoiding floating point
- exceptions and exceeding iteration limits.;
- % 77) This and the next example would previously have aborted because
- %of exceeding iteration limits:
- off ratroot;
- zz := x**16 - 900x**15 -2;
- 16 15
- zz := x - 900*x - 2
- roots zz;
- {x= - 0.665423,
- x= - 0.607902 + 0.270641*i,
- x= - 0.607902 - 0.270641*i,
- x= - 0.44528 + 0.494497*i,
- x= - 0.44528 - 0.494497*i,
- x= - 0.205664 + 0.632867*i,
- x= - 0.205664 - 0.632867*i,
- x=0.069527 + 0.661817*i,
- x=0.069527 - 0.661817*i,
- x=0.332711 + 0.57633*i,
- x=0.332711 - 0.57633*i,
- x=0.538375 + 0.391176*i,
- x=0.538375 - 0.391176*i,
- x=0.650944 + 0.138369*i,
- x=0.650944 - 0.138369*i,
- x=900.0}
- %{x= - 0.665423,x=-0.607902 + 0.270641*i,x=-0.607902 - 0.270641*i,
- % x=-0.44528 + 0.494497*i, x=-0.44528 - 0.494497*i,
- % x=-0.205664 + 0.632867*i,x=-0.205664 - 0.632867*i,
- % x=0.069527 + 0.661817*i,x=0.069527 - 0.661817*i,
- % x=0.332711 + 0.57633*i,x=0.332711 - 0.57633*i,
- % x=0.538375 + 0.391176*i,x=0.538375 - 0.391176*i,
- % x=0.650944 + 0.138369*i,x=0.650944 - 0.138369*i,x=900.0}
- % 78) a still harder example.
- zz := x**30 - 900x**29 - 2;
- 30 29
- zz := x - 900*x - 2
- roots zz;
- {x= - 0.810021,
- x= - 0.791085 + 0.174125*i,
- x= - 0.791085 - 0.174125*i,
- x= - 0.735162 + 0.340111*i,
- x= - 0.735162 - 0.340111*i,
- x= - 0.644866 + 0.490195*i,
- x= - 0.644866 - 0.490195*i,
- x= - 0.524417 + 0.617362*i,
- x= - 0.524417 - 0.617362*i,
- x= - 0.379447 + 0.715665*i,
- x= - 0.379447 - 0.715665*i,
- x= - 0.216732 + 0.780507*i,
- x= - 0.216732 - 0.780507*i,
- x= - 0.04388 + 0.808856*i,
- x= - 0.04388 - 0.808856*i,
- x=0.131027 + 0.799383*i,
- x=0.131027 - 0.799383*i,
- x=0.299811 + 0.752532*i,
- x=0.299811 - 0.752532*i,
- x=0.454578 + 0.67049*i,
- x=0.454578 - 0.67049*i,
- x=0.588091 + 0.557094*i,
- x=0.588091 - 0.557094*i,
- x=0.694106 + 0.417645*i,
- x=0.694106 - 0.417645*i,
- x=0.767663 + 0.258664*i,
- x=0.767663 - 0.258664*i,
- x=0.805322 + 0.0875868*i,
- x=0.805322 - 0.0875868*i,
- x=900.0}
- %{x= - 0.810021,x=-0.791085 + 0.174125*i,x=-0.791085 - 0.174125*i,
- % x=-0.735162 + 0.340111*i,x=-0.735162 - 0.340111*i,
- % x=-0.644866 + 0.490195*i,x=-0.644866 - 0.490195*i,
- % x=-0.524417 + 0.617362*i,x=-0.524417 - 0.617362*i,
- % x=-0.379447 + 0.715665*i,x=-0.379447 - 0.715665*i,
- % x=-0.216732 + 0.780507*i,x=-0.216732 - 0.780507*i,
- % x=-0.04388 + 0.808856*i,x=-0.04388 - 0.808856*i,
- % x=0.131027 + 0.799383*i,x=0.131027 - 0.799383*i,
- % x=0.299811 + 0.752532*i,x=0.299811 - 0.752532*i,
- % x=0.454578 + 0.67049*i,x=0.454578 - 0.67049*i,
- % x=0.588091 + 0.557094*i,x=0.588091 - 0.557094*i,
- % x=0.694106 + 0.417645*i,x=0.694106 - 0.417645*i,
- % x=0.767663 + 0.258664*i,x=0.767663 - 0.258664*i,
- % x=0.805322 + 0.0875868*i,x=0.805322 - 0.0875868*i,x=900.0}
- % 79) this deceptively simple example previously caused floating point
- % overflows on some systems:
- aa := x**6 - 4*x**3 + 2;
- 6 3
- aa := x - 4*x + 2
- realroots aa;
- {x=0.836719,x=1.50579}
- %{x=0.836719,x=1.50579}
- % 80) a harder problem, which would have failed on almost all systems:
- rr := x**16 - 90000x**15 - x**2 -2;
- 16 15 2
- rr := x - 90000*x - x - 2
- realroots rr;
- {x= - 0.493299,x=90000.0}
- %{x= - 0.493299,x=90000.0}
- % 81) this example would have failed because of floating point
- % exceptions on almost all computer systems.
- rr := x**30 - 9*10**10*x**29 - 2;
- 30 29
- rr := x - 90000000000*x - 2
- realroots rr;
- {x= - 0.429188,x=9.0e+10}
- %{x= - 0.429188,x=9.0E+10}
- % 82) a test of allroot on this example.
- % This example is commented out because it takes significant time
- % without breaking new ground.
- %**% roots rr;
- %{x= - 0.429188,
- % x=-0.419154 + 0.092263*i,x=-0.419154 - 0.092263*i,
- % x=-0.389521 + 0.180211*i,x=-0.389521 - 0.180211*i,
- % x=-0.341674 + 0.259734*i,x=-0.341674 - 0.259734*i,
- % x=-0.277851 + 0.327111*i,x=-0.277851 - 0.327111*i,
- % x=-0.201035 + 0.379193*i,x=-0.201035 - 0.379193*i,
- % x=-0.11482 + 0.413544*i,x=-0.11482 - 0.413544*i,
- % x=-0.0232358 + 0.428559*i,x=-0.0232358 - 0.428559*i,
- % x=0.0694349 + 0.423534*i,x=0.0694349 - 0.423534*i,
- % x=0.158859 + 0.398706*i,x=0.158859 - 0.398706*i,
- % x=0.240855 + 0.355234*i,x=0.240855 - 0.355234*i,
- % x=0.311589 + 0.295153*i,x=0.311589 - 0.295153*i,
- % x=0.367753 + 0.22127*i,x=0.367753 - 0.22127*i,
- % x=0.406722 + 0.13704*i,x=0.406722 - 0.13704*i,
- % x=0.426672 + 0.0464034*i,x=0.426672 - 0.0464034*i,x=9.0E+10}
- % 83) test of starting point for iteration: no convergence if good
- % real starting point is not found.
- zz := x**30 -9*10**12x**29 -2;
- 30 29
- zz := x - 9000000000000*x - 2
- firstroot zz;
- {x= - 0.36617}
- %{x= - 0.36617}
- % 84) a case in which there are no real roots and good imaginary
- % starting point must be used or roots cannot be found.
- zz:= 9x**16 - x**5 +1;
- 16 5
- zz := 9*x - x + 1
- roots zz;
- {x= - 0.866594 + 0.193562*i,
- x= - 0.866594 - 0.193562*i,
- x= - 0.697397 + 0.473355*i,
- x= - 0.697397 - 0.473355*i,
- x= - 0.510014 + 0.716449*i,
- x= - 0.510014 - 0.716449*i,
- x= - 0.161318 + 0.87905*i,
- x= - 0.161318 - 0.87905*i,
- x=0.182294 + 0.828368*i,
- x=0.182294 - 0.828368*i,
- x=0.459373 + 0.737443*i,
- x=0.459373 - 0.737443*i,
- x=0.748039 + 0.494348*i,
- x=0.748039 - 0.494348*i,
- x=0.845617 + 0.142879*i,
- x=0.845617 - 0.142879*i}
- %{x=-0.866594 + 0.193562*i,x=-0.866594 - 0.193562*i,
- % x=-0.697397 + 0.473355*i,x=-0.697397 - 0.473355*i,
- % x=-0.510014 + 0.716449*i,x=-0.510014 - 0.716449*i,
- % x=-0.161318 + 0.87905*i,x=-0.161318 - 0.87905*i,
- % x=0.182294 + 0.828368*i,x=0.182294 - 0.828368*i,
- % x=0.459373 + 0.737443*i,x=0.459373 - 0.737443*i,
- % x=0.748039 + 0.494348*i,x=0.748039 - 0.494348*i,
- % x=0.845617 + 0.142879*i,x=0.845617 - 0.142879*i}
- % 85) five complex roots.
- zz := x**5 - x**3 + i;
- 5 3
- zz := x - x + i
- roots zz;
- {x= - 1.16695 - 0.217853*i,
- x= - 0.664702 + 0.636663*i,
- x= - 0.83762*i,
- x=0.664702 + 0.636663*i,
- x=1.16695 - 0.217853*i}
- %{x=-1.16695 - 0.217853*i,x=-0.664702 + 0.636663*i,x=-0.83762*i,
- % x=0.664702 + 0.636663*i,x=1.16695 - 0.217853*i}
- % Additional capabilities in Mod 1.91.
- % 86) handling of polynomial with huge or infinitesimal coefficients.
- precision reset;
- 12
- on rounded;
- *** Domain mode complex changed to complex-rounded
- precision reset;
- 12
- % so that the system will start this example in floating point. Rounded
- % is on so that the polynomial won't fill the page!
- zz:= 1.0e-500x**3+x**2+x;
- *** ROUNDBF turned on to increase accuracy
- 2
- zz := x*(1.0e-500*x + x + 1)
- roots zz;
- {x=0,x= - 1.0e+500,x= - 1}
- off rounded;
- *** Domain mode complex-rounded changed to complex
- % rounded not normally needed for roots.
- %{x=0,x= - 1.0E+500,x= - 1}
- off roundbf;
- comment Switch roundbf will have been turned on in the last example in
- most computer systems. This will inhibit the use of hardware floating
- point unless roundbf is turned off.
- Polynomials which make use of powergcd substitution and cascaded
- solutions.
- Uncomplicated cases.;
- switch powergcd;
- % introduced here to verify that same answers are
- % obtained with and without employing powergcd strategy. Roots are
- % found faster for applicable cases when !*powergcd=t (default state.)
- % 87) powergcd done at the top level.
- zz := x**12-5x**9+1;
- 12 9
- zz := x - 5*x + 1
- roots zz;
- {x= - 0.783212 + 0.276071*i,
- x=0.152522 - 0.816316*i,
- x=0.63069 + 0.540246*i,
- x= - 0.783212 - 0.276071*i,
- x=0.152522 + 0.816316*i,
- x=0.63069 - 0.540246*i,
- x= - 0.424222 + 0.734774*i,
- x= - 0.424222 - 0.734774*i,
- x=0.848444,
- x= - 0.85453 + 1.48009*i,
- x= - 0.85453 - 1.48009*i,
- x=1.70906}
- %{x=-0.783212 + 0.276071*i,x=0.152522 - 0.816316*i,
- % x=0.63069 + 0.540246*i,x=-0.783212 - 0.276071*i,
- % x=0.152522 + 0.816316*i,x=0.63069 - 0.540246*i,
- % x=-0.424222 + 0.734774*i,x=-0.424222 - 0.734774*i,x=0.848444,
- % x=-0.85453 + 1.48009*i,x=-0.85453 - 1.48009*i,x=1.70906}
- off powergcd;
- roots zz;
- {x= - 0.85453 + 1.48009*i,
- x= - 0.85453 - 1.48009*i,
- x= - 0.783212 + 0.276071*i,
- x= - 0.783212 - 0.276071*i,
- x= - 0.424222 + 0.734774*i,
- x= - 0.424222 - 0.734774*i,
- x=0.152522 + 0.816316*i,
- x=0.152522 - 0.816316*i,
- x=0.63069 + 0.540246*i,
- x=0.63069 - 0.540246*i,
- x=0.848444,
- x=1.70906}
- on powergcd;
- %{x=-0.85453 + 1.48009*i,x=-0.85453 - 1.48009*i,
- % x=-0.783212 + 0.276071*i,x=-0.783212 - 0.276071*i,
- % x=-0.424222 + 0.734774*i,x=-0.424222 - 0.734774*i,
- % x=0.152522 + 0.816316*i,x=0.152522 - 0.816316*i,
- % x=0.63069 + 0.540246*i,x=0.63069 - 0.540246*i,x=0.848444,x=1.70906}
- % 88) powergcd done after square free factoring.
- zz := (x-1)**2*zz;
- 14 13 12 11 10 9 2
- zz := x - 2*x + x - 5*x + 10*x - 5*x + x - 2*x + 1
- roots zz;
- {x=1,
- x=1,
- x= - 0.783212 + 0.276071*i,
- x=0.152522 - 0.816316*i,
- x=0.63069 + 0.540246*i,
- x= - 0.783212 - 0.276071*i,
- x=0.152522 + 0.816316*i,
- x=0.63069 - 0.540246*i,
- x= - 0.424222 + 0.734774*i,
- x= - 0.424222 - 0.734774*i,
- x=0.848444,
- x= - 0.85453 + 1.48009*i,
- x= - 0.85453 - 1.48009*i,
- x=1.70906}
- %{x=1,x=1,
- % x=-0.783212 + 0.276071*i,x=0.152522 - 0.816316*i,
- % x=0.63069 + 0.540246*i,x=-0.783212 - 0.276071*i,
- % x=0.152522 + 0.816316*i,x=0.63069 - 0.540246*i,
- % x=-0.424222 + 0.734774*i,x=-0.424222 - 0.734774*i,x=0.848444,
- % x=-0.85453 + 1.48009*i,x=-0.85453 - 1.48009*i,x=1.70906}
- off powergcd;
- roots zz;
- {x=1,
- x=1,
- x= - 0.85453 + 1.48009*i,
- x= - 0.85453 - 1.48009*i,
- x= - 0.783212 + 0.276071*i,
- x= - 0.783212 - 0.276071*i,
- x= - 0.424222 + 0.734774*i,
- x= - 0.424222 - 0.734774*i,
- x=0.152522 + 0.816316*i,
- x=0.152522 - 0.816316*i,
- x=0.63069 + 0.540246*i,
- x=0.63069 - 0.540246*i,
- x=0.848444,
- x=1.70906}
- on powergcd;
- %{x=1,x=1,
- % x=-0.85453 + 1.48009*i,x=-0.85453 - 1.48009*i,
- % x=-0.783212 + 0.276071*i,x=-0.783212 - 0.276071*i,
- % x=-0.424222 + 0.734774*i,x=-0.424222 - 0.734774*i,
- % x=0.152522 + 0.816316*i,x=0.152522 - 0.816316*i,
- % x=0.63069 + 0.540246*i,x=0.63069 - 0.540246*i,
- % x=0.848444,x=1.70906}
- % 89) powergcd done after separation into real and complex polynomial.
- zz := x**5-i*x**4+x**3-i*x**2+x-i;
- 5 4 3 2
- zz := x - i*x + x - i*x + x - i
- roots zz;
- {x= - 0.5 - 0.866025*i,
- x=0.5 + 0.866025*i,
- x= - 0.5 + 0.866025*i,
- x=0.5 - 0.866025*i,
- x=i}
- %{x=-0.5 - 0.866025*i,x=0.5 + 0.866025*i,
- % x=-0.5 + 0.866025*i,x=0.5 - 0.866025*i,x=i}
- off powergcd;
- roots zz;
- {x= - 0.5 + 0.866025*i,
- x= - 0.5 - 0.866025*i,
- x=0.5 + 0.866025*i,
- x=0.5 - 0.866025*i,
- x=i}
- on powergcd;
- %{x=-0.5 + 0.866025*i,x=-0.5 - 0.866025*i,
- % x=0.5 + 0.866025*i,x=0.5 - 0.866025*i,x=i}
- % Cases where root separation requires accuracy and/or precision
- % increase. In some examples we get excess accuracy, but it is hard
- % avoid this and still get all roots separated.
- % 90) accuracy increase required to separate close roots;
- let x=y**2;
- zz:= (x-3)*(100000000x-300000001);
- 4 2
- zz := 100000000*y - 600000001*y + 900000003
- roots zz;
- {y= - 1.732050808,
- y=1.732050808,
- y= - 1.73205081,
- y=1.73205081}
- %{y= - 1.732050808,y=1.732050808,y= - 1.73205081,y=1.73205081}
- off powergcd;
- roots zz;
- {y= - 1.73205081,
- y= - 1.732050808,
- y=1.732050808,
- y=1.73205081}
- on powergcd;
- %{y= - 1.73205081,y= - 1.732050808,y=1.732050808,y=1.73205081}
- % 91) roots to be separated are on different square free factors.
- zz:= (x-3)**2*(10000000x-30000001);
- 6 4 2
- zz := 10000000*y - 90000001*y + 270000006*y - 270000009
- roots zz;
- {y= - 1.73205081,
- y= - 1.73205081,
- y=1.73205081,
- y=1.73205081,
- y= - 1.73205084,
- y=1.73205084}
- %{y= - 1.73205081,y= - 1.73205081,y=1.73205081,y=1.73205081,
- % y= - 1.73205084,y=1.73205084}
- off powergcd;
- roots zz;
- {y= - 1.73205081,
- y= - 1.73205081,
- y=1.73205081,
- y=1.73205081,
- y= - 1.73205084,
- y=1.73205084}
- on powergcd;
- %{y= - 1.73205081,y= - 1.73205081,y=1.73205081,y=1.73205081,
- % y= - 1.73205084,y=1.73205084}
- % 91a) A new capability for nearestroot:
- nearestroot(zz,1.800000000001);
- *** precision increased to 13
- {y=1.732050836436}
- % should find the root to 13 places.
- %{y=1.732050836436}
- % 92) roots must be separated in the complex polynomial factor only.
- zz :=(y+1)*(x+10**8i)*(x+10**8i+1);
- 5 4 3 2
- zz := y + y + (1 + 200000000*i)*y + (1 + 200000000*i)*y
- - (10000000000000000 - 100000000*i)*y - (10000000000000000 - 100000000*i)
- roots zz;
- {y= - 1,
- y= - 7071.067777 + 7071.067847*i,
- y=7071.067777 - 7071.067847*i,
- y= - 7071.067812 + 7071.067812*i,
- y=7071.067812 - 7071.067812*i}
- %{y= - 1,
- % y=-7071.067777 + 7071.067847*i,y=7071.067777 - 7071.067847*i,
- % y=-7071.067812 + 7071.067812*i,y=7071.067812 - 7071.067812*i}
- % 93)
- zz := (x-2)**2*(1000000x-2000001)*(y-1);
- 7 6 5 4 3
- zz := 1000000*y - 1000000*y - 6000001*y + 6000001*y + 12000004*y
- 2
- - 12000004*y - 8000004*y + 8000004
- roots zz;
- {y= - 1.4142136,
- y= - 1.4142136,
- y=1.4142136,
- y=1.4142136,
- y= - 1.4142139,
- y=1,
- y=1.4142139}
- %{y= - 1.4142136,y= - 1.4142136,y=1.4142136,y=1.4142136,
- % y= - 1.4142139,y=1,y=1.4142139}
- % 94)
- zz := (x-2)*(10000000x-20000001);
- 4 2
- zz := 10000000*y - 40000001*y + 40000002
- roots zz;
- {y= - 1.41421356,
- y=1.41421356,
- y= - 1.4142136,
- y=1.4142136}
- %{y= - 1.41421356 ,y=1.41421356 ,y= - 1.4142136,y=1.4142136}
- % 95)
- zz := (x-3)*(10000000x-30000001);
- 4 2
- zz := 10000000*y - 60000001*y + 90000003
- roots zz;
- {y= - 1.73205081,
- y=1.73205081,
- y= - 1.73205084,
- y=1.73205084}
- %{y= - 1.73205081 ,y=1.73205081 ,y= - 1.73205084 ,y=1.73205084}
- % 96)
- zz := (x-9)**2*(1000000x-9000001);
- 6 4 2
- zz := 1000000*y - 27000001*y + 243000018*y - 729000081
- roots zz;
- {y= - 3.0,
- y= - 3.0,
- y=3.0,
- y=3.0,
- y= - 3.00000017,
- y=3.00000017}
- %{y= - 3.0,y= - 3.0,y=3.0,y=3.0,y= - 3.00000017,y=3.00000017}
- % 97)
- zz := (x-3)**2*(1000000x-3000001);
- 6 4 2
- zz := 1000000*y - 9000001*y + 27000006*y - 27000009
- roots zz;
- {y= - 1.7320508,
- y= - 1.7320508,
- y=1.7320508,
- y=1.7320508,
- y= - 1.7320511,
- y=1.7320511}
- %{y= - 1.7320508,y= - 1.7320508,y=1.7320508,y=1.7320508,
- % y= - 1.7320511,y=1.7320511}
- % 98) the accuracy of the root sqrt 5 depends upon another close root.
- % Although one of the factors is given in decimal notation, it is not
- % necessary to turn rounded on.
- rootacc 10;
- 10
- % using rootacc to specify the minumum desired accuracy.
- zz := (y^2-5)*(y-2.2360679775);
- 3 2
- 400000000*y - 894427191*y - 2000000000*y + 4472135955
- zz := ---------------------------------------------------------
- 400000000
- % in this case, adding one place to the root near sqrt 5 causes a
- % required increase of 4 places in accuracy of the root at sqrt 5.
- roots zz;
- *** precision increased to 14
- {y= - 2.236067977,y=2.2360679774998,y=2.2360679775}
- %{y= - 2.236067977,y=2.2360679774998,y=2.2360679775}
- realroots zz;
- {y= - 2.236067977,y=2.2360679774998,y=2.2360679775}
- % should get the same answer from realroots.
- %{y= - 2.2360679775,y=2.2360679774998,y=2.2360679775}
- % 99) The same thing also happens when the root near sqrt 5 is on a
- % different square-free factor.
- zz := (y^2-5)^2*(y-2.2360679775);
- 5 4 3 2
- zz := (400000000*y - 894427191*y - 4000000000*y + 8944271910*y
- + 10000000000*y - 22360679775)/400000000
- roots zz;
- {y= - 2.236067977,
- y= - 2.236067977,
- y=2.2360679774998,
- y=2.2360679774998,
- y=2.2360679775}
- %{y= - 2.236067977,y= - 2.236067977,y=2.2360679774998,
- % y=2.2360679774998,y=2.2360679775}
- realroots zz;
- {y= - 2.236067977,
- y= - 2.236067977,
- y=2.2360679774998,
- y=2.2360679774998,
- y=2.2360679775}
- % realroots handles this case also.
- %{y= - 2.236067977,y= - 2.236067977,y=2.2360679774998,y=2.2360679774998,
- % y=2.2360679775}
- % 100)
- rootacc 6;
- 6
- zz := (y-i)*(x-2)*(1000000x-2000001);
- zz :=
- 5 4 3 2
- 1000000*y - 1000000*i*y - 4000001*y + 4000001*i*y + 4000002*y - 4000002*i
- roots zz;
- {y= - 1.4142136,
- y=1.4142136,
- y= - 1.4142139,
- y=1.4142139,
- y=i}
- %{y= - 1.4142136,y=1.4142136,y= - 1.4142139,y=1.4142139,y=i}
- % 101) this example requires accuracy 15.
- zz:= (y-2)*(100000000000000y-200000000000001);
- 2
- zz := 100000000000000*y - 400000000000001*y + 400000000000002
- roots zz;
- *** precision increased to 15
- {y=2.0,y=2.00000000000001}
- %{y=2.0,y=2.00000000000001}
- % 102) still higher precision needed.
- zz:= (y-2)*(10000000000000000000y-20000000000000000001);
- 2
- zz := 10000000000000000000*y - 40000000000000000001*y + 40000000000000000002
- roots zz;
- *** precision increased to 20
- {y=2.0,y=2.0000000000000000001}
- %{y=2.0,y=2.0000000000000000001}
- % 103) increase in precision required for substituted polynomial.
- zz:= (x-2)*(10000000000x-20000000001);
- 4 2
- zz := 10000000000*y - 40000000001*y + 40000000002
- roots zz;
- {y= - 1.41421356237,
- y=1.41421356237,
- y= - 1.41421356241,
- y=1.41421356241}
- %{y= - 1.41421356237,y=1.41421356237,y= - 1.41421356241,y=1.41421356241}
- % 104) still higher precision required for substituted polynomial.
- zz:= (x-2)*(100000000000000x-200000000000001);
- 4 2
- zz := 100000000000000*y - 400000000000001*y + 400000000000002
- roots zz;
- *** input of these values may require precision >= 16
- {y= - 1.414213562373095,
- y=1.414213562373095,
- y= - 1.414213562373099,
- y=1.414213562373099}
- %{y= - 1.414213562373095,y=1.414213562373095,
- % y= - 1.414213562373099,y=1.414213562373099}
- % 105) accuracy must be increased to separate root of complex factor
- % from root of real factor.
- zz:=(9y-10)*(y-2)*(9y-10-9i/100000000);
- 3 2
- zz := (8100000000*y - (34200000000 + 81*i)*y + (46000000000 + 252*i)*y
- - (20000000000 + 180*i))/100000000
- roots zz;
- {y=1.111111111,y=2.0,y=1.111111111 + 0.00000001*i}
- %{y=1.111111111,y=2.0,y=1.111111111 + 0.00000001*i}
- % 106) realroots does the same accuracy increase for real root based
- % upon the presence of a close complex root in the same polynomial.
- % The reason for this might not be obvious unless roots is called.
- realroots zz;
- {y=1.111111111,y=2.0}
- %{y=1.111111111,y=2.0}
- % 107) realroots now uses powergcd logic whenever it is applicable.
- zz := (x-1)*(x-2)*(x-3);
- 6 4 2
- zz := y - 6*y + 11*y - 6
- realroots zz;
- {y= - 1,
- y=1,
- y= - 1.41421,
- y=1.41421,
- y= - 1.73205,
- y=1.73205}
- %{y= - 1,y=1,y= - 1.41421,y=1.41421,y= - 1.73205,y=1.73205}
- realroots(zz,exclude 1,2);
- {y=1.41421,y=1.73205}
- %{y=1.41421,y=1.73205}
- % 108) root of degree 1 polynomial factor must be evaluated at
- % precision 18 and accuracy 10 in order to separate it from a root of
- % another real factor.
- clear x;
- zz:=(9x-10)**2*(9x-10-9/100000000)*(x-2);
- 4 3 2
- zz := (72900000000*x - 388800000729*x + 756000003078*x - 640000004140*x
- + 200000001800)/100000000
- roots zz;
- {x=1.111111111,
- x=1.111111111,
- x=1.111111121,
- x=2.0}
- %{x=1.111111111,x=1.111111111,x=1.111111121,x=2.0}
- nearestroot(zz,1);
- {x=1.111111111}
- %{x=1.111111111}
- nearestroot(zz,1.5);
- {x=1.111111121}
- %{x=1.111111121}
- nearestroot(zz,1.65);
- {x=2.0}
- %{x=2.0}
- % 108a) new cability in mod 1.94.
- realroots zz;
- {x=1.111111111,
- x=1.111111111,
- x=1.111111121,
- x=2.0}
- %{x=1.111111111,x=1.111111111,x=1.111111121,x=2.0}
- % 109) in this example, precision >=40 is used and two roots need to be
- % found to accuracy 16 and two to accuracy 14.
- zz := (9x-10)*(7x-8)*(9x-10-9/10**12)*(7x-8-7/10**14);
- 4 3
- zz := (396900000000000000000000000000*x - 1789200000000400869000000000000*x
- 2
- + 3024400000001361556000000003969*x - 2272000000001541380000000008946*x
- + 640000000000581600000000005040)/100000000000000000000000000
- roots zz;
- *** input of these values may require precision >= 16
- {x=1.1111111111111,
- x=1.1111111111121,
- x=1.142857142857143,
- x=1.142857142857153}
- %{x=1.1111111111111,x=1.1111111111121,
- % x=1.142857142857143,x=1.142857142857153}
- % 110) very small real or imaginary parts of roots require high
- % precision or exact computations, or they will be lost or incorrectly
- % found.
- zz := 1000000*r**18 + 250000000000*r**4 - 1000000*r**2 + 1;
- 18 4 2
- zz := 1000000*r + 250000000000*r - 1000000*r + 1
- roots zz;
- {r=2.42978*i,
- r= - 2.42978*i,
- r= - 1.05424 - 2.18916*i,
- r=1.05424 + 2.18916*i,
- r= - 1.05424 + 2.18916*i,
- r=1.05424 - 2.18916*i,
- r= - 0.00141421 - 1.6e-26*i,
- r=0.00141421 + 1.6e-26*i,
- r= - 0.00141421 + 1.6e-26*i,
- r=0.00141421 - 1.6e-26*i,
- r= - 1.89968 - 1.51494*i,
- r=1.89968 + 1.51494*i,
- r= - 1.89968 + 1.51494*i,
- r=1.89968 - 1.51494*i,
- r= - 2.36886 - 0.540677*i,
- r=2.36886 + 0.540677*i,
- r= - 2.36886 + 0.540677*i,
- r=2.36886 - 0.540677*i}
- %{r=2.42978*i,r=-2.42978*i,
- % r=-1.05424 - 2.18916*i,r=1.05424 + 2.18916*i,
- % r=-1.05424 + 2.18916*i,r=1.05424 - 2.18916*i,
- % r=-0.00141421 - 1.6E-26*i,r=0.00141421 + 1.6E-26*i,
- % r=-0.00141421 + 1.6E-26*i,r=0.00141421 - 1.6E-26*i,
- % r=-1.89968 - 1.51494*i,r=1.89968 + 1.51494*i,
- % r=-1.89968 + 1.51494*i,r=1.89968 - 1.51494*i,
- % r=-2.36886 - 0.540677*i,r=2.36886 + 0.540677*i,
- % r=-2.36886 + 0.540677*i,r=2.36886 - 0.540677*i}
- comment These five examples are very difficult root finding problems
- for automatic root finding (not employing problem-specific
- procedures.) They require extremely high precision and high accuracy
- to separate almost multiple roots (multiplicity broken by a small high
- order perturbation.) The examples are roughly in ascending order of
- difficulty.;
- % 111) Two simple complex roots with extremely small real separation.
- c := 10^-6;
- 1
- c := ---------
- 1000000
- zz:=(x-3c^2)^2+i*c*x^7;
- zz :=
- 7 2
- 1000000000000000000*i*x + 1000000000000000000000000*x - 6000000000000*x + 9
- -------------------------------------------------------------------------------
- 1000000000000000000000000
- roots zz;
- *** precision increased to 33
- {x= - 15.0732 + 4.89759*i,
- x= - 9.31577 - 12.8221*i,
- x= - 1.2e-12 + 15.8489*i,
- x=2.99999999999999999999999999999997e-12
- + 3.3068111527572904325663335008527e-44*i,
- x=3.00000000000000000000000000000003e-12
- - 3.30681115275729043256633350085321e-44*i,
- x=9.31577 - 12.8221*i,
- x=15.0732 + 4.89759*i}
- %{x=-15.0732 + 4.89759*i,x=-9.31577 - 12.8221*i,x=-1.2E-12 + 15.8489*i,
- % x=2.99999999999999999999999999999997E-12
- % + 3.3068111527572904325663335008527E-44*i,
- % x=3.00000000000000000000000000000003E-12
- % - 3.30681115275729043256633350085321E-44*i,
- % x=9.31577 - 12.8221*i,x=15.0732 + 4.89759*i}
- % 112) Four simple complex roots in two close sets.
- c := 10^-4;
- 1
- c := -------
- 10000
- zz:=(x^2-3c^2)^2+i*c^2*x^9;
- 9 4 2
- 100000000*i*x + 10000000000000000*x - 600000000*x + 9
- zz := ----------------------------------------------------------
- 10000000000000000
- roots zz;
- *** input of these values may require precision >= 15
- {x= - 37.8622 + 12.3022*i,
- x= - 23.4002 - 32.2075*i,
- x= - 0.00017320508075689 - 2.41778234660324e-18*i,
- x= - 0.000173205080756885 + 2.4177823466027e-18*i,
- x=39.8107*i,
- x=0.000173205080756885 + 2.4177823466027e-18*i,
- x=0.00017320508075689 - 2.41778234660324e-18*i,
- x=23.4002 - 32.2075*i,
- x=37.8622 + 12.3022*i}
- %{x=-37.8622 + 12.3022*i,x=-23.4002 - 32.2075*i,
- % x=-0.00017320508075689 - 2.41778234660324E-18*i,
- % x=-0.000173205080756885 + 2.4177823466027E-18*i,
- % x=39.8107*i,
- % x=0.000173205080756885 + 2.4177823466027E-18*i,
- % x=0.00017320508075689 - 2.41778234660324E-18*i,
- % x=23.4002 - 32.2075*i,x=37.8622 + 12.3022*i}
- % 113) Same example, but with higher minimum root accuracy specified.
- rootacc 20;
- 20
- roots zz;
- {x= - 37.862241873586290526 + 12.302188128448775345*i,
- x= - 23.400152368145827118 - 32.207546656274351069*i,
- x= - 0.00017320508075689014714 - 2.417782346603239319e-18*i,
- x= - 0.00017320508075688531157 + 2.417782346602699319e-18*i,
- x=39.810717055651151449*i,
- x=0.00017320508075688531157 + 2.417782346602699319e-18*i,
- x=0.00017320508075689014714 - 2.417782346603239319e-18*i,
- x=23.400152368145827118 - 32.207546656274351069*i,
- x=37.862241873586290526 + 12.302188128448775345*i}
- %{x=-37.862241873586290526 + 12.302188128448775345*i,
- % x=-23.400152368145827118 - 32.207546656274351069*i,
- % x=-0.00017320508075689014714 - 2.417782346603239319E-18*i,
- % x=-0.00017320508075688531157 + 2.417782346602699319E-18*i,
- % x=39.810717055651151449*i,
- % x=0.00017320508075688531157 + 2.417782346602699319E-18*i,
- % x=0.00017320508075689014714 - 2.417782346603239319E-18*i,
- % x=23.400152368145827118 - 32.207546656274351069*i,
- % x=37.862241873586290526 + 12.302188128448775345*i}
- precision reset;
- 33
- % This resets precision and rootacc to nominal.
- % 114) Two extremely close real roots plus a complex pair with extremely
- % small imaginary part.
- c := 10^6;
- c := 1000000
- zz:=(c^2*x^2-3)^2+c^2*x^9;
- 9 4 2
- zz := 1000000000000*x + 1000000000000000000000000*x - 6000000000000*x + 9
- roots zz;
- *** precision increased to 22
- {x= - 251.189,
- x= - 77.6216 + 238.895*i,
- x= - 77.6216 - 238.895*i,
- x= - 0.000001732050807568877293531,
- x= - 0.000001732050807568877293524,
- x=0.00000173205 + 3.41926e-27*i,
- x=0.00000173205 - 3.41926e-27*i,
- x=203.216 + 147.645*i,
- x=203.216 - 147.645*i}
- %{x= - 251.189,x=-77.6216 + 238.895*i,x=-77.6216 - 238.895*i,
- % x= - 0.000001732050807568877293531,
- % x= - 0.000001732050807568877293524,
- % x=0.00000173205 + 3.41926E-27*i,x=0.00000173205 - 3.41926E-27*i,
- % x=203.216 + 147.645*i,x=203.216 - 147.645*i}
- % 114a) this example is a critical test for realroots as well.
- realroots zz;
- {x= - 251.189,x= - 0.000001732050807568877293531,x
- = - 0.000001732050807568877293524}
- %{x= - 251.189,x= - 0.000001732050807568877293531,
- % x= - 0.000001732050807568877293524}
- % 115) Four simple complex roots in two extremely close sets.
- c := 10^6;
- c := 1000000
- zz:=(c^2*x^2-3)^2+i*c^2*x^9;
- 9 4 2
- zz := 1000000000000*i*x + 1000000000000000000000000*x - 6000000000000*x + 9
- roots zz;
- {x= - 238.895 + 77.6216*i,
- x= - 147.645 - 203.216*i,
- x= - 0.00000173205080756887729353 - 2.417782346602969319022e-27*i,
- x= - 0.000001732050807568877293525 + 2.417782346602969318968e-27*i,
- x=251.189*i,
- x=0.000001732050807568877293525 + 2.417782346602969318968e-27*i,
- x=0.00000173205080756887729353 - 2.417782346602969319022e-27*i,
- x=147.645 - 203.216*i,
- x=238.895 + 77.6216*i}
- %{x=-238.895 + 77.6216*i,x=-147.645 - 203.216*i,
- % x=-0.00000173205080756887729353 - 2.417782346602969319022E-27*i,
- % x=-0.000001732050807568877293525 + 2.417782346602969318968E-27*i,
- % x=251.189*i,
- % x=0.000001732050807568877293525 + 2.417782346602969318968E-27*i,
- % x=0.00000173205080756887729353 - 2.417782346602969319022E-27*i,
- % x=147.645 - 203.216*i,x=238.895 + 77.6216*i}
- % 116) A new "hardest example" type. This polynomial has two sets of
- % extremely close real roots and two sets of extremely close conjugate
- % complex roots, both large and small, with the maximum accuracy and
- % precision required for the largest roots. Three restarts are
- % required, at progressively higher precision, to find all roots.
- % (to run this example, uncomment the following two lines.)
- %**% zz1:= (10^12x^2-sqrt 2)^2+x^7$ zz2:= (10^12x^2+sqrt 2)^2+x^7$
- %**% zzzz := zz1*zz2$ roots zzzz;
- %{x= - 1.00000000000000000000000000009E+8,
- % x= - 9.99999999999999999999999999906E+7,
- % x= - 0.0000011892071150027210667183,
- % x= - 0.0000011892071150027210667167,
- % x=-5.4525386633262882960501E-28 + 0.000001189207115002721066718*i,
- % x=-5.4525386633262882960501E-28 - 0.000001189207115002721066718*i,
- % x=5.4525386633262882960201E-28 + 0.000001189207115002721066717*i,
- % x=5.4525386633262882960201E-28 - 0.000001189207115002721066717*i,
- % x=0.00000118921 + 7.71105E-28*i,
- % x=0.00000118921 - 7.71105E-28*i,
- % x=4.99999999999999999999999999953E+7
- % + 8.66025403784438646763723170835E+7*i,
- % x=4.99999999999999999999999999953E+7
- % - 8.66025403784438646763723170835E+7*i,
- % x=5.00000000000000000000000000047E+7
- % + 8.66025403784438646763723170671E+7*i,
- % x=5.00000000000000000000000000047E+7
- % - 8.66025403784438646763723170671E+7*i}
- % Realroots strategy on this example is different, but determining the
- % necessary precision and accuracy is tricky.
- %**% realroots zzzz;
- %{x= - 1.00000000000000000000000000009E+8,
- % x= - 9.9999999999999999999999999991E+7,
- % x= - 0.0000011892071150027210667183,
- % x= - 0.0000011892071150027210667167}
- % 117) multroot examples. Multroot can be called directly, or it can be
- % called by giving roots or realroots a list of polynomials as argument.
- % Here, multroot is called directly. Realroots is used unless the switch
- % compxroots is on. In this example, p1 must be computed at accuracy 33
- % in order to yield an accuracy of 20 for p2.
- res := % Structure is {eq1(p1,p2),eq2(p1)}
- { - 65193331905902035840886401184447471772856493442267717*P1**13
- - 1664429561324832520726401259146912155464247056480012434*P1**12
- - 6261475374084274810766056740641579522309310708502887990*P1**11
- + 58050875148721867394302891225676265051604299348469583622*P1**10
- - 25149162547648105419319267662238682603649922079217227285*P1**9
- - 440495842372965561251919788209759089436362766115660350108*P1**8
- + 1031835865631194068430476093579502290454870220388968336688*P1**7
- - 176560168441303582471783015188457142709772508915411137856*P1**6
- - 3394297397883799767380936436924078166849454318674637153232*P1**5
- + 8572159983028240622274769676964404195355003175115163884096*P1**4
- - 11689989317682872105592244166702248132836279639925035950656*P1**3
- + 9646776768609439752430866001814626337809195004192011294976*P1**2
- - 4455646388442119339178004445898515058096390082146233345536*P1
- + 4709370575236909034773453200518274143851133066819671040*P2
- + 886058257542744466307567014351806947093655767531394713600,
- 53271*P1**14 + 1393662*P1**13 + 6077030*P1**12 - 41382626*P1**11
- + 6240255*P1**10 + 313751524*P1**9 - 698694844*P1**8
- + 134987928*P1**7 + 2322386256*P1**6 - 6102636608*P1**5
- + 8722164608*P1**4 - 7907887488*P1**3 + 4508378368*P1**2
- - 1477342720*P1 + 213248000}$
- multroot(20,res);
- {{p1= - 16.330244199212269912,p2= - 12.905402440394357204},{p1
- = - 13.071850241794867852,p2= - 20.369934278813005573}}
- %{{p1= - 16.330244199212269912,p2= - 12.905402440394357204},{p1
- % = - 13.071850241794867852,p2= - 20.369934278813005573}}
- % 118) structure is {p1(x1,x3,x4),p2(x2,x4),p3(x2,x3,x4),p4(x4)}
- h := {36439926476029643745*x1 + 36439926476029643745*x3
- - 966689910765785535050240000*x4**17
- + 2589213991952971388822784000*x4**16
- - 1455736281904024746728256000*x4**15
- - 1114734065976529083327407360*x4**14
- + 720240539282202478990426752*x4**13
- + 419779761544955697624679296*x4**12
- - 168749980172837712266699840*x4**11
- + 290913179471491189688854560*x4**10 - 432958804125555395247740688*x4**9
- + 10386593827154614897599504*x4**8 + 155547361883654478618679440*x4**7
- - 31113996003728470659075480*x4**6 - 41175755320900503555096780*x4**5
- + 33003268068791208924709740*x4**4 - 6778828915691466390091200*x4**3
- - 1496167017611703417373950*x4**2 + 149688116448660711183825*x4
- + 138148004064999041884935,
- - 36439926476029643745*x2 - 784034192593211415232000000*x4**17
- + 2099814921874128508369920000*x4**16
- - 1180307545285783973854272000*x4**15
- - 904159020650675303719168000*x4**14
- + 583907514538684395627559680*x4**13
- + 340458856280381353403249664*x4**12
- - 136785894094420325707236352*x4**11
- + 235962131906791901454310848*x4**10
- - 351090033711917923140908256*x4**9 + 8379974606095284871931520*x4**8
- + 126131069262992237456374584*x4**7 -25220359028157888406315896*x4**6
- - 33393008746801847984243640*x4**5 + 26761347051713933045852160*x4**4
- - 5495296446381334401240210*x4**3 - 1213098761225775782417310*x4**2
- + 121243165959568584810870*x4 + 112046752277725240396125,
- 145759705904118574980*x3**2 - 3866759643063142140200960000*x3*x4**17
- + 10356855967811885555291136000*x3*x4**16
- - 5822945127616098986913024000*x3*x4**15
- - 4458936263906116333309629440*x3*x4**14
- + 2880962157128809915961707008*x3*x4**13
- + 1679119046179822790498717184*x3*x4**12
- - 674999920691350849066799360*x3*x4**11
- + 1163652717885964758755418240*x3*x4**10
- - 1731835216502221580990962752*x3*x4**9
- + 41546375308618459590398016*x3*x4**8
- + 622189447534617914474717760*x3*x4**7
- - 124455984014913882636301920*x3*x4**6
- - 164703021283602014220387120*x3*x4**5
- + 132013072275164835698838960*x3*x4**4
- - 27115315662765865560364800*x3*x4**3
- - 5984668070446813669495800*x3*x4**2 + 598752465794642844735300*x3*x4
- + 552592016259996167539740*x3 + 3550270013715070172487680000*x4**17
- - 9573649159583488469933568000*x4**16
- + 5464438450196473162575360000*x4**15
- + 4096921924516221821604523520*x4**14
- - 2717026023466705910519606784*x4**13
- - 1554544907157405816469959168*x4**12
- + 636859360057972319632500992*x4**11
- - 1065163663567422851531986944*x4**10
- + 1612243029585251439302638656*x4**9
- - 48252032958282805311135168*x4**8 - 579133322758350220074700320*x4**7
- + 117976179842506552019678280*x4**6 + 152287445048713077301910400*x4**5
- - 123053170142513516618082960*x4**4 + 25533441675517563881962200*x4**3
- + 5583415080801636858130200*x4**2 - 574247940288215661001800*x4
- - 518304795930023609925945,
- - 5120000*x4**18 + 18432000*x4**17 - 20352000*x4**16 + 1208320*x4**15
- + 9255936*x4**14 - 1296384*x4**13 - 2943488*x4**12 + 2365440*x4**11
- - 3712896*x4**10 + 2169600*x4**9 + 772560*x4**8 - 924480*x4**7
- - 66000*x4**6 + 375840*x4**5 - 197100*x4**4 + 25200*x4**3 + 8100*x4**2
- - 675}$
- multroot(20,h);
- {{x1= - 0.12444800707566022364,x2=0.40264591905223704246,x3
- =0.70281784593572688134,x4=0.92049796029182926078},
- {x1= - 0.12444800707566022364,x2=0.92049796029182926078,x3
- =0.70281784593572688134,x4=0.40264591905223704246},
- {x1=0.22075230018295426413,x2=0.48100256896929398759,x3=0.74057635603986743051,
- x4=0.93049526909398804249},
- {x1=0.22075230018295426413,x2=0.93049526909398804249,x3=0.74057635603986743051,
- x4=0.48100256896929398759},
- {x1=0.70281784593572688134,x2=0.40264591905223704246,x3
- = - 0.12444800707566022364,x4=0.92049796029182926078},
- {x1=0.70281784593572688134,x2=0.92049796029182926078,x3
- = - 0.12444800707566022364,x4=0.40264591905223704246},
- {x1=0.74057635603986743051,x2=0.48100256896929398759,x3=0.22075230018295426413,
- x4=0.93049526909398804249},
- {x1=0.74057635603986743051,x2=0.93049526909398804249,x3=0.22075230018295426413,
- x4=0.48100256896929398759}}
- %{{x1= - 0.12444800707566022364,x2=0.40264591905223704246,x3
- % =0.70281784593572688134,x4=0.92049796029182926078},
- % {x1= - 0.12444800707566022364,x2=0.92049796029182926078,x3
- % =0.70281784593572688134,x4=0.40264591905223704246},
- % {x1=0.22075230018295426413,x2=0.48100256896929398759,x3
- % =0.74057635603986743051,x4=0.93049526909398804249},
- % {x1=0.22075230018295426413,x2=0.93049526909398804249,x3
- % =0.74057635603986743051,x4=0.48100256896929398759},
- % {x1=0.70281784593572688134,x2=0.40264591905223704246,x3
- % = - 0.12444800707566022364,x4=0.92049796029182926078},
- % {x1=0.70281784593572688134,x2=0.92049796029182926078,x3
- % = - 0.12444800707566022364,x4=0.40264591905223704246},
- % {x1=0.74057635603986743051,x2=0.48100256896929398759,x3
- % =0.22075230018295426413,x4=0.93049526909398804249},
- % {x1=0.74057635603986743051,x2=0.93049526909398804249,x3
- % =0.22075230018295426413,x4=0.48100256896929398759}}
- % System precision will have been set to 20 in the two previous
- % examples. In the following examples, the roots will be given to
- % accuracy 12, because rootacc 12; was input. If rootacc had not been
- % input, the roots would be given at system precision, which could
- % different answers on different systems if precision had been reset,
- % or else it would have been 20 because of example 118).
- rootacc 12;
- 12
- % 119)
- ss := {x^2-2,y^2-x^2,z^2-x-y};
- 2 2 2 2
- ss := {x - 2, - x + y , - x - y + z }
- % structure is {p1(x),p2(x,y),p3(x,y,z)}
- realroots ss;
- {{x= - 1.41421356237,y=1.41421356237,z=0},
- {x= - 1.41421356237,y=1.41421356237,z=0},
- {x=1.41421356237,y= - 1.41421356237,z=0},
- {x=1.41421356237,y= - 1.41421356237,z=0},
- {x=1.41421356237,y=1.41421356237,z= - 1.68179283051},
- {x=1.41421356237,y=1.41421356237,z=1.68179283051}}
- %{{x= - 1.41421356237,y=1.41421356237,z=0},
- % {x= - 1.41421356237,y=1.41421356237,z=0},
- % {x=1.41421356237,y= - 1.41421356237,z=0},
- % {x=1.41421356237,y= - 1.41421356237,z=0},
- % {x=1.41421356237,y=1.41421356237,z= - 1.68179283051},
- % {x=1.41421356237,y=1.41421356237,z=1.68179283051}}
- roots ss;
- {{x= - 1.41421356237,y= - 1.41421356237,z=1.68179283051*i},
- {x= - 1.41421356237,y= - 1.41421356237,z= - 1.68179283051*i},
- {x= - 1.41421356237,y=1.41421356237,z=0},
- {x= - 1.41421356237,y=1.41421356237,z=0},
- {x=1.41421356237,y= - 1.41421356237,z=0},
- {x=1.41421356237,y= - 1.41421356237,z=0},
- {x=1.41421356237,y=1.41421356237,z= - 1.68179283051},
- {x=1.41421356237,y=1.41421356237,z=1.68179283051}}
- %{{x= - 1.41421356237,y= - 1.41421356237,z=1.68179283051*i},
- % {x= - 1.41421356237,y= - 1.41421356237,z= - 1.68179283051*i},
- % {x= - 1.41421356237,y=1.41421356237,z=0},
- % {x= - 1.41421356237,y=1.41421356237,z=0},
- % {x=1.41421356237,y= - 1.41421356237,z=0},
- % {x=1.41421356237,y= - 1.41421356237,z=0},
- % {x=1.41421356237,y=1.41421356237,z= - 1.68179283051},
- % {x=1.41421356237,y=1.41421356237,z=1.68179283051}}
- % 120)
- realroots {x^5-45x+2,y^2-x+1};
- {{x=2.57878769906,y= - 1.25649818904},{x=2.57878769906,y=1.25649818904}}
- %{{x=2.57878769906,y= - 1.25649818904},{x=2.57878769906,y
- % =1.25649818904}}
- realroots {x^5-45x+2,y^2-x-1};
- {{x=0.0444444482981,y= - 1.02198064967},
- {x=0.0444444482981,y=1.02198064967},
- {x=2.57878769906,y= - 1.89176840524},
- {x=2.57878769906,y=1.89176840524}}
- %{{x=0.0444444482981,y= - 1.02198064967},
- % {x=0.0444444482981,y=1.02198064967},
- % {x=2.57878769906,y= - 1.89176840524},
- % {x=2.57878769906,y=1.89176840524}}
- % 121)
- realroots {x^2-2,y^2+x^2};
- {}
- % {}
- roots {x^2+2,y^2-x^2};
- {{x=1.41421356237*i,y=1.41421356237*i},
- {x=1.41421356237*i,y= - 1.41421356237*i},
- {x= - 1.41421356237*i,y=1.41421356237*i},
- {x= - 1.41421356237*i,y= - 1.41421356237*i}}
- %{{x=1.41421356237*i,y=1.41421356237*i},
- % {x=1.41421356237*i,y= - 1.41421356237*i},
- % {x= - 1.41421356237*i,y=1.41421356237*i},
- % {x= - 1.41421356237*i,y= - 1.41421356237*i}}
- % 122)
- roots {x^2-y^2,x^2+y^2+3};
- *** multroot fails because no univariate polynomial was given.
- 2 2 2 2
- multroot(12,{x - y ,x + y + 3})
- %multroot fails because no univariate polynomial was given.
- %multroot(12,{x**2 - y**2,x**2 + y**2 + 3})$
- % 122a)
- roots{x^2+y^2,x^2-y^2-z,z^2-z-1};
- *** multroot failure: at least one polynomial has no single base.
- 2 2 2 2 2
- multroot(12,{x + y ,x - y - z,z - z - 1})
- %*** multroot failure: at least one polynomial has no single base.
- %multroot(12,{x**2 + y**2,(x**2 - y**2) - z,(z**2 - z) - 1})$
- % 123)
- roots {x^2-2,y^2+3,x+z-2,y-z+2};
- {}
- %{}
- % 124)
- zz := {x^5-5x+3,x^2+y^2,x^3+z^3};
- 5 2 2 3 3
- zz := {x - 5*x + 3,x + y ,x + z }
- realroots zz;
- {}
- %{}
- realroots {x^5-5x+3,x^2-y^2,x^3+z^3};
- {{x= - 1.61803398875,y= - 1.61803398875,z=1.61803398875},
- {x= - 1.61803398875,y=1.61803398875,z=1.61803398875},
- {x=0.61803398875,y= - 0.61803398875,z= - 0.61803398875},
- {x=0.61803398875,y=0.61803398875,z= - 0.61803398875},
- {x=1.27568220365,y= - 1.27568220365,z= - 1.27568220365},
- {x=1.27568220365,y=1.27568220365,z= - 1.27568220365}}
- %{{x= - 1.61803398875,y= - 1.61803398875,z=1.61803398875},
- % {x= - 1.61803398875,y=1.61803398875,z=1.61803398875},
- % {x=0.61803398875,y= - 0.61803398875,z= - 0.61803398875},
- % {x=0.61803398875,y=0.61803398875,z= - 0.61803398875},
- % {x=1.27568220365,y= - 1.27568220365,z= - 1.27568220365},
- % {x=1.27568220365,y=1.27568220365,z= - 1.27568220365}}
- % These show previous capability
- %------------------------------------------------------------------
- % These are new capability
- % 125)
- roots{x**2 - x - y,x*y - 2*y,y**2 - 2*y};
- {{x=0,y=0},{x=1,y=0},{x=2.0,y=2.0}}
- %{{x=0,y=0},{x=1,y=0},{x=2.0,y=2.0}}
- % 126)
- roots({x^2-9,y^3-27,x*y+9});
- {{x= - 3.0,y=3.0}}
- %{{x= - 3.0,y=3.0}}
- % 127)
- multroot(12,{y^2-z,y*z,z*(z-1)});
- {{y=0,z=0},{y=0,z=0}}
- %{{y=0,z=0},{y=0,z=0}}
- % 127a)
- multroot(12,{y^2-z,y*z,z*(z-1),x^2-x-y});
- {{x=0,y=0,z=0},
- {x=0,y=0,z=0},
- {x=1,y=0,z=0},
- {x=1,y=0,z=0}}
- %{{x=0,y=0,z=0},
- % {x=0,y=0,z=0},
- % {x=1,y=0,z=0},
- % {x=1,y=0,z=0}}
- % 128)
- roots{y*z,z*(z-1)};
- {{z=0},{y=0,z=1}}
- %{{z=0},{y=0,z=1}}
- % 129)
- zzl := {z*(z-1)*(z-2),(z-2)*z*y^2+(z-1)*z*y+z+1};
- 2
- zzl := {z*(z - 3*z + 2),
- 2 2 2 2
- y *z - 2*y *z + y*z - y*z + z + 1}
- roots zzl;
- {{y= - 1.5,z=2.0},{y= - 1.41421356237,z=1},{y=1.41421356237,z=1}}
- %{{y= - 1.5,z=2.0},
- % {y= - 1.41421356237,z=1},
- % {y=1.41421356237,z=1}}
- % 129a)
- zzla := {z*(z-1)*(z-2),(z-2)*z*y^2+(z-1)*z*y+z+1,x^2-x-y};
- 2
- zzla := {z*(z - 3*z + 2),
- 2 2 2 2
- y *z - 2*y *z + y*z - y*z + z + 1,
- 2
- x - x - y}
- roots zzla;
- {{x= - 0.790044015673,y=1.41421356237,z=1},
- {x=0.5 + 1.11803398875*i,y= - 1.5,z=2.0},
- {x=0.5 - 1.11803398875*i,y= - 1.5,z=2.0},
- {x=0.5 + 1.07898728555*i,y= - 1.41421356237,z=1},
- {x=0.5 - 1.07898728555*i,y= - 1.41421356237,z=1},
- {x=1.79004401567,y=1.41421356237,z=1}}
- %{{x= - 0.790044015673,y=1.41421356237,z=1},
- % {x=0.5 + 1.11803398875*i,y= - 1.5,z=2.0},
- % {x=0.5 - 1.11803398875*i,y= - 1.5,z=2.0},
- % {x=0.5 + 1.07898728555*i,y= - 1.41421356237,z=1},
- % {x=0.5 - 1.07898728555*i,y= - 1.41421356237,z=1},
- % {x=1.79004401567,y=1.41421356237,z=1}}
- % 130)
- zzl0 := {z*(z-1)*(z-2),(z-2)*z*y^2+(z-1)*z*y+z};
- 2
- zzl0 := {z*(z - 3*z + 2),
- 2 2
- z*(y *z - 2*y + y*z - y + 1)}
- roots zzl0;
- {{y=-1,z=1},{y=-1,z=2.0},{z=0},{y=1,z=1}}
- %{{y=-1,z=1},{y=-1,z=2.0},{z=0},{y=1,z=1}}
- % 131)
- zzl3a := {z*(z-1)*(z-2),(z-2)*z*y^2+(z-1)*z*y+z,x^2+y*x*z+z};
- 2
- zzl3a := {z*(z - 3*z + 2),
- 2 2
- z*(y *z - 2*y + y*z - y + 1),
- 2
- x + x*y*z + z}
- roots zzl3a;
- {{x= - 0.5 + 0.866025403784*i,y=1,z=1},
- {x= - 0.5 - 0.866025403784*i,y=1,z=1},
- {x=0,z=0},
- {x=0,z=0},
- {x=0.5 + 0.866025403784*i,y=-1,z=1},
- {x=0.5 - 0.866025403784*i,y=-1,z=1},
- {x=1 + i,y=-1,z=2.0},
- {x=1 - i,y=-1,z=2.0}}
- %{{x=0.866025403784*i - 0.5,y=1,z=1},
- % {x= - 0.866025403784*i - 0.5,y=1,z=1},
- % {x=0,z=0},
- % {x=0,z=0},
- % {x=0.866025403784*i + 0.5,y=-1,z=1},
- % {x= - 0.866025403784*i + 0.5,y=-1,z=1},
- % {x=i + 1,y=-1,z=2.0},
- % {x= - i + 1,y=-1,z=2.0}}$
- % 132)
- zzl3c := {z*(z-1)*(z-2),(z-2)*z*y^2+(z-1)*z*y+z,x^2+y*x+z};
- 2
- zzl3c := {z*(z - 3*z + 2),
- 2 2
- z*(y *z - 2*y + y*z - y + 1),
- 2
- x + x*y + z}
- roots zzl3c;
- *** for some root value(s), a variable depends on an arbitrary variable
- 3 2
- multroot(12,{z - 3*z + 2*z,
- 2 2 2 2
- y *z - 2*y *z + y*z - y*z + z,
- 2
- x + x*y + z})
- %*** for some root value, a variable dependends on an arbitrary variable
- %multroot(12,{z**3 - 3*z**2 + 2*z,y**2*z**2 - 2*y**2*z + y*z**2 - y*z + z,
- % x**2 + x*y + z})$
- % 133)
- xyz := {x^2-x-2,y^2+y,x^3+y^3+z+5};
- 2 3 3
- xyz := {x - x - 2,y*(y + 1),x + y + z + 5}
- roots xyz;
- {{x=-1,y=-1,z= - 3.0},
- {x=-1,y=0,z= - 4.0},
- {x=2.0,y=-1,z= - 12.0},
- {x=2.0,y=0,z= - 13.0}}
- %{{x=-1,y=-1,z= - 3.0},
- % {x=-1,y=0,z= - 4.0},
- % {x=2.0,y=-1,z= - 12.0},
- % {x=2.0,y=0,z= - 13.0}}
- % 134) here, we had to eliminate a spurious imaginary part of z.
- axyz := {a-1,a+x^2-x-2,a+y^2+y,a+x^3+y^3+z+5};
- axyz := {a - 1,
- 2
- a + x - x - 2,
- 2
- a + y + y,
- 3 3
- a + x + y + z + 5}
- roots axyz;
- {{a=1,x= - 0.61803398875,y= - 0.5 + 0.866025403784*i,z= - 6.7639320225},
- {a=1,x= - 0.61803398875,y= - 0.5 - 0.866025403784*i,z= - 6.7639320225},
- {a=1,x=1.61803398875,y= - 0.5 + 0.866025403784*i,z= - 11.2360679775},
- {a=1,x=1.61803398875,y= - 0.5 - 0.866025403784*i,z= - 11.2360679775}}
- %{{a=1,x= - 0.61803398875,y= - 0.5 + 0.866025403784*i,z= - 6.7639320225},
- % {a=1,x= - 0.61803398875,y= - 0.5 - 0.866025403784*i,z= - 6.7639320225},
- % {a=1,x=1.61803398875,y= - 0.5 + 0.866025403784*i,z= - 11.2360679775},
- % {a=1,x=1.61803398875,y= - 0.5 - 0.866025403784*i,z= - 11.2360679775}}
- % 134a) here, we had to eliminate a spurious real part of x.
- roots{y^4+y^3+y^2+y+1,x^2+3*y^5+2};
- {{x=2.2360679775*i,y= - 0.809016994375 + 0.587785252292*i},
- {x= - 2.2360679775*i,y= - 0.809016994375 + 0.587785252292*i},
- {x= - 2.2360679775*i,y= - 0.809016994375 - 0.587785252292*i},
- {x=2.2360679775*i,y= - 0.809016994375 - 0.587785252292*i},
- {x= - 2.2360679775*i,y=0.309016994375 + 0.951056516295*i},
- {x=2.2360679775*i,y=0.309016994375 + 0.951056516295*i},
- {x=2.2360679775*i,y=0.309016994375 - 0.951056516295*i},
- {x= - 2.2360679775*i,y=0.309016994375 - 0.951056516295*i}}
- %{{x=2.2360679775*i,y= - 0.809016994375 + 0.587785252292*i},
- % {x=-2.2360679775*i,y= - 0.809016994375 + 0.587785252292*i},
- % {x=-2.2360679775*i,y= - 0.809016994375 - 0.587785252292*i},
- % {x=2.2360679775*i,y= - 0.809016994375 - 0.587785252292*i},
- % {x=-2.2360679775*i,y=0.309016994375 + 0.951056516295*i},
- % {x=2.2360679775*i,y=0.309016994375 + 0.951056516295*i},
- % {x=2.2360679775*i,y=0.309016994375 - 0.951056516295*i},
- % {x=-2.2360679775*i,y=0.309016994375 - 0.951056516295*i}}
- % 135)
- axyz2 := {a-1,a-1+x^2-x-2,a-1+y^2+y,x^3+y^3+z+5};
- axyz2 := {a - 1,
- 2
- a + x - x - 3,
- 2
- a + y + y - 1,
- 3 3
- x + y + z + 5}
- roots axyz2;
- {{a=1,x=-1,y=-1,z= - 3.0},
- {a=1,x=-1,y=0,z= - 4.0},
- {a=1,x=2.0,y=-1,z= - 12.0},
- {a=1,x=2.0,y=0,z= - 13.0}}
- %{{a=1,x=-1,y=-1,z= - 3.0},
- % {a=1,x=-1,y=0,z= - 4.0},
- % {a=1,x=2.0,y=-1,z= - 12.0},
- % {a=1,x=2.0,y=0,z= - 13.0}}
- zyxa2 := reverse axyz2;
- 3 3
- zyxa2 := {x + y + z + 5,
- 2
- a + y + y - 1,
- 2
- a + x - x - 3,
- a - 1}
- roots zyxa2;
- {{a=1,x=-1,y=-1,z= - 3.0},
- {a=1,x=-1,y=0,z= - 4.0},
- {a=1,x=2.0,y=-1,z= - 12.0},
- {a=1,x=2.0,y=0,z= - 13.0}}
- % (same as above)
- % 137)
- rsxuv := {u^2+u*r+s*x*v,s+r^2,x-r-2,r+v,v^2-v-6};
- 2
- rsxuv := {r*u + s*v*x + u ,
- 2
- r + s,
- - r + x - 2,
- r + v,
- 2
- v - v - 6}
- roots rsxuv;
- {{r= - 3.0,s= - 9.0,u=1.5 + 4.97493718553*i,v=3.0,x=-1},
- {r= - 3.0,s= - 9.0,u=1.5 - 4.97493718553*i,v=3.0,x=-1},
- {r=2.0,s= - 4.0,u= - 1 + 5.56776436283*i,v= - 2.0,x=4.0},
- {r=2.0,
- s= - 4.0,
- u= - 1 - 5.56776436283*i,
- v= - 2.0,
- x=4.0}}
- %{{r= - 3.0,s= - 9.0,u=1.5 + 4.97493718553*i,v=3.0,x=-1},
- % {r= - 3.0,s= - 9.0,u=1.5 - 4.97493718553*i,v=3.0,x=-1},
- % {r=2.0,s= - 4.0,u= - 1 + 5.56776436283*i,v= - 2.0,x=4.0},
- % {r=2.0,s= - 4.0,u= - 1 - 5.56776436283*i,v= - 2.0,x=4.0}}
- % 138)
- rsxuv2 := {u^2+u*r+s*x,s+r,x-r-2,r+v,v^2-v-6};
- 2
- rsxuv2 := {r*u + s*x + u ,
- r + s,
- - r + x - 2,
- r + v,
- 2
- v - v - 6}
- roots rsxuv2;
- {{r= - 3.0,s=3.0,u= - 0.791287847478,v=3.0,x=-1},
- {r= - 3.0,s=3.0,u=3.79128784748,v=3.0,x=-1},
- {r=2.0,s= - 2.0,u= - 4.0,v= - 2.0,x=4.0},
- {r=2.0,s= - 2.0,u=2.0,v= - 2.0,x=4.0}}
- %{{r= - 3.0,s=3.0,u= - 0.791287847478,v=3.0,x=-1},
- % {r= - 3.0,s=3.0,u=3.79128784748,v=3.0,x=-1},
- % {r=2.0,s= - 2.0,u= - 4.0,v= - 2.0,x=4.0},
- % {r=2.0,s= - 2.0,u=2.0,v= - 2.0,x=4.0}}
- % 139) combining both types of capabilities.
- axyz3 := {a-1,a-1+x^2-x-2,a-1+y^2+y,x^3+y^3+z+5,y^2-x^2};
- axyz3 := {a - 1,
- 2
- a + x - x - 3,
- 2
- a + y + y - 1,
- 3 3
- x + y + z + 5,
- 2 2
- - x + y }
- roots axyz3;
- {{a=1,x=-1,y=-1,z= - 3.0}}
- %{{a=1,x=-1,y=-1,z= - 3.0}}
- % 140) spurious real and imag. parts had to be eliminated from z and y.
- ayz := {a^2+a+1,z^2+a^3+3,y^3-z^2};
- 2 3 2 3 2
- ayz := {a + a + 1,a + z + 3,y - z }
- roots ayz;
- {{a= - 0.5 + 0.866025403784*i,y= - 1.58740105197,z=2.0*i},
- {a= - 0.5 + 0.866025403784*i,y= - 1.58740105197,z= - 2.0*i},
- {a= - 0.5 - 0.866025403784*i,y= - 1.58740105197,z= - 2.0*i},
- {a= - 0.5 - 0.866025403784*i,y= - 1.58740105197,z=2.0*i},
- {a= - 0.5 + 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z=2.0*i},
- {a= - 0.5 + 0.866025403784*i,y=0.793700525984 - 1.374729637*i,z=2.0*i},
- {a= - 0.5 + 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z= - 2.0*i},
- {a= - 0.5 + 0.866025403784*i,y=0.793700525984 - 1.374729637*i,z= - 2.0*i},
- {a= - 0.5 - 0.866025403784*i,
- y=0.793700525984 - 1.374729637*i,
- z= - 2.0*i},
- {a= - 0.5 - 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z= - 2.0*i},
- {a= - 0.5 - 0.866025403784*i,y=0.793700525984 - 1.374729637*i,z=2.0*i},
- {a= - 0.5 - 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z=2.0*i}}
- %{{a= - 0.5 + 0.866025403784*i,y= - 1.58740105197,z=2.0*i},
- % {a= - 0.5 + 0.866025403784*i,y= - 1.58740105197,z=-2.0*i},
- % {a= - 0.5 - 0.866025403784*i,y= - 1.58740105197,z=-2.0*i},
- % {a= - 0.5 - 0.866025403784*i,y= - 1.58740105197,z=2.0*i},
- % {a= - 0.5 + 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z=2.0*i},
- % {a= - 0.5 + 0.866025403784*i,y=0.793700525984 - 1.374729637*i,z=2.0*i},
- % {a= - 0.5 + 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z=-2.0*i},
- % {a= - 0.5 + 0.866025403784*i,y=0.793700525984 - 1.374729637*i,z=-2.0*i},
- % {a= - 0.5 - 0.866025403784*i,y=0.793700525984 - 1.374729637*i,z=-2.0*i},
- % {a= - 0.5 - 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z=-2.0*i},
- % {a= - 0.5 - 0.866025403784*i,y=0.793700525984 - 1.374729637*i,z=2.0*i},
- % {a= - 0.5 - 0.866025403784*i,y=0.793700525984 + 1.374729637*i,z=2.0*i}}
- % 141) some small real or imaginary parts are not spurious; they are kept.
- zz:= {x**9-9999x**2-0.01,y^2+y-x};
- 9 2
- 100*x - 999900*x - 1 2
- zz := {------------------------, - x + y + y}
- 100
- roots zz;
- {{x= - 3.35839794887 + 1.61731917877*i,y= - 0.944735689647 - 1.81829254591*i},
- {x= - 3.35839794887 - 1.61731917877*i,y= - 0.944735689647 + 1.81829254591*i},
- {x= - 3.35839794887 + 1.61731917877*i,y= - 0.0552643103532 + 1.81829254591*i},
- {x= - 3.35839794887 - 1.61731917877*i,y= - 0.0552643103532 - 1.81829254591*i},
- {x= - 0.829455794538 + 3.6340832074*i,y= - 1.74509731832 - 1.45935709359*i},
- {x= - 0.829455794538 - 3.6340832074*i,y= - 1.74509731832 + 1.45935709359*i},
- {x= - 0.829455794538 + 3.6340832074*i,y=0.745097318317 + 1.45935709359*i},
- {x= - 0.829455794538 - 3.6340832074*i,y=0.745097318317 - 1.45935709359*i},
- {x=5.00250075018e-29 + 0.00100005000375*i,y
- = - 1.0000010001 - 0.00100004800346*i},
- {x=5.00250075018e-29 - 0.00100005000375*i,y
- = - 1.0000010001 + 0.00100004800346*i},
- {x=5.00250075018e-29 + 0.00100005000375*i,y
- =0.00000100009500904 + 0.00100004800346*i},
- {x=5.00250075018e-29 - 0.00100005000375*i,y
- =0.00000100009500904 - 0.00100004800346*i},
- {x=2.3240834909 + 2.91430845907*i,y= - 2.29755558063 - 0.810630973104*i},
- {x=2.3240834909 - 2.91430845907*i,y= - 2.29755558063 + 0.810630973104*i},
- {x=2.3240834909 + 2.91430845907*i,y=1.29755558063 + 0.810630973104*i},
- {x=2.3240834909 - 2.91430845907*i,y=1.29755558063 - 0.810630973104*i},
- {x=3.72754050502,y= - 2.49437722235},
- {x=3.72754050502,y=1.49437722235}}
- %{{x= - 3.35839794887 + 1.61731917877*i,y= - 0.944735689647 -
- % 1.81829254591*i},
- % {x= - 3.35839794887 - 1.61731917877*i,y= - 0.944735689647 +
- % 1.81829254591*i},
- % {x= - 3.35839794887 + 1.61731917877*i,y= - 0.0552643103532 +
- % 1.81829254591*i},
- % {x= - 3.35839794887 - 1.61731917877*i,y= - 0.0552643103532 -
- % 1.81829254591*i},
- % {x= - 0.829455794538 + 3.6340832074*i,y= - 1.74509731832 -
- % 1.45935709359*i},
- % {x= - 0.829455794538 - 3.6340832074*i,y= - 1.74509731832 +
- % 1.45935709359*i},
- % {x= - 0.829455794538 + 3.6340832074*i,y=0.745097318317 +
- % 1.45935709359*i},
- % {x= - 0.829455794538 - 3.6340832074*i,y=0.745097318317 -
- % 1.45935709359*i},
- % {x=5.00250075018E-29 + 0.00100005000375*i,y= - 1.0000010001 -
- % 0.00100004800346*i},
- % {x=5.00250075018E-29 - 0.00100005000375*i,y= - 1.0000010001 +
- % 0.00100004800346*i},
- % {x=5.00250075018E-29 + 0.00100005000375*i,y=0.00000100009500904 +
- % 0.00100004800346*i},
- % {x=5.00250075018E-29 - 0.00100005000375*i,y=0.00000100009500904 -
- % 0.00100004800346*i},
- % {x=2.3240834909 + 2.91430845907*i,y= - 2.29755558063 -
- % 0.810630973104*i},
- % {x=2.3240834909 - 2.91430845907*i,y= - 2.29755558063 +
- % 0.810630973104*i},
- % {x=2.3240834909 + 2.91430845907*i,y=1.29755558063 + 0.810630973104*i},
- % {x=2.3240834909 - 2.91430845907*i,y=1.29755558063 - 0.810630973104*i},
- % {x=3.72754050502,y= - 2.49437722235},
- % {x=3.72754050502,y=1.49437722235}}$
- % 142) if quotient, only numerator is used as polynomial, so this works.
- vv := {x+1+1/x,y^2-x^3};
- 2
- x + x + 1 3 2
- vv := {------------, - x + y }
- x
- roots vv;
- {{x= - 0.5 + 0.866025403784*i,y=-1},
- {x= - 0.5 - 0.866025403784*i,y=-1},
- {x= - 0.5 + 0.866025403784*i,y=1},
- {x= - 0.5 - 0.866025403784*i,y=1}}
- %{{x= - 0.5 + 0.866025403784*i,y=-1},{x= - 0.5 - 0.866025403784*i,y=-1},
- % {x= - 0.5 + 0.866025403784*i,y=1},{x= - 0.5 - 0.866025403784*i,y=1}}
- % 143) and this also works.
- ii := {x^2-2x+3/r,r^3-5};
- 2
- r*x - 2*r*x + 3 3
- ii := {------------------,r - 5}
- r
- roots ii;
- {{r= - 0.854987973338 + 1.48088260968*i,x= - 0.464963274745 - 0.518567329174*i},
- {r= - 0.854987973338 - 1.48088260968*i,x= - 0.464963274745 + 0.518567329174*i},
- {r= - 0.854987973338 + 1.48088260968*i,x=2.46496327474 + 0.518567329174*i},
- {r= - 0.854987973338 - 1.48088260968*i,x=2.46496327474 - 0.518567329174*i},
- {r=1.70997594668,x=1 + 0.868568156754*i},
- {r=1.70997594668,x=1 - 0.868568156754*i}}
- %{{r= - 0.854987973338 + 1.48088260968*i,x= - 0.464963274745 -
- % 0.518567329174*i},
- % {r= - 0.854987973338 - 1.48088260968*i,x= - 0.464963274745 +
- % 0.518567329174*i},
- % {r= - 0.854987973338 + 1.48088260968*i,x=2.46496327474 +
- % 0.518567329174*i},
- % {r= - 0.854987973338 - 1.48088260968*i,x=2.46496327474 -
- % 0.518567329174*i},
- % {r=1.70997594668,x=1 + 0.868568156754*i},
- % {r=1.70997594668,x=1 - 0.868568156754*i}}
- % 144)
- bb := {y+x+3,x^2+r+s-3,x^3+r+s-7,r^2-r,s^2+3s+2};
- bb := {x + y + 3,
- 2
- r + s + x - 3,
- 3
- r + s + x - 7,
- r*(r - 1),
- 2
- s + 3*s + 2}
- roots bb;
- {{r=0,s=-1,x=2.0,y= - 5.0},
- {r=1,s= - 2.0,x=2.0,y= - 5.0}}
- %{{r=0,s=-1,x=2.0,y= - 5.0},{r=1,s= - 2.0,x=2.0,y= - 5.0}}
- end;
- Time for test: 92630 ms, plus GC time: 3504 ms
|