Informatika1-2023/Gyakorlat10
(egy szerkesztő 2 közbeeső változata nincs mutatva) | |||
59. sor: | 59. sor: | ||
# Rajzolj egy cosinus-görbét 0-tól 4*pi -ig! (plot(fv, (x, from, to)) | # Rajzolj egy cosinus-görbét 0-tól 4*pi -ig! (plot(fv, (x, from, to)) | ||
− | # Rajzold ki az (x-2)^2 + 3 másodfokú polinomot -2-től 4-ig, zöld színnel! | + | # Rajzold ki az (x-2)^2 + 3 másodfokú polinomot -2-től 4-ig, zöld színnel! (color="green") |
− | # Rajzold az előző mellé (a ''show'' függvénnyel) az x^3-3*x + 6 harmadfokú polinomot pirossal! | + | # Rajzold az előző mellé (a ''show'' függvénnyel) az x^3-3*x + 6 harmadfokú polinomot pirossal! (show(plot1 + plot2)) |
− | # Rajzoljunk kört: '' | + | # Rajzoljunk kört: ''circle((középpont koordinátái), sugár, egyebek)''. Az "egyebek" lehetnek: szín, ''aspect_ratio=True'' hogy az x és y tengelyek skálázása azonos legyen (különben ellipszist kaphatunk!). |
+ | |||
+ | === Mátrixok === | ||
+ | |||
+ | Mátrixot megadhatunk a következõ módon: | ||
+ | <python> | ||
+ | m = matrix([[1, 0], [0, 1]]) | ||
+ | </python> | ||
+ | Ez a következõ mátrixot eredményezi: | ||
+ | 1 0 | ||
+ | 0 1 | ||
+ | |||
+ | Blokkmátrixot, csupa 1-es mátrixot, továbbá fõátlóval adott mátrixot is kényelmesen adhatunk meg: | ||
+ | <python> | ||
+ | A = diagonal_matrix([1, 5]) | ||
+ | B = ones_matrix(2, 2) | ||
+ | block_matrix([[A, -1*A], [A^(-1), B]]) | ||
+ | </python> | ||
+ | Ez a következõ mátroxot eredményezi: | ||
+ | 1 0| -1 0 | ||
+ | 0 5| 0 -5 | ||
+ | ------+------- | ||
+ | 1 0| 1 1 | ||
+ | 0 1/5| 1 1 | ||
+ | |||
+ | Egy mátrix determinánsát kiszámolhatjuk a '''det''' metódussal: | ||
+ | <python> | ||
+ | m.det() | ||
+ | </python> | ||
+ | |||
+ | |||
+ | === Blokkmátrix === | ||
+ | |||
+ | Számoljuk ki a determinánsát a következõ blokkmátrixnak: | ||
+ | X I | ||
+ | O X | ||
+ | ahol I a 3x3-as egységmátrix és O a 3x3-as csupa 0 mátrix, X pedig a következõ: | ||
+ | 0 -1 -1 | ||
+ | -1 0 -1 | ||
+ | -1 -1 0 | ||
+ | |||
+ | === Egyenlet megoldás === | ||
+ | |||
+ | Oldjuk meg az Ax = b alakú egyenletrendszert, ahol A és b rendre: | ||
+ | |||
+ | 1 -1 0 | 1 | ||
+ | 3 1 -1 | 1 | ||
+ | -2 0 1 | 2 | ||
+ | |||
+ | Használjuk az elõadáson tanult '''solve_right''' metódust! | ||
+ | |||
+ | Ha megkaptuk az eredményt, akkor állítsuk át a mátrixot, hogy GF(3) felett legyen értelmezve (a '''change_ring''' metódussal) és nézzük meg így is a megoldást. | ||
+ | |||
+ | === Összefüggõ === | ||
+ | |||
+ | Határozzuk meg, hogy az alábbi mátrix sorai (vagy oszlopai) milyen '''x''' értékekre lesznek összefüggõk. (Használjuk a '''solve''' parancsot a fentiekkel együtt.) | ||
+ | x 0 1 | ||
+ | 0 2 x | ||
+ | 1 x -1 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | = Listaértelmezések = | ||
+ | |||
+ | == Emlékeztetõ == | ||
+ | |||
+ | <python> | ||
+ | [kifejezés for elem in bejárható_objektum] | ||
+ | </python> | ||
+ | Egy olyan listát hoz létre melyben a '''kifejezés''' szerepel a '''bejárható_objektum''' minden elemére. Bejárható objektum például egy lista, az is amit a '''range''' függvény hoz létre. | ||
+ | <python> | ||
+ | [kifejezés if feltétel else kifejezés_alt for elem in bejárható_objektum] | ||
+ | </python> | ||
+ | Mint az elõzõ, de csak azok az elemek lesznek benne melyekre teljesül a '''feltétel'''. | ||
+ | <python> | ||
+ | [kifejezés if feltétel1 else kifejezés_alt for elem1 in bejárható_objektum1 | ||
+ | for elem2 in bejárható_objektum2 | ||
+ | for elemN in bejárható_objektumN] | ||
+ | </python> | ||
+ | Több feltétel és ciklus is írható akár. | ||
+ | |||
+ | Pl: | ||
+ | <python> | ||
+ | [n^2 for n in range(1, 5)] # [1, 4, 9, 16] | ||
+ | [n for n in [-1, 2, -3, 4] if n > 0] # [2, 4] | ||
+ | </python> | ||
+ | |||
+ | == Feladatok == | ||
+ | |||
+ | === Mit csinál? === | ||
+ | |||
+ | Futtassuk le az alábbi példákat és értelmezzük õket mi is történik bennük és hogyan érjük ezt el. | ||
+ | |||
+ | <python> | ||
+ | [n for n in range(1, 10)] | ||
+ | </python> | ||
+ | <python> | ||
+ | [(n, m) for n in range(1, 10) for m in range(1, 5)] | ||
+ | </python> | ||
+ | <python> | ||
+ | [n for n in range(1, 10) if is_prime(n)] | ||
+ | </python> | ||
+ | <python> | ||
+ | [n for n in range(1, 100) if n % 5 == 0 and n % 7 == 1] | ||
+ | </python> | ||
+ | <python> | ||
+ | [(n, m) for n in range(1, 5) for m in range(n, 5)] | ||
+ | </python> | ||
+ | <python> | ||
+ | [(m, n) for n in range(1, 10) for m in range(n, 10) if m % n == 0] | ||
+ | </python> | ||
+ | <python> | ||
+ | sorted([(m, n) for n in range(1, 10) for m in range(n, 10) if m % n == 0]) | ||
+ | </python> | ||
+ | <python> | ||
+ | sum([n for n in range(1, 10) if is_prime(n)]) | ||
+ | </python> | ||
+ | Az utolsóhoz egy kis spoiler, ha nem menne: [https://hu.wikipedia.org/wiki/T%C3%B6k%C3%A9letes_sz%C3%A1mok spoiler] | ||
+ | <python> | ||
+ | [n for n in range(1, 100) if n == sum([m for m in range(1, n) if n % m == 0])] | ||
+ | </python> | ||
+ | |||
+ | === Oldjuk meg === | ||
+ | |||
+ | |||
+ | # Keressük meg az összes olyan 1000 alatti négyzetszámot, melynél eggyel nagyobb szám prím. Pl a 4 ilyen. | ||
+ | # Keressük meg az összes olyan 100 alatti számpárt, melyekre igaz, hogy mindkettő prím és az egészosztással vett eredményük is prím. Pl (11, 2) ilyen. | ||
+ | # Keressük meg az összes egy jegyű számhármast, mely egymás után írva megegyezik a köbeik összegével. Ilyen például az 1, 5, 3, mert 1^3 + 5^3 + 3^3 == 153 | ||
+ | # Keressük meg az összes olyan 1000 alatti számot, melynek négyzete megegyezik az nálánál kisebb osztói köbeinek az összegével. (Egy kis csavar a [https://hu.wikipedia.org/wiki/T%C3%B6k%C3%A9letes_sz%C3%A1mok tökéletes számokon]) | ||
+ | # Keressük meg az összes olyan 10000 alatti számot, mely legalább kétféleképpen írható fel 2 darab szám köbének összegeként. |
A lap jelenlegi, 2023. november 15., 12:38-kori változata
Tartalomjegyzék |
Cocalc és Sage notebook
- Menjünk a cocalc oldalára: notebook (vagy telepíthetünk is magunknak sage-et, de ez sajna windowsra kicsit bonyolultabb: sagemath)
- Regisztráljunk és lépjünk be (nem kell valódi nevet megadni).
- New -> Sagemath worksheet
- A projectek között találjuk majd a "My First Project"-et, ezt automatikusan hozta létre, ha projectekbe akarjuk szervezni a gyakokat, akkor új projecteket kell majd létrehozni, de egy projecten belül lehet több sagemath worksheet is.
- Bal oldalt Explore és itt láthatóak a worksheet-ek.
A sage okos
A sage okosan ki tudja egészíteni a parancsainkat, próbáljuk meg a következõt:
V = Vec[nyomjunk TAB-ot]
Ekkor kiírja a lehetséges parancsokat. Egészítsük ki, hogy a következõt kapjuk:
V = VectorSpace(QQ,3)
Ezzel V-t a racionális test feletti 3 dimenziós vektortérnek definiáltuk.
Írjuk be most, hogy V. és nyomjunk TAB-ot. Felsorolja az összes lehetséges mûveletet, amit V-n tudunk végezni. Ha a parancs végére egy kérdõjelet teszünk, akkor egy rövid leírást is ad róla, hogy mit csinál. Például:
V.basis?
Le is futtathatjuk a parancsot:
V.basis()
Elsõ próbá
- Elsõre nem látszik, de több sorból álló cellák vannak.
- A cellákba írhatunk sage parancsokat, akár többet is. Próbáljuk is ki:
A = Matrix([[1, 1], [1, 0]]) B = Matrix([[-2, 0], [-1, 1]])
- SHIFT + ENTER-el tudjuk lefuttatni a parancsokat. Ekkor sorban futnak le egymás után az egy cellában levõ parancsok.
- Próbáljuk ki, hogy egy új cellába beírjuk, hogy A vagy B és lefuttatjuk. Majd próbáljuk ki az A*B-t.
Kiegészítés elõzõ gyakhoz
- Kicsit furcsa volt amikor a sin(x)cos(x)x^2-et derváltuk majd integráltuk, nem ugyanazt kaptuk vissza.
- De igazából ugyanaz a kifejezés, csak máshogy van felírva:
f = sin(x)*cos(x)*x^2 f1 = diff(f, x) f2 = integrate(f1, x) solve(f == f2, x)
- Azt kapjuk, hogy x vagy 0, vagy sin(2*x) == 2*cos(x)*sin(x) ami igaz, tehát a két függvény megegyezik minden pontban.
Feladatok
Rajzolás a Sage segítségével (plot)
- Rajzolj egy cosinus-görbét 0-tól 4*pi -ig! (plot(fv, (x, from, to))
- Rajzold ki az (x-2)^2 + 3 másodfokú polinomot -2-től 4-ig, zöld színnel! (color="green")
- Rajzold az előző mellé (a show függvénnyel) az x^3-3*x + 6 harmadfokú polinomot pirossal! (show(plot1 + plot2))
- Rajzoljunk kört: circle((középpont koordinátái), sugár, egyebek). Az "egyebek" lehetnek: szín, aspect_ratio=True hogy az x és y tengelyek skálázása azonos legyen (különben ellipszist kaphatunk!).
Mátrixok
Mátrixot megadhatunk a következõ módon:
m = matrix([[1, 0], [0, 1]])
Ez a következõ mátrixot eredményezi:
1 0 0 1
Blokkmátrixot, csupa 1-es mátrixot, továbbá fõátlóval adott mátrixot is kényelmesen adhatunk meg:
A = diagonal_matrix([1, 5]) B = ones_matrix(2, 2) block_matrix([[A, -1*A], [A^(-1), B]])
Ez a következõ mátroxot eredményezi:
1 0| -1 0 0 5| 0 -5 ------+------- 1 0| 1 1 0 1/5| 1 1
Egy mátrix determinánsát kiszámolhatjuk a det metódussal:
m.det()
Blokkmátrix
Számoljuk ki a determinánsát a következõ blokkmátrixnak:
X I O X
ahol I a 3x3-as egységmátrix és O a 3x3-as csupa 0 mátrix, X pedig a következõ:
0 -1 -1 -1 0 -1 -1 -1 0
Egyenlet megoldás
Oldjuk meg az Ax = b alakú egyenletrendszert, ahol A és b rendre:
1 -1 0 | 1 3 1 -1 | 1 -2 0 1 | 2
Használjuk az elõadáson tanult solve_right metódust!
Ha megkaptuk az eredményt, akkor állítsuk át a mátrixot, hogy GF(3) felett legyen értelmezve (a change_ring metódussal) és nézzük meg így is a megoldást.
Összefüggõ
Határozzuk meg, hogy az alábbi mátrix sorai (vagy oszlopai) milyen x értékekre lesznek összefüggõk. (Használjuk a solve parancsot a fentiekkel együtt.)
x 0 1 0 2 x 1 x -1
Listaértelmezések
Emlékeztetõ
[kifejezés for elem in bejárható_objektum]
Egy olyan listát hoz létre melyben a kifejezés szerepel a bejárható_objektum minden elemére. Bejárható objektum például egy lista, az is amit a range függvény hoz létre.
[kifejezés if feltétel else kifejezés_alt for elem in bejárható_objektum]
Mint az elõzõ, de csak azok az elemek lesznek benne melyekre teljesül a feltétel.
[kifejezés if feltétel1 else kifejezés_alt for elem1 in bejárható_objektum1 for elem2 in bejárható_objektum2 for elemN in bejárható_objektumN]
Több feltétel és ciklus is írható akár.
Pl:
[n^2 for n in range(1, 5)] # [1, 4, 9, 16] [n for n in [-1, 2, -3, 4] if n > 0] # [2, 4]
Feladatok
Mit csinál?
Futtassuk le az alábbi példákat és értelmezzük õket mi is történik bennük és hogyan érjük ezt el.
[n for n in range(1, 10)]
[(n, m) for n in range(1, 10) for m in range(1, 5)]
[n for n in range(1, 10) if is_prime(n)]
[n for n in range(1, 100) if n % 5 == 0 and n % 7 == 1]
[(n, m) for n in range(1, 5) for m in range(n, 5)]
[(m, n) for n in range(1, 10) for m in range(n, 10) if m % n == 0]
sorted([(m, n) for n in range(1, 10) for m in range(n, 10) if m % n == 0])
sum([n for n in range(1, 10) if is_prime(n)])
Az utolsóhoz egy kis spoiler, ha nem menne: spoiler
[n for n in range(1, 100) if n == sum([m for m in range(1, n) if n % m == 0])]
Oldjuk meg
- Keressük meg az összes olyan 1000 alatti négyzetszámot, melynél eggyel nagyobb szám prím. Pl a 4 ilyen.
- Keressük meg az összes olyan 100 alatti számpárt, melyekre igaz, hogy mindkettő prím és az egészosztással vett eredményük is prím. Pl (11, 2) ilyen.
- Keressük meg az összes egy jegyű számhármast, mely egymás után írva megegyezik a köbeik összegével. Ilyen például az 1, 5, 3, mert 1^3 + 5^3 + 3^3 == 153
- Keressük meg az összes olyan 1000 alatti számot, melynek négyzete megegyezik az nálánál kisebb osztói köbeinek az összegével. (Egy kis csavar a tökéletes számokon)
- Keressük meg az összes olyan 10000 alatti számot, mely legalább kétféleképpen írható fel 2 darab szám köbének összegeként.