Lineaarialgebra a, kevät 2018 Kotilaskut 1 yms. Maple:lla Maple 2017 versio. Työarkkien yhteensopivuus taaksepäin ei ole taattu! Klikkaa kappaleet auki kolmiosta restart; # Tämä unohduttaa aikaisemmat omat määrittelyt 0. Ihan alkeita Maple-työarkeilla voidaan työskennellä samaan tapaan kuin CAS-laskimilla. Valmiusmerkin perään voidaan kirjoittaa (käskyiksi) lausekkeita laskemista tai sieventämistä varten. Maple toteuttaa käskyrivin ja kokonaisen käskyryhmän, kun painetaan Enter. 4 + 7; # puolipiste päättää käskyn 11 (1.1) 2^100; #-merkin jälkeinen teksti on kommenttia, 1267650600228229401496703205376 (1.2) 18/3 * 2; # jota Maple ei käsittele 12 Lausekkeelle voi antaa nimen määrittelykäskyllä: L := x^2 + 4*x - 1; Yhtälön ratkaisemista: solve(l = 0, x); (1.3) (1.4) (1.5) K := sin(x)^2 - cos(x)^2 = 0; solve(k, x); # jaksot pitää itse lisätä! (1.6) (1.7) Yhtälön ratkaisemista voi säätää eri tavoin muuttujien avulla: solve(x^2 - y^2 = 1, x); (1.8) solve(x^2 - y^2 = 1, {x,y}); # nk. kokonaisratkaisu (1.9) solve(x^2 - y^2 = 1, y); (1.10) 1. Kotitehtävät restart; Tehtävä 1. Yhtälöryhmät
a) Käskyllä solve, jolla on kaksi argumenttia (yhtälöiden joukko, tuntemattomien joukko): R1 := 6*x - y = 3; R2 := 3*x - 4*y = 6; # kaksi käskyä rivillä (2.1) solve({r1, R2}, {x, y}); (2.2) y1 := solve(r1,y); y2 := solve(r2, y); (2.3) plot({y1,y2}, x = -2..2, y = -2..2); b) Samoin yritetään (luettavuuden vuoksi voidaan Shift-Enterillä jakaa käsky eri riveille): R1 := 2*x - 2*y + 3*z = 3; R2 := 4*x + 2*y - 6*z = -1; (2.4)
solve({r1, R2}); (2.5) solve({r1, R2}, {x,y,z}); (2.6) Kun on äärettömästi ratkaisuja, voidaan kontrolloida esitysmuotoa vaikkapa näin: solve({r1, R2}, {y,z}); (2.7) solve({r1, R2}, {x,y}); (2.8) Jos tarvis, näin saadaan likiarvoiset ratkaisut vaikkapa 3 merkitsevällä numerolla: evalf(%,3); (2.9) z1 := solve(r1, z); z2 := solve(r2, z); (2.10) plot3d({z1,z2}, x = -5..5, y = -5..5, axes = boxed);
Tehtävä 2. Yhtälöryhmät restart; a) Yritetään taas ratkaista, mutta hiukan suoremmin: yhtalot := {5*s - t = 3, 2*s + 2*t = 1, 3*s + t = 1}; (3.1) solve(yhtalot,{s,t}); Ei ehkä ole ratkaisua (?), koskapa Maple ei mitään anna ulos. Testataanpa mitä Maple sanoo seuraavaan, jolla ei varmasti ole ratkaisua: solve({s - t = 2, s - t = 3},{s,t}); # ei nytkään vastaa mitään Käytetään tässä implicitplottia: with(plots): implicitplot(yhtalot, s = -1..1, t = -1..1);
b) Yhtälöryhmä voidaan toki antaa solve-käskylle suoraankin niitä nimeämättä, mutta yhtä kaikki joukkona: solve({ 4*x1-2*x2 + 2*x3 = 18, 6*x1 + 2*x2-6*x3 = -4, 2*x1 + x2 + x3 = 11},{x1,x2,x3}); (3.2) Tehtävä 3. Yhtälöryhmät restart; a) Helppoa kuin mikä: solve({4*x - 2*y = 4, -6*x + 3*y + 3 = -3},{x,y}); b) Hankalampi, nimittäin ratkaisuja ei aina ole! solve({6*x + 3*y - 1 = 0, 4*x + 2*y = a},{x,y}); solve({6*x + 3*y - 1 = 0, 4*x + 2*y = a}); (4.1) (4.2) solve({6*x + 3*y - 1 = 0, 4*x + 2*y = 2/3}, {y});
(4.3) Suorat ovat yhdensuuntaiset. Ratkaisuja on vain kun, jolloin suorat ovat samat. Tehtävä 4. Yhtälöryhmät a) Saadaan liiankin tarkoilta näyttäviä arvoja: solve({ 3.6*x - 2.2*y = 2.6, -1.3*x - 2.2*y = 8.2},{x,y}); evalf(%,2); b) Tämä sentään menee hyvin: solve({ 400*x + 800*y + 1000*z = 400, 40*x + 10*y + 10*z = 20, 4*x - 8*y - 4*z = -4}, {x,y,z}); (5.1) (5.2) (5.3) Lasketaan tämä malliksi Gauss-Jordanin menetelmällä. Vaihdetaan kuitenkin ensin yhtälöiden järjestystä, mikä helpottaa sopivien kerrointen löytämistä päässälaskuna: R1 := 4*x - 8*y - 4*z = -4: R2 := 40*x + 10*y + 10*z = 20: R3 := 400*x + 800*y + 1000*z = 400: GAUSSIN VAIHE I R1 := R1; # nämä vastaavat kirjanpitoa, pilkkuja (R1') ei voi Maplessa käyttää R2 := R2-40/4*R1; R3 := R3-400/4*R1; (5.4) Jatka tästä GAUSSIN VAIHE II: R1 := R1; R2 := R2; R3 := R3-1600/90*R2; Ja skaalaus vie porrasmuotoon: R1 := 1/4*R1; R2 := 1/90*R2; R3 := 9/4600*R3; (5.5)
(5.6) Tästä voitaisiin laskea takaisinsijoituksella myös y ja x, mutta tehdään siis vielä "Jordan"-osa: R1 := R1 - (-1)*R3; R2 := R2-5/9*R3; R3 := R3; # tuki (5.7) Ja vielä (tukena keskimmäinen): R1 := R1 + 2*R2; R2 := R2; R3 := R3; (5.8) Tehtävä 5. Vektoriyhtälössä kaikki ensin samalle puolelle: restart; yht5 := [x,y,z] + [2*z,x,3*y] + [4*y,3*z,x+z] - [z,4+y,3*y] = [0,0,0]; Tässä ei ole (tarkasti ottaen) kyse Maple-vektoreista; ne pitäisi juhlallisesti määritellä käskyllä vector (ks. Help). Nämä ovat listoja, mutta homma toimii näinkin. Poimitaan "manuaalisesti" yhtälöjoukko koordinaateittein: yhtjoukko5 := {z+4*y+x = 0, -4+3*z+x = 0, 2*z+x = 0}; (6.1) (6.2) ratk5 := solve(yhtjoukko5); (6.3) Tarkastus sijoituskäskyllä subs (sanasta substitute): subs(ratk5,yht5); (6.4)
Tehtävä 6. Ei-ekvivalentit yhtälöryhmät Järjestetään niin, että yhtälöryhmällä I on vain yksi ratkaisu: restart; arvot6 := {a=1, b=0, c=1, e=1, d=0, f=1, alpha=1, beta=1}; # sijoittamista varten (7.1) YR1 := subs(arvot6,{a*x + b*y = c, d*x + e*y = f}); # yr. on tää (7.2) solve(yr1,{x,y}); # ja ratkaisu tietysti Nyt sama sijoitus toiseen yhtälöryhmään antaa äärettömästi ratkaisuja, äskeisen ja esimerkiksi {x = 2, y = 2}, sillä YRII := subs(arvot6, {(a - beta*d)*x + (b - beta*e)*y = c - beta*f, (d - alpha*a)*x + (e - alpha*b)*y = f - alpha*c}); (7.3) (7.4) solve(yrii,{x,y}); (7.5) Voitaisiin osoittaa, että ei-ekvivalenttius on kiinni lukujen. Omatoimista tutkailua ja valinnoista niin, että pitää olla 2. Aritmetiikkaa, alkeisfunktioita, likiarvot, lausekkeet Maplessa työskentely on tavallisimmin "vuorovaikutteista"; käyttäjä käskee kirjoittamalla syötteitä, Maple laskee ja tulostaa. Aritmetiikkaa: restart; 3 + 5*2 + (a^2)^4; Alkeisfunktioita: exp(x); e x (8.1) (8.2) exp(ln(x)); ln(exp(x)); cos(x)^2 + sin(x)^2; x (8.3) (8.4) simplify(cos(x)^2 + sin(x)^2); 1 (8.5)
cos(x)^2 - sin(x)^2; simplify(cos(x)^2 - sin(x)^2); (8.6) (8.7) cosh(x)^2 - sinh(x)^2; simplify(cosh(x)^2 - sinh(x)^2); 1 simplify(cosh(x)^2 + sinh(x)^2); (8.8) (8.9) (8.10) Likiarvon laskeminen: luku := sin(1); (8.11) evalf(luku); 0.8414709848 (8.12) exp(i*0), exp(i*pi/2), exp(i*pi), exp(-i*pi); # käskyjono exp(i*0.3*pi); evalc(exp(i*0.3*pi)); (8.13) (8.14) (8.15) evalf(exp(i*0.3*pi)); Lausekkeiden käsittelyä: simplify((x-1)^2 + (x+2)^2); (8.16) (8.17) lauseke := (x-a)^3; expand(lauseke); (8.18) (8.19) tekijat := factor(x^4-10*x^3 + 35*x^2-50*x + 24); tekijat; expand(tekijat); (8.20) (8.21) (8.22)
(8.22) 3. Funktiot, listat, piirtely Maple-käskyjen tavallisimmat rakenteet ovat (tällaisinaan eivät tietysti tuota mitään mielekästä!) jokinkäskytaifunktio(muuttuja1, muuttuja2, etc); # ja tässä saa olla kommentti, jota ei suoriteta (9.1) jokinmuuttuja := jokinlauseke; jokinmuuttuja := jokinkäskytaifunktio(muuttujat); (9.2) (9.3) Esimerkki 1. Peruspiirtelyä?plot # katsotaan Helpistä plottia plot(x^2, x = -2..2, y = 0..6);
plot(1/x, x = -2..2); Tehtävä 1: Muunna ylläoleva piirtokäsky niin, että se tuottaa paremman kuvion. plot(1/x, x = -4..4, y = -4..4); # esimerkiksi
Piirretään vielä käyräparvia: plot([x^2, x^3, x^4], x = -2..2, y = -4..4);
ft := seq(x^k, k = 1..10); {ft}; [ft]; (9.4) plot([ft], x = -1..1, scaling=constrained); (9.5)
Esimerkki 2. Funktion määrittely f := x - 2*(x-1)*cos(x); (9.6) f(0); f(pi); f(2*a); plot(f); (9.7) (9.8) (9.9)
plot(f, scaling = constrained);
Tehtävä 2: Piirrä edellisen funktion f kuvaaja välillä [0, 2 ]. plot(f, 0..2*Pi);