Tein c lups lupsalla oman 4:nen asteen yhtälön ratkaisijan wikipedian kuvauksen mukaan (Ferrari) ja tämän jälkeen vieläpä koitin muidenkin funktioita, mutta yksikään näistä ei aina anna oikeita tuloksia. Eli miten / mistä saisin toimivan 4:nen asteen yhtälöitä ratkaisevan funktion?
Esim. X^4 - 16 = 0 toimii, mutta x^4 + x^3 = 0 ei toimi. Eli ekassa funktiot palauttavat +-2 ja tokassa mikään niistä ei tajunnut, että yksi vastauksista on 0.
Jos likiarvot kelpaa, niin Newtonin iteraatio on helpompi tehdä. Muuten pitää vaan koodata kaava ja olla huolellinen. Esimerkiksi Maplella voit katsoa valmiin kaavan ja koodata sen. Kaava tosin vaatii tapaustarkastelua; esimerkiksi jos kysyy ratkaisua yhtälölle x^4+ax^3+d=0, niin ratkaisu tulostuu, mutta jos tätä soveltaa tapauksessasi x^4 + x^3 = 0, niin tulee nollalla jako. Lisäksi vaikka kaava olisikin ohjelmoitu oikein, niin se saattaa näyttää vastauksen kummallisessa muodossa, ellei siihen tee algoritmia, joka sieventää juurilausekkeiden summia, osamääriä ja sisäkkäisiä juurilausekkeita. Esimerkkinä sqrt(3+2 sqrt(2))=1+sqrt(2). Englanninkielinen Wikipedia sanoo seuraavaa:
In 1991, a polynomial time Monte Carlo algorithm was proposed for determining whether a sum of radicals is zero, or more generally whether it represents a rational number.
ja antaa viitteen artikkeliin http://ieeexplore.ieee.org/search/wrapper.jsp?
SAGE on avoimen lähdekoodin ohjelmisto, joka muistaakseni hallitsee kanssa neljännen asteen yhtälön ratkaisukaavan.
iterointi kävisi muuten, mutta joskus likiarvo karkaa väärään suuntaan. En tarvitse mitään ihmeen sievennintä vaan nopean menetelmän juurien löytämiseen. Pitää vielä katsoa se sage, kunhan pääsen koneelle.
Tulipa mieleen sivu http://www.wolframalpha.com/input/?i=x^4+a*x^3+b*x^2+c*x+d=0 Puolitushaulla saa kanssa likiarvon nopeasti.
Äh. Ajattelin turhan monimutkaisesti. Ratkaisukaavassahan tarvitaan juuria, joiden approksimaatioon käytetään yleensä Newtonia. Siten on huomattavasti helpompaa tehdä se alkuperäiseen neljännen asteen yhtälöön. Missä tapauksissa muka likiarvo karkaa väärään suuntaan? Mulle ei tule mieleen esimerkkiä. Ainakin voi kokeilla muutamalla eri alkuarvolla, jos jollakin tietyllä alkuarvolla ei lähde suppenemaan.
Newtonin menetelmä ei sellaisenaan todellakaan ole mikään pomminvarma tapa löytää nopeasti funktion f kaikkia nollakohtia. Summittaisella alkuarvauksella menetelmä kyllä todennäköisesti suppenee aika pian johonkin nollakohtaan, mutta mielivaltaisen (neljännen asteen) polynomin kaikkien nollakohtien löytäminen luotettavasti vaatii hieman enemmän eforttia.
Ei pomminvarmaa tapaa olekaan olemassa. Esimerkiksi yhtälölle x^4+10^{-100000}=0 voi helposti saada ratkaisuksi x=0 pyöristysvirheistä johtuen, vaikka reaalijuuria ei ole. Vastaavasti voidaan kehittää neljännen asteen yhtälö, joka on kaikkialla positiivinen, mutta jolle tietokone löytää nollakohdan origossa riippumatta siitä, kuinka monen bitin tarkkuudella luvut on tallennettu.
Jaska kirjoitti:
Äh. Ajattelin turhan monimutkaisesti. Ratkaisukaavassahan tarvitaan juuria, joiden approksimaatioon käytetään yleensä Newtonia. Siten on huomattavasti helpompaa tehdä se alkuperäiseen neljännen asteen yhtälöön. Missä tapauksissa muka likiarvo karkaa väärään suuntaan? Mulle ei tule mieleen esimerkkiä. Ainakin voi kokeilla muutamalla eri alkuarvolla, jos jollakin tietyllä alkuarvolla ei lähde suppenemaan.
Ratkaisukaavallahan ne juuret ratkaistaan. Yllä antamasi Wolfram Alpha -linkki antaa aivan validit kaavat. Lukujen tarkkuus on sen sijaan oikea ongelma, jota voi tosin yrittää kiertää laskemalla symbolisesti.
Laitinen kirjoitti:
Ratkaisukaavallahan ne juuret ratkaistaan.
http://en.wikipedia.org/wiki/Root-finding_algorithm#Finding_roots_of_polynomials:
However, even this degree-two solution should be used with care to ensure numerical stability, the degree-four solution is unwieldy and troublesome, and higher-degree polynomials have no such general solution.
... eli ei.
Jaska kirjoitti:
Ei pomminvarmaa tapaa olekaan olemassa. Esimerkiksi yhtälölle x^4+10^{-100000}=0 voi helposti saada ratkaisuksi x=0 pyöristysvirheistä johtuen, vaikka reaalijuuria ei ole. Vastaavasti voidaan kehittää neljännen asteen yhtälö, joka on kaikkialla positiivinen, mutta jolle tietokone löytää nollakohdan origossa riippumatta siitä, kuinka monen bitin tarkkuudella luvut on tallennettu.
Totta toki, mutta numeeriset ongelmat alkavat helposti kummitella valitettavan usein myös ihan "normaaleissa" ja yksinkertaisissa sovelluksissa. Yllä lainattu Wikipedia-artikkeli voi antaa lisätietoa aiheesta ja tarjonnee vastauksen myös ketjun aloittajan alkuperäiseen kysymykseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.