Informatika1-2023/Gyakorlat10

A MathWikiből

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)

  1. Rajzolj egy cosinus-görbét 0-tól 4*pi -ig! (plot(fv, (x, from, to))
  2. Rajzold ki az (x-2)^2 + 3 másodfokú polinomot -2-től 4-ig, zöld színnel! (color="green")
  3. Rajzold az előző mellé (a show függvénnyel) az x^3-3*x + 6 harmadfokú polinomot pirossal! (show(plot1 + plot2))
  4. 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

  1. Keressük meg az összes olyan 1000 alatti négyzetszámot, melynél eggyel nagyobb szám prím. Pl a 4 ilyen.
  2. 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.
  3. 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
  4. 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)
  5. 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.
Személyes eszközök