SAGE
A Matek.hu wikiből
Történeti áttekintés
Próbáljuk meg elképzelni az írott kommunikáció történelmét, ha valaki sajátjának nyilvánította volna a nyomdagépet és úgy döntött volna, hogy nem fedi fel a titkát. Természetesen leragadtunk volna a lúdtollnál és a pergamennél, vagy ha mégsem: ez a szabad írásbeli megnyilvánulást veszélyeztette, de legalábbis késleltette volna.
Számos olyan példáról tudunk, amikor egyes emberek, szervezetek tulajdonjogot képeztek az intellektuális megnyilvánulás alapvető eszközeire. Az egyik ilyen példa a Microsoft Corporation tulajdonjoga a Windows operációs rendszerre. Szerencsére a technikai haladás hatására a Microsoft fokozatosan kiszorul a piacról. Ebben főként a nyílt forráskódú programoknak van szerepe, így például a Linuxnak.
Nyílt forráskód
A Microsoftnak természetesen van joga ahhoz, hogy a saját termékét megvédje és értékesítse, azonban ahhoz nincs joga, hogy megállítsa a versenytársait hasonló programok kifejlesztésében, vagy hogy a technikai haladás útjába álljon. Így a nyílt forráskódú programok világszerte terjednek, és nyilvánvaló előnyökkel rendelkeznek.
A nyílt forráskódú programok alapvető ötlete az, hogy bárki tudja őket használni, személyre szabni, és módosítani. Az ilyen programokat elfogadó és használó cégek forrásokat, szakképzést és szakértelmet ajánlanak fel, ami nagy hatással van a tudományra.
Matematika a számítógépen
Mint kiderült, a mai számítógépes matematika abban a helyzetben van, mint a számítógépes szoftverek néhány évvel ezelőtt, a nyílt forráskód elterjedése előtt.
Ha biológiát tanulmányozunk számítógépek segítségével, nem fontos tudni, hogy a számítógép pontosan hogyan működik, mert a számítógép nem tudja reálisan veszélyeztetni az eredményt. De ha matematikát tanulunk számítógépet használva, nagyon fontos tudni, hogy pontosan hogyan éri el eredményeit a számítógép. Ez egy, a matematika és más tudományok közötti alapvető különbségből fakad - a matematikában lehet, és kell is bizonyítani az eredmény érvényességét, felmutatva a számítás alapjait.
Sok matematikus azzal érvel, hogy a számítógépnek nincs helye a matematikában, hogy gátolja a mély megértést, és rákényszeríti a matematikusokat a bonyolult számítások végeredményeiben való vak hitre. Ezek valós kockázatok, de a megoldás az, hogy a számítógép szerepe a matematikában átlátható legyen. A számítógépek már számos figyelemre méltó eredményt értek el a matematika terén, ami pontosan amellett érv, hogy a matematikai international portfolio inc kutatás és a számítógépes matematika összeegyeztethetők. Két korai példa:
- Számolási hibák. Az 1960-as, Melvin Klerer és Fred Grossman által elkezdett számítógépes projekt célja, hogy integrálokat hozzon automatikusan létre, és azokat vizsgálja. Klerer és Grossman hamar rájött, hogy számos használatban lévő matematikakönyv tele van hibákkal. Természetesen először azt feltételezték, hogy a viszonylag új számítógépes módszerek voltak a hibák forrásai, de a teljes körű vizsgálat végül kiderítette, hogy a probléma valójában a tankönyvekben volt. Egyes közzétett táblázatokban a hibaszázalék meghaladta a 25%-ot. Ez, és a hasonló eredmények rákényszerítették az embereket a számítógépek matematikában betöltött szerepének átértékelésére.
- A négyszín-tétel térkép. A négyszín-tétel azt állítja, hogy egy térképet sikeresen ki lehet színezni 4 különböző színnel úgy, hogy a szomszédos területek különböző színűek legyenek. Mint ismert, a probléma első bizonyítása számítógép segítségével történt, és ma sem ismert egyszerű bizonyítás rá, amely nélkülözné a számítógépes részt.
A fenti, és azokhoz hasonló projektek hatással voltak arra, hogy a matematikusok másfajta hozzáállással közelítsenek a számítógépek matematikában való helyének meghatározásához. Újabban a számítógépre úgy tekintenek, mint egyfajta kutatási asszisztensre, amely mind az elméleti, mind az alkalmazott matematikusok számára fontos partner.
A matematikai szoftverek területének is megvannak a maga nagy játékosai. A Wolfram és a Maplesoft cégek - a Mathematica és a Maple fejlesztői – hamarosan ugyanazon kihívásokkal néznek szembe, mint a Microsoft. A nyílt forráskód ereje egyre nyilvánvalóbb, ahogyan az időben előre haladunk. S van egy fontos további érv is a nyílt forrású matematikai szoftverek javára: ha a zárt forráskódú szoftveren alapuló matematikai megoldás részben vagy teljes egészében meg nem vizsgált kódon alapszik, az az eredményre vonatkozóan is végzetes lehet.
Sage
Mint kiderült, vannak nagyon ígéretes és aktív nyílt forráskódú matematikai szoftver projektek. Az egyik legújabb projekt, jelen írás témája, a Sage: egy ingyenes, nyílt forráskódú projekt nemzetközi hozzájárulással és támogatással. A Sage fejlesztése nagyon aktívan történik, és úgy tűnik, hogy a létrejött terméket egyfajta "kritikus lendületként" lehetne leírni, amely egyre nagyobb figyelmet és támogatást vonz. Olyan felhasználók ezreiről beszélünk, akik sokkal inkább egyéni, független munkát szeretnek végezni, kisebb hatáskörű projektekben.
Az alapvető cél az, hogy a Sage a matematikának ugyanazt nyújtsa, mint amit a Linux az operációs rendszerek felhasználói számára - egy olyan eszközt a szabad, kreatív matematikai kifejeződés számára, ami mentes érdekektől és korlátozásoktól. Talán nem meglepő, hogy a Sage legjobban Linuxon működik (habár Windowson futtatható verziója is létezik). A Sage teljes kódjának alapja, hogy szabadon módosítható a nyílt forráskódú programok hagyományait követve, ezért a Sage hozzáférhető oly módon, ahogy más programok, mint a Mathematica nem. William Stein (University of Washington) 2005 februárjában adta ki a Sage első változatát. A projekt honlapja: http://www.sagemath.org. Regisztráció után azonnal kipróbálható a szerverükön. A regisztráció gyors, még e-mail cím sem kell.
Egy további magyarországi Sage szerver a http://sage.math.u-szeged.hu oldalról érhető el. Erre jelen pillanatban automatikusan lehet regisztrálni.
Kezelőfelület
Többféle kezelőfelület létezik, pl. kérdezz-felelek mód ("sage" beírása parancssorban). Ebben a leírásban a legelterjedtebb webes kezelőfelületről esik szó.
Home oldal
A webes felületre regisztráció után tudunk bejelentkezni. Belépés után balra a következőket látjuk:
- New Worksheet: Új munkafüzetet tudunk létrehozni.
- Upload: Ezzel tudunk visszatölteni egy korábban letöltött munkafüzetet.
Alatta néhány gomb látható: kiválasztunk pipával egyes munkafüzeteket, majd ezekkel tudunk műveleteket végezni:
- Archive/Unarchive: Munkafüzetet archiválhatunk ill. visszavonhatjuk az archiválást.
- Delete: Munkafüzetet törölhetünk.
- Stop: Futás leállítása (a szerver erőforrásainak megkímélése miatt lehet célszerű).
Jobbra fent a következő linkek láthatók:
- Home: Itt nézhetjük meg a munkafüzeteinket.
- Published: A megosztott munkafüzeteket láthatjuk itt. Publikusak, a Publish gombbal tudunk majd idetenni saját munkát.
- Help: Segítség angolul.
- Settings: Itt változtathatunk jelszót és állíthatjuk be, hogy milyen időközönként mentsük automatikusan munkánkat.
- Sign out: Kijelentkezés.
Már létező munkafüzetet a sor eleji File mezőt legördítve
- Rename...: átnevezhetünk,
- Edit: szerkeszthetünk,
- Copy worksheet: másolatot készíthetünk belőle,
- Collaborate: megoszthatjuk más felhasználókkal,
- Publish: publikussá tehetjük az interneten,
- Revision: az adott munkafüzet összes módosítását megtekinthetjük.
Munkafüzetek parancsai
Nyitott munkafüzet esetén a jobb oldalt lévő gombok:
- Save: mentés,
- Save & quit: mentés és kilépés,
- Discard & quit: kilépés mentés nélkül,
- Undo: korábbi állapot visszaállítása,
- Publish: publikálás.
Balra a File... menüpont hasonló opciókat tartalmaz, mint az előző File menüpont. Az alábbi parancsok találhatók az Action menüpontban:
- Interrupt: a számítás megszakítása,
- Restart worksheet: megszakít minden számolást, törli a változókat,
- Save and quit worksheet: elmenti a munkafüzetet és kilép,
- Evaluate all: az összes cellát végrehajtja sorban,
- Hide/Show all output: a cellák eredményét elrejti/megjeleníti,
- Delete all output: letörli a cellák eredményét,
- One/Multi cell mód: egyszerre csak egy/minden cellát látunk.
Néhány fontos billentyűkombináció és egérkattintási trükk:
- sor végi Enter: új sort kezd,
- Shift + Enter: végrehajtja az adott cellát,
- Escape: futtatás megszakítása,
- Ctrl + Backspace: az adott cellát összevonja az előző cellával,
- Alt + Enter: futtatja a cellát, majd utána új mezőt nyit,
- a kék csíkra kattintva lehet egérrel új mezőt nyitni,
- parancs? + Shift Enter: a parancs leírását adja.
Részletes felhasználói dokumentáció
Egy program alapvető megismerése példákon keresztül történhet. Azért választottuk a Matematikai praktikum tárgyat, mert az Szegedi Tudományegyetemen beindult BSc képzések alapozó tárgya, ezt tanulják a legtöbben: matematika szakos, illetve egyéb természettudományos hallgatók is. A példák egyszerűek, megértésükhöz nem kell középiskolásnál magasabb matematikai tudás, kevés ötlettel, algoritmikus technikákkal megoldhatók, és ezek a példák már elég sokrétűen bemutatják a Sage használatát (és korlátait). Az intelligens használathoz azonban meg kell érteni, hogy a gép mindig is gép marad, és a szakértői rendszer csak kisegíti, kiegészíti a felhasználót.
Az alábbi feladatok Bagota Mónika, Kovács Zoltán, Krisztin Német István: Matematikai praktikum feladatgyűjtemény[1] című könyv alapján kerültek feldolgozásra. Az egyes feladatok után zárójelben a feladatgyűjteményben szereplő sorszám van feltüntetve, a feladatok szövege után pedig a megoldás lépeseit követhetjük nyomon.
A Sage-et bemutató példák két blokkra lettek osztva: az első blokk a bemenetet (inputot), a második blokk a kimenetet (outputot) mutatja. A Sage munkalapokon ezek nem pontosan így (némileg más formátumban) jelennek meg. Több helyen túl hosszú lett volna a bemenet vagy a kimenet, ilyen esetekben a megjelenő szövegeket úgy tördeltük, hogy a tört sorok végére "\" (visszaper) karaktert írtunk.
Műveletek kifejezésekkel[2]
1. Számoljuk ki ügyesen! (13. a) feladat)
Megoldás: Az ilyen feladatokat, ahol a prímtényezőkre bontás, egyszerűsítés, szorzattá alakítás a cél, nagyon könnyen meg tudjuk oldani. Egyszerűen a factor parancs után beírjuk az egyszerűsíteni kívánt kifejezést.
factor((437^2-363^2)/(537^2-463^2))
2^2 * 5^-1
Még egy gyors számolás a végén, és készen is vagyunk.
2^2 * 5^-1
4/5
2. Alakítsuk szorzattá az alábbi kifejezést! (14. f) feladat)
Megoldás: Itt is egész egyszerűen a factor kifejezést használjuk.
factor(x^3-2*x^2-4*x+8)
(x - 2)^2*(x + 2)
3. Bontsuk prímtényezőire a 899-et! (13. c) feladat)
Megoldás: Először is nézzük meg, hogy lehetséges-e ez, vagyis hogy a 899 prímszám, avagy sem! Ezt az is_prime() paranccsal tudjuk megtenni. A Sage ugyanis logikai műveleteket is tud kezelni.
is_prime(899)
False
Nem prím, tehát prímtényezőkre tudjuk bontani.
factor(899)
29 * 31
Elsőfokú egyenletek, egyenlőtlenségek[3]
1. Oldjuk meg a következő egyenletrendszert! (50. b) feladat)
Megoldás: A változók definiálása után írjuk fel az egyenleteket!
var("x,y") egyenlet1 = -3*x + 4*y == -14 egyenlet2 = 2*x + 6*y == 18
Szorozzuk meg az első egyenletet 2-vel, míg a másodikat 3-mal! A print parancs azért kell, hogy ne csak a cella utolsó eredményét lássuk, hanem mind a kettőt.
print 2*egyenlet1 print 3*egyenlet2
-6*x + 8*y == -28 6*x + 18*y == 54
Így 2 új egyenlethez jutottunk. Adjuk össze őket! Az egyenletekkel, egyenlőtlenségekkel számolni is lehet, csak arra vigyázzunk, hogy ez a számolás a relációk jelentésével nem törődik, azaz pl. egy egyenlőtlenségnél a relációjel a − 1-gyel való szorzásnál nem fordul meg!
egyenlet3 = -6*x + 8*y == -28 egyenlet4 = 6*x + 18*y == 54 egyenlet3 + egyenlet4
26*y == 26
Ebből pedig az y = 1 megoldás adódik. Ezt az eredményt a második egyenletbe behelyettesítve, megkapjuk x-et is.
egyenlet3=2*x+6==18 solve(egyenlet3,x)
[x == 6]
Tehát a megoldás: x = 6, y = 1.
2. Zsófi életkora 16-tal több Tibi és Gabi életkora összegénél. Zsófi korának négyzete 1632-vel nagyobb, mint Tibi és Gabi évei összegének négyzete. Mi az összege hármójuk életkorának? (58. feladat)
Megoldás: Zsófi életkorát jelöljük x-szel, Tibi és Gabi életkorának összegét pedig y-nal. Ekkor két egyenletet tudunk felírni.
x és y a két ismeretlen.
var("x,y") egyenlet1=x-16==y egyenlet2=x^2-1632==(x-16)^2
És már csak meg kell oldanunk a felírt egyenletrendszert. Több egyenlet esetén listát használunk; az ismeretlenek is tehetők listába.
solve([egyenlet1,egyenlet2],x,y)
[x == 59, y == 43]
Zsófi tehát 59 éves, míg Tibi és Gabi életkorának összege 43. Együttes életkoruk pedig egy egyszerű összeadással kiszámolható.
x=59 y=43 x+y
102
Hármójuk életkorának összege 102.
Másodfokú egyenletek, egyenlőtlenségek[4]
1. Oldjuk meg a következő egyenlőtlenséget! (75. j) feladat)
Megoldás: Először azt kell megállapítani, hogy a nevező mely értékeknél lesz 0. Ehhez a következő egyenletet kell megoldani.
egyenlet1=2*x^2-5*x-3==0 solve(egyenlet1,x)
[x == 3, x == (-1/2)]
Az egyenlőtlenséget átrendezve, tehát a 2-őt átvíve a bal oldalra, majd közös nevezőre hozva a tagokat egy új egyenlőtlenséget kapunk. A show függvény a megjelenítésre használható, a képletek szép kiírására, és megjeleníti a grafikai objektumokat is.
egyenlet2=(-3*x^2+13*x-4)/(2*x^2-5*x-3)<0 show(egyenlet2)
-(3x^2-13x+4)/(2x^2-5x-3)<0
Grafikus úton oldjuk meg. Közös koordináta-rendszerben ábrázoljuk a számlálót és a nevezőt is.
A számláló narancssárga, a nevező pedig zöld színű lesz az ábrán.
g=plot(-3*x^2+13*x-4,-1,5,color="orange") h=plot(2*x^2-5*x-3,-1,5,color="green")
A grafikai objektumok összeadhatók, ekkor egyetlen objektummá válnak, azaz egy ábrában jelennek meg. Használhatjuk a show(g+h) kifejezést is.
sum([g+h])
A nevezőbeli függvény zérushelyeit már kiszámoltuk, a számlálóét is hasonlóképpen megállapíthatjuk.
egyenlet3=-3*x^2+13*x-4==0 solve(egyenlet3,x)
[x == (1/3), x == 4]
Ezekbe a pontokba egyeneseket húzunk az y-tengellyel párhuzamosan, 5 intervallumra felosztva így az x-tengelyt.
a=line([(-1/2,-25),(-1/2,25)]) b=line([(1/3,-25),(1/3,25)]) c=line([(3,-25),(3,25)]) d=line([(4,-25),(4,25)]) show(g+h+a+b+c+d)
Egy tört értéke akkor negatív, ha a számláló és a nevező előjele különbözik, tehát a +/- vagy a -/+ eseteket keressük. Ezt pedig az ábráról könnyedén leolvashatjuk.
A megoldás tehát: x < − 1 / 2 vagy 1 / 3 < x < 3 vagy 4 < x.
Abszolút érték[5]
1. Oldjuk meg a következő egyenletet! (105. feladat)
Megoldás: Tegyünk első lépésként néhány megállapítást. Egyrészt bármely szám abszolút értéke nemnegatív, másrészt három nemnegatív kifejezés összege akkor lehet csak 0, ha a kifejezések mindegyike 0.
Tehát 3 egyenletet írhatunk fel a változók bevezetése után.
var("x,y,z") egyenlet1=x+y-13==0 egyenlet2=x-z-5==0 egyenlet3=y-z-2==0
Oldjuk meg ezt a háromismeretlenes, 3 egyenletből álló egyenletrendszert!
solve([egyenlet1,egyenlet2,egyenlet3],x,y,z)
[x == 8, y == 5, z == 3]
Tehát a feladat megoldása a (8,5,3) számhármas.
2. Oldjuk meg a következő egyenlőtlenséget! (107. h) feladat)
Megoldás: Oldjuk meg grafikusan! | x | = x, ha
, és | x | = − x, ha
. Vagyis az egyenlőtlenség bal oldalán álló törtfüggvényt úgy tudjuk ábrázolni, ha közös koordináta-rendszerben ábrázoljuk az alábbi függvényeket.
, ha
a=plot(1/(x-3),xmin=0,xmax=7,ymin=-3,ymax=3,\ detect_poles='show',rgbcolor="red")
, ha
b=plot(-1/(x+3),xmin=-6,xmax=0,ymin=-3,ymax=3,\ detect_poles='show',rgbcolor="green")
Illetve ábrázoljuk még az x = 1 / 2 konstans függvényt is!
c=plot(1/2,xmin=-8,xmax=8) d=a+b+c show(d)
Végül leolvassuk az eredményt az ábráról, azaz megállapítjuk, hogy a törtfüggvények milyen intervallumon haladnak a konstans függvény alatt. A megoldás tehát: x < − 5 vagy − 3 < x < 3 vagy 5 < x.
Négyzetgyökös egyenletek, egyenlőtlenségek[6]
1. Oldjuk meg a következő egyenletet! (112. k) feladat)
Megoldás: Kikötéseket kellene tennünk x-re, de a 3 gyökjel miatt ez nagyon bonyolult lenne, így inkább a megoldás végén ellenőrzünk. Első lépésként, mivel mindkét oldal pozitív, négyzetre emelhetünk. Ekkor kapjuk a
egyenletet. Mindkét oldalból 23-at kivonva, majd az így kapott egyenletet ismét négyzetre emelve a
egyenlet adódik. Kis átrendezés után harmadszorra is négyzetre tudunk emelni: (
. Innen rendezéssel egy egyszerű másodfokú egyenlethez jutunk: x2 − 5x − 84 = 0.
egyenlet1=x^2-5*x-84==0
Ami könnyen megoldható a solve paranccsal x-re.
solve(egyenlet1,x)
[x == 12, x == -7]
Amint látható, 2 megoldást kaptunk, helyettesítsük vissza ezeket az eredeti egyenletbe, hogy lássuk, valóban megoldások-e.
Jelöljük a-val az eredeti egyenlet (ezt p-vel jelöljük) bal oldalát. A left() helyett az lhs() vagy left_hand_side() alakokat is használhatjuk.
p=sqrt(23+sqrt(2*x-sqrt(5*x^2-21*x-68)))==5 a=p.left()
Az a kifejezésben 12-őt x helyére beírva, kapjuk a bal oldal értékét.
a(x=12)
Tehát a bal és jobb oldal megegyezik, így az x = 5 megoldás.
Hasonlóképpen ellenőrizzük az x = − 7 megoldást is, csak ekkor az a kifejezésben x helyére − 7-et írunk:
a=p.left() a(x=-7)
sqrt(4*sqrt(-2) + 23)
Mivel az sqrt(-2) nem értelmezhető, ezért a − 7 nem megoldás. Így ennek az egyenletnek az egyetlen megoldása az x = 5.
2. Oldjuk meg a következő egyenletrendszert! (124. b) feladat)
Megoldás:
var("x,y")
Az első egyenletből fejezzük ki x-et: x = 10 − y, majd helyettesítsük ezt be a második egyenletbe:
.
A könnyebb számolás érdekében az egyik gyökös tagot, mondjuk a
-t vigyük át a másik oldalra, majd emeljünk négyzetre! Rendezés után egy
-ra másodfokú egyenletet kapunk. Ezt kiszámolva adódik a megoldás.
Egy másik lehetőség, hogy a kapott egyenletet,
-at ismét négyzetre emeljük. Rendezés után így is egy másodfokú egyenlethez jutunk.
egyenlet=y^2-10*y+9==0 solve(egyenlet,y)
[y == 9, y == 1]
Ha y = 9, akkor x = 1, illetve ha y = 1, akkor x = 9. Vagyis az egyenletrendszernek 2 számpár a megoldása. Az egyik az (1,9), a másik pedig a (9,1).
Exponenciális egyenletek, egyenlőtlenségek[7]
1. Oldjuk meg a következő egyenletet! (130. g) feladat)
Megoldás: Először az 1-et írjuk fel 5 hatványaként! 1 = 50. Az exponenciális függvény monotonsága miatt az alap elhagyható. Így a következő alakhoz jutottunk:
. Ezt pedig már nagyon egyszerűen meg tudjuk oldani.
Szorzat értéke akkor 0, ha valamely tényezője nulla. Így rögtön adódik az x = 3 megoldás. A másodfokú egyenletet megoldva pedig újabb megoldásokat kapunk.
egyenlet=x^2+x-2==0 solve(egyenlet,x)
[x == 1, x == -2]
A feladatnak három megoldása van, x = − 2, x = 1 valamint az x = 3.
2. Oldjuk meg a következő egyenletet! (132. d) feladat)
Megoldás: A hatványozás azonosságait felhasználva alakítsuk át egy kicsit az egyenletünket a következő alakra:
. Majd osszunk 2x-nel, illetve 5x-nel, ekkor az alábbi egyenlethez jutunk:
. Ha ezek után a
helyére új ismeretlent vezetünk be és figyelembe vesszük, hogy
, akkor egy másodfokú egyenlet kapunk. Legyen mondjuk az új ismeretlen az y. Így tehát az egyenlet:
var("y") egyenlet=3*y+2*(1/y)==5
Megoldjuk y-ra ezt a másodfokú egyenletet.
solve(egyenlet,y)
[y == 1, y == (2/3)]
Még nem vagyunk készen, hiszen ezek még nem a végső megoldások. Nézzük meg, mennyi lesz az x, ha y = 1. Ehhez ugye a
exponenciális egyenletet kellene megoldani. Így közvetlenül ezt nem tudjuk megoldani. Át kell írnunk a bal oldalt e alapra. Ezt az
összefüggés segítségével tehetjük meg. Tehát
. Ezt már meg tudjuk oldani a solve paranccsal következő módon:
egyenlet1=exp(ln(2/5)*x)==1 solve(egyenlet1,x)
[x == 0]
Ugyanígy az y = 2 / 3 esetben:
egyenlet2=exp(ln(2/5)*x)==2/3 solve(egyenlet2,x)
[x == log(2/3)/log(2/5)]
Ez pedig 2/5 alapú logaritmus 2/3. Ezzel készen is vagyunk.
3. Oldjuk meg a következő egyenlőtlenséget! (142. c) feladat)
Megoldás: Elsőként az 1-et felírjuk 3/5 hatványaként: 1 = (3 / 5)0. Tehát az egyenlet
alakra módosul. A 3/5 alapú exponenciális függvény szigorú monoton csökkenése miatt a relációjel megfordul, vagyis x2 − 3x − 10 < 0. Ezek után már csak a másodfokú egyenlet megoldása következik.
egyenlet=x^2-3*x-10==0 solve(egyenlet,x)
[x == -2, x == 5]
Az adott függvény zérushelyei tehát a − 2 és az 5. A parabola pedig a két érték között halad a nulla alatt, vagyis a megoldás − 2 < x < 5
Le is tudjuk ellenőrizni, hogy jól dolgoztunk-e. Legyen mondjuk az x = 3.
x=3A pow parancs után első paraméterként az alapot adjuk meg, másodikként a kitevőt.
pow(3/5,x^2-3*x-10)
9765625/59049
Ezen pedig látszik, hogy 1-nél nagyobb.
Logaritmikus egyenletek, egyenlőtlenségek[8]
1. Oldjuk meg a következő egyenletet! (144. a) feladat)
Megoldás: Először megpróbálhatjuk felírni a megfelelő Sage-es utasítást:
solve(log(x-2)/log(2)+log(x-4)/log(2)==0,x)
— de hibaüzenetet fogunk kapni, ugyanis a Sage nem tudja átírni polinomra.
A logaritmus azonosságait felhasználva vonjuk össze a logaritmus argumentumait szorzattá, és így oldjuk meg az egyenletet.
solve(log((x-2)*(x-4))/log(2)==0,x)
[x == -sqrt(2) + 3, x == sqrt(2) + 3]
Az egyik gyök valóban megoldás lesz, de a másik sajnos nem, hiszen nincs is értelmezve a log(x − 2), mivel az argumentum negatív.
Jelöljük a kiindulási egyenletünket f(x)-szel.
f(x)=log(x-2)/log(2)+log(x-4)/log(2)
És nézzük meg f(x)-nek az
helyen vett helyettesítési értékét!
N(f.substitute(x=-sqrt(2)+3))
NaN
NaN, vagyis 'not a number', azaz 'nem szám'. Ez stimmel is, hisz ezt állapítottuk meg az előbb.
Nézzük meg, hogy a másik gyökre ugyanez mit ad!
N(f.substitute(x=sqrt(2)+3))
2.22044604925031e-16
Ez egy 0 körüli érték, tehát jó a megoldásunk.
Valójában az eredeti feladatban egy x > 4 kikötést kellene tennünk. Ha ezt megtesszük (bár a Sage szimbolikusan nem tudja megoldani az egyenletet), közelítő megoldást kapunk rá:
find_root(f(x)==0,4,10)
4.4142135623730949
Azt kértük, hogy a [4,10] intervallumon keressen gyököt a Sage. Fontos, hogy a Sage nem minden esetben ad jó választ ilyenkor. Célszerű a 4 helyett egy ennél kissé nagyobb számot megadni a biztos működéshez, pl. 4.01-et.
Trigonometrikus egyenletek, egyenlőtlenségek[9]
1. Oldjuk meg az alábbi trigonometrikus egyenletet! (178. c) feladat)
Megoldás: Ennek az egyenletnek a megoldása roppant egyszerű, csak a solve parancsot kell alkalmaznunk.
egyenlet=tan(x)^2==1 solve(egyenlet,x)
[x == -1/4*pi, x == 1/4*pi]
Figyelembe véve a tangens függvény periodicitását, a megoldások:
és
, ahol k egész szám.
2. Oldjuk meg a következő egyenletet! (178. g) feladat)
Megoldás: A Sage így nem tudja ezt a feladatot megoldani:
solve(sin(x)*cos(x)==-3/4,x)
— hibaüzenetet fogunk kapni. Először át kell egy kicsit alakítanunk:
egyenlet=(1/2)*sin(2*x)==-3/4 solve(egyenlet,x)
[x == -1/2*arcsin(3/2)]
N(-1/2*arcsin(3/2))
NaN
Azt kaptuk, hogy NaN, 'not a number', vagyis az eredmény nem szám, ami helytálló is, mivel az egyenletnek valóban nincs megoldása.
Elemi síkgeometria[10]
1. Egy dombra a tengerszintről két egyenes ösvény vezet fel, ellentétes oldalról. Az ösvények emelkedési szöge 30° ill. 45°, kiindulópontjaik távolsága 500 m. Milyen magas a domb? (240. feladat)
Megoldás: Először is rajzoljunk fel egy ábrát!
Ez a P, zöld háromszöget határozza meg:
P = polygon([[0,0], [4,0], [4,4]], rgbcolor="green")
Ez pedig a sárgát:
Q = polygon([[4,0], [11,0], [4,4]], rgbcolor="yellow")
A síkidomok méretarányosságát adja meg a következő parancs:
Q.set_aspect_ratio(1) P.set_aspect_ratio(1)
A háromszögek csúcsait így írjuk rá az ábrára:
q=text('A',(-0.5,-0.75)) r=text ('B', (4,-0.75)) s=text('C', (4,4.25)) t=text('D',(11,-0.75))
A Q, P, q, r, s és t alakzatokat közös koordináta-rendszerben jelenítsük meg:
g=Q+P+q+r+s+t
Az ábra az adott tartományokban jelenik csak meg:
g.show(xmin=-1, xmax=12, ymin=-1, ymax=5)
Az AB szakaszt jelöljük x-szel, és mivel a feladat szövege szerint az AD távolság 500 m, így a BD szakasz hossza 500 − x. A BC szakaszt (ez ugye a keresett magasság) jelöljük m-mel.
m-t és x-et változónak tekintjük:
var("x, m")
(x, m)
A zöld háromszögben az A csúcsnál lévő szög 45 fokos, így erre a háromszögre fel tudjuk írni a következőt:
egyenlet1=tan(pi/4)==m/x
A sárga háromszögre hasonlóképpen felírható, hogy:
egyenlet2=tan(pi/6)==m/(500-x)
Most már csak annyi a dolgunk, hogy ezt a kétismeretlenes, 2 egyenletből álló egyenletrendszert megoldjuk. Több egyenlet esetén listát használunk; az ismeretlenek is tehetők listába.
solve([egyenlet1,egyenlet2],[x,m])
[x == 250*sqrt(3) - 250, m == 250*sqrt(3) - 250]
Látjuk, hogy x és m értéke megegyezik. Ez nem is csoda. Mivel tan(π / 4) = 1, így az első egyenletből m = x adódik. Vagyis a zöld háromszög egyenlő szárú derékszögű háromszög.
Utolsó lépésként pedig kiszámoljuk, hogy mennyi valójában ez a kapott érték.
Azt a számot, aminek a gyökét akarjuk kiszámolni, zárójelbe tesszük, és pontot teszünk utána. Csak így kapunk eredményt. (A pont kiírásával kényszerítjük a Sage-et, hogy ne szimbolikusan, hanem numerikusan számoljon. Ez egy szokásos trükk nemcsak a komputeralgebrai rendszereknél, hanem általában a programozási nyelveknél is.)
250*sqrt(3.) - 250
183.012701892219
Ezzel készen is vagyunk, megoldásként azt kaptuk, hogy a domb 183 m magas.
2. A szegedi Dóm toronyórájának nagymutatója 3 m, kismutatója 2 m. Milyen messze vannak egymástól a mutatók végpontjai pontban 8 órakor? (255. feladat)
Megoldás: Rajzoljuk fel a háromszöget!
P = polygon([[1,1], [3,2],[3,5]], rgbcolor="red")
A következő sor egy olyan kört fog rajzolni, amelynek (3,2) a középpontja és 3.25 a sugara.
Q = circle((3,2),3.25) P.set_aspect_ratio(1) Q.set_aspect_ratio(1) q=text('A',(0.9,0.9)) r=text ('B', (3,1.75)) s=text('C', (3,5.15)) g=P+Q+q+r+s show(g)
(Figyeljük meg, hogy a Sage különbséget tesz kisbetű és nagybetű között: mást jelent a Q és mást a q változó!)
A feladat szövege szerint nekünk az AC szakasz távolságát kell kiszámítanunk. Jelöljük ezt x-szel. Írjuk fel rá a koszinusztételt. Ehhez azonban előbb még meg kell határoznunk a mutatók által bezárt szöget. Pontban 8 órakor a kis- és a nagymutató 120 fokos szöget zár be egymással. Tehát a koszinusztétel:
.
egyenlet=x^2==2^2+3^2-2*2*3*cos(2*pi/3) solve(egyenlet,x)
[x == -sqrt(19), x == sqrt(19)]
Mivel távolságot keresünk, ezért biztos, hogy a negatív megoldás nem megoldás.
sqrt(19.)
4.35889894354067
Tehát ha pontosan 8 óra van, akkor a Dóm mutatóinak végpontjai egymástól 4.36 m távolságra vannak.
Koordinátageometria[11]
1. Számítsuk ki a C(3;2) középpontú kör sugarát, ha tudjuk, hogy érinti a 4x − 3y = 2 egyenletű egyenest. (422. feladat)
Megoldás: Jelöljük e-vel az adott egyenest. Ha az egyenes és a kör metszéspontját E-vel jelöljük, és összekötjük a kör C középpontjával, akkor egy e-re merőleges f egyenest kapunk. Az e egyenesnek egy irányvektora
. Az e egyenes irányvektora ugyanaz, mint az f egyenes normálvektora, vagyis
. Adott tehát az
normálvektor és a C(3,2) pont, ezekből pedig fel tudjuk írni az f egyenes egyenletét:
f=3*x+4*y==3*3+4*2
Ezt metszve az e egyenes egyenletével megkapjuk az érintési pont koordinátáit.
e=4*x-3*y==2 solve([e,f],[x,y])
x == (59/25), y == (62/25)
Az érintési pont tehát az
pont.
A kör sugarának kiszámításához, a C és E pontok távolságát kell meghatároznunk az
képlet alapján.
sqrt((3-59/25)^2 +(2-62/25)^2)
4/5
Tehát a kör sugara 0,8.
Ismerve a kör sugarát és az egyenesek egyenletét fel is tudunk egy ábrát rajzolni.
C=point((3,2)) K=circle((3,2),0.8) K.set_aspect_ratio(1) E=point((59/25,62/25)) e=line([(1.5,4/3),(3,10/3)]) f=line([(2,11/4),(4,5/4)]) p=text('e',(3,3)) q=text('f',(4,1.5)) r=text('C',(3,1.9)) s=text('E',(2.5,2.5)) show(C+K+E+e+f+q+p+s+r)
2. Számítsuk ki az OA és az OB vektorok hosszát, skaláris szorzatát, valamint hajlásszögét, ha O(0,0), A(2,5) és B(-3,4). (400. a) feladat)
Megoldás: Rajzoljunk fel egy ábrát!
a=arrow((0, 0), (2, 5)) b=arrow((0, 0), (-3, 4)) p=text('a',(2,4)) q=text('b',(-3,3)) show(a+b+p+q)
Először számoljuk ki a vektorok hosszát! Nézzük először az a vektorét:
sqrt((2-0)^2+(5-0)^2)
sqrt(29)
Majd a b hosszát:
sqrt((-3-0)^2+(4-0)^2)
5
Skaláris szorzatuk pedig az
képlettel számolható. Vagyis:
2*-3 + 5*4
14
A hajlásszög pedig:
, ahol
a vektorok által bezárt szög,
a skaláris szorzat,
pedig a vektorok abszolút értékeinek szorzata.
14/(sqrt(29.)*5)
0.519946946895745
solve(cos(x)==0.519946946895745,x)
[x == arccos(4705/9049)]
Sorozatok[12]
1. Egy színházi nézőtéren 24 sor van. Az első sorban 18 hely van, utána minden sorban hárommal több, mint az előzőben. Hány férőhelyes a színház? (439. feladat)
Megoldás: A feladatban egy olyan számtani sorozatról van szó, melynek az első tagja 18, differenciája pedig 3, hiszen az első sorban 18 hely van, és a helyek száma soronként 3-mal nő.
a1=18 d=3
Ahhoz, hogy válaszolni tudjunk a feltett kérdésre, ki kell számolni a sorozat első 24 tagjának összegét. Egyszerűen csak az
képletet kell használnunk.
(2*a1+23*d)/2*24
1260
Tehát a színházi nézőtéren 1260 férőhely van.
2. Egy mértani sorozat 7. és 4. tagjának különbsége − 189, 5. és 4. tagjának különbsége pedig − 27. Melyik ez a sorozat? (457. feladat)
Megoldás: Gyűjtsük ki először az adatokat! Egyrészt a7 − a4 = − 189, valamint a5 − a4 = − 27. A sorozat kvóciensét jelöljük q-val.
var("a4, a5, a7, q")
A mértani sorozat n-edik tagjára vonatkozó képlet segítségével a következőket írhatjuk fel:
és
. Ezt behelyettesítve az előbb felírt összefüggésekbe kapjuk, hogy:
egyenlet1=a4*(q^3-1)==-189 egyenlet2=a4*(q-1)==-27
Osszuk el egymással a két egyenletet!
egyenlet1/egyenlet2
(q^3 - 1)/(q - 1) == 7
A q − 1 nem lehet 0, így a kvóciens nem lehet 1, hisz akkor a sorozat minden tagja azonos lenne. Szorozzunk be (q − 1)-gyel, így a következő egyenletet kapjuk:
(egyenlet1/egyenlet2)*(q-1)
q^3 - 1 == 7*q - 7
Ezt rendezve harmadfokú egyenlethez jutunk, amit megoldunk q-ra.
egyenlet=q^3-7*q+6==0 solve(egyenlet,q)
[q == 1, q == 2, q == -3]
Három megoldást kaptunk, viszont az első esetet már az előbb kizártuk. Nézzük mi lesz a sorozat első tagja, ha a kvóciens 2. Ezt egyenlet2-be helyettesítsük be, és kapjuk, hogy a4 = − 27, és mivel
, ezért egyszerű számolással adódik az eredmény: a1 = − 27 / 8.
A másik esetben, vagyis amikor q = − 3, az
összefüggésből az a4 = 27 / 4, majd a1 = − 1 / 4 következik.
Tehát a feladat megoldása két sorozat: a1 = − 27 / 8, q = 2 és a1 = − 1 / 4, q = − 3.
Felhasznált irodalom
- Bagota Mónika, Kovács Zoltán, Krisztin Német István: Matematikai praktikum feladatgyűjtemény
- Bevezető: http://arachnoid.com/sage/
Külső kivatkozások
Jegyzetek
- ↑ Bagota Mónika, Kovács Zoltán, Krisztin Német István: Matematikai praktikum feladatgyűjtemény
- ↑ Sage munkalap: Műveletek kifejezésekkel
- ↑ Sage munkalap: Elsőfokú egyenletek, egyenlőtlenségek
- ↑ Sage munkalap: Másodfokú egyenletek, egyenlőtlenségek
- ↑ Sage munkalap: Abszolút érték
- ↑ Sage munkalap: Négyzetgyökös egyenletek, egyenlőtlenségek
- ↑ Sage munkalap: Exponenciális egyenletek, egyenlőtlenségek
- ↑ Sage munkalap: Logaritmikus egyenletek, egyenlőtlenségek
- ↑ Sage munkalap: Trigonometrikus egyenletek, egyenlőtlenségek
- ↑ Sage munkalap: Elemi síkgeometria
- ↑ Sage munkalap: Koordinátageometria
- ↑ Sage munkalap: Sorozatok

