/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/ /* [ Created with wxMaxima version 17.10.0 ] */ /* [wxMaxima: title start ] Luento 2, osa A [wxMaxima: title end ] */ /* [wxMaxima: section start ] Yhtälöiden ratkaiseminen Maximalla [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Maximaa pystyy käyttämään myös erilaisten yhtälöiden ratkaisemiseen. Opetellaan tässä pari siihen soveltuvaa komentoa. Kokeillaan ensin, miten polynomin nollakohdat löytyvät. Ensin kannattaa piirtää kuva polynomista, niin nollakohdat näkee siitä jo valmiiksi. Aja siis seuraavat solut wxMaximassa: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ poly : x^3 +x^2 -3*x +1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ wxplot2d([poly], [x,-5,5])$ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Kuvasta ei ihan näe nollakohtia, koska y-skaala on liian iso. Vähennetään skaalaa ajamalla seuraava komento: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ wxplot2d([poly], [x,-5,5], [y,-5,5])$ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Näemme, että polynomilla pitäisi olla kolme reaalista juurta. Kyseessä on kolmannen asteen polynomi, joten sillä on myös enintään kolme juurta! Kokeillaan jakaa polynomi tekijöihin factor-komennolla: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ factor(poly); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Tästä nähdään yksi juuri jo automaattisesti, mutta Maxima ei tykkää jakaa toisen asteen termiä tekijöihin koska siitä ei tule enää rationaali- eikä kokonaislukukertoiminen. Osaisimme varmaan laskea itse juuret toisen asteen ratkaisukaavasta, mutta miten ne löytyisi kätevästi Maximalla? Tätä varten on esimerkiksi komento "solve": [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ solve(poly = 0, x); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Toimii! Solve haluaa aina yhtälön ja muuttujan jonka suhteen ratkaista se. Yksinkertaisilla lausekkeilla nollakohdan löytäminen löytyy myös lyhenteellä: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ solve(poly); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Kokeillaan vielä lyhyesti miten Maximalla löytyy yksinkertaisen yhtälöryhmän ratkaisut: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ solve([x+3*y=1,y-4*x=9], [x,y]); /* [wxMaxima: input end ] */ /* [wxMaxima: subsect start ] Tehtäviä [wxMaxima: subsect end ] */ /* [wxMaxima: comment start ] Ratkaise nyt seuraavat kolme tehtävää solve-komennolla: [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] A) Etsi polynomin x^5 - 10*x^4 + 24*x^3 + 22*x^2 - 73*x - 60 juuret [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] B) Etsi polynomien 4*x^4 + 40*x^2 + 4 ja x^4 + 21*x^3 - 3*x^2 + 29*x leikkauskohdat [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] C) Ratkaise yhtälö |x^2 - 4*x| = 1 [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ /* [wxMaxima: input end ] */ /* [wxMaxima: subsect start ] Algebrallinen ja muunlainen ratkaiseminen [wxMaxima: subsect end ] */ /* [wxMaxima: comment start ] Solve-komento toimii kuitenkin lähinnä polynomien ja muiden algebrallisten yhtälöiden ratkaisemiseen: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ solve(sqrt(x)-2=0,x); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Ylempi toimii vielä, mutta seuraava ei: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ lauseke1:sin(x)-x/3; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ solve(lauseke1=0,x); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Piirretään kuva [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ wxplot2d(lauseke1,[x,-10,10]); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Pitäisi siis olla ainakin kolme nollakohtaa. Kokeillaan niiden ratkaisemista Maximan komennolla "find_root": [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ find_root(lauseke1,-5,5); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Komento find_root ottaa siis vastaan lausekkeen, ja välin jolla haarukoida nollakohtaa sille. Se palauttaa aina yhden (likiarvoisen) nollakohdan lausekkeelle, tässä tapauksessa pisteen x=0. Kokeillaan haarukoida muualta: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ find_root(lauseke1,-10,-3); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Maxima heittää virheen, joka kertoo meille oikeastaan mihin nollakohdan haarukointi perustuu: Jos jatkuva funktio saa eri merkit haarukointivälin päätepisteissä niin silloin välillä on varmasti nollakohta. Otetaankin kuvasta mallia ja kokeillaan vähän paremmalla välillä: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ find_root(lauseke1,-5,-1); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Nyt onnistuu! Harjoittele vielä tämän komennon käyttöä ratkaisemalla seuraava tehtävä. Kuvan piirto auttaa haarukoinnissa! [wxMaxima: comment end ] */ /* [wxMaxima: subsect start ] Tehtävä [wxMaxima: subsect end ] */ /* [wxMaxima: comment start ] D) Etsi yhtälön log(x) = x - 2*sqrt(x) + 1 kaikki ratkaisut. Tässä x > 0. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ /* [wxMaxima: input end ] */ /* [wxMaxima: subsect start ] Numeerisia vaihtoehtoja [wxMaxima: subsect end ] */ /* [wxMaxima: comment start ] Komento find_root toimii yleensä hyvin, mutta se ei tepsi ihan kaikkiin lausekkeisiin. Toinen tapa etsiä juuria on ns. Newtonin iteraatiolla. Tätä menetelmää voi käyttää myös Maximassa, mutta ensin täytyy ladata sopiva funktio käyttöön: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ load(mnewton); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Funktiota mnewton voi nyt käyttää Maximassa! Se haluaa syötteeksi lausekkeen, muuttujan ja jonkun luvun. Tämä luku on "alkuarvaus", se kannattaa valita läheltä potentiaalista nollakohtaa: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ lauseke1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ mnewton(lauseke1,x,0.1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ mnewton(lauseke1,x,1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ mnewton(lauseke1,x,2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ mnewton(lauseke1,x,3); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ mnewton(lauseke1,x,5); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Kuten huomattiin, alkuarvosta riippuen mnewton tuotti aina jonkin nollakohdan likiarvon, tai se ilmoitti että alkuarvaus ei toiminut. [wxMaxima: comment end ] */ /* [wxMaxima: section start ] Derivointi ja ääriarvojen löytäminen [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Derivointi Maximassa onnistuu komennolla "diff". Diff-komentoon syötetään derivoitava lauseke, muuttuja jonka suhteen derivoidaan, sekä mahdollisesti kuinka monta kertaa halutaan derivoida [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ diff(x^6,x); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ diff(x^6,x,2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ diff(x^6,x,6); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Jos derivointimuuttujaa ei ilmoita, komento laskee funktion differentiaalin. Tämä käsite ei ehkä ole tuttu eikä sitä tällä kurssilla käytetä, joten muista muuttuja! [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Lukiosta ja analyysin kursseilta muistetaan, että derivoituva funktio saa ääriarvokohdat derivaatan nollakohdissa. Edellisten opittujen asioiden perusteella osataan sekä derivoida että ratkaista nollakohtia, eli ratkaistaan vielä seuraavat tehtävät: [wxMaxima: comment end ] */ /* [wxMaxima: subsect start ] Tehtäviä [wxMaxima: subsect end ] */ /* [wxMaxima: comment start ] E) Etsi aiemmin määritellyn polynomin x^3 + x^2 - 3*x + 1 (pitäisi löytyä edelleen poly-muuttujasta) lokaalit ääriarvokohdat. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] F) Laske funktion x+6*sin(x) suurin ja pienin arvo välillä [0,7]. [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] G) Etsi funktion x^5+x^2-x-2+2*cos(x)+sin(x) lokaalit ääriarvokohdat. Vinkki: Kuvaa piirtäessä kannattaa laittaa hyvin pieni y-skaala, että näkee mitä oikeasti tapahtuu! [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ /* [wxMaxima: input end ] */ /* Maxima can't load/batch files which end with a comment! */ "Created with wxMaxima"$