Bine ai venit guest
 
User:
Pass:

[Creare cont]
[Am uitat parola]
iBac = materialul ULTRACOMPLET de pregătire pentru bac la mate. Dacă vrei poţi.
Forum pro-didactica.ro  [Căutare în forum]

Forum » Etc » Sagemath
[Subiect nou]   [Răspunde]
[1]
Autor Mesaj
daviodan
Grup: membru
Mesaje: 303
26 Oct 2014, 19:07

[Trimite mesaj privat]

Sagemath    [Editează]  [Citează] 

Doresc sa rezolv urmatoarea problema in Sagemath:

Determinati numerele naturale x (x< 1000) stiind ca :


Am incercat urmatoarea varianta fara succes:

sage:x=0
sage: while x<1000:
if (125+5*x)%23==0:
print x,
x=x+1


daviodan
Grup: membru
Mesaje: 303
27 Jul 2014, 23:06

[Trimite mesaj privat]


Citind documentatia si experimentand, am gasit raspunsul:

sage: for x in range(1000):
....: if (125+5*x)%23==0:
....: print x,
....:
21 44 67 90 113 136 159 182 205 228 251 274 297 320 343 366 389 412 435 458 481 504 527 550 573 596 619 642 665 688 711 734 757 780 803 826 849 872 895 918 941 964 987

gauss
Grup: Administrator
Mesaje: 6933
11 Sep 2014, 00:37

[Trimite mesaj privat]


[Citat]
Citind documentatia si experimentand, am gasit raspunsul:

sage: for x in range(1000):
....: if (125+5*x)%23==0:
....: print x,
....:
21 44 67 90 113 136 159 182 205 228 251 274 297 320 343 366 389 412 435 458 481 504 527 550 573 596 619 642 665 688 711 734 757 780 803 826 849 872 895 918 941 964 987


Abia acum am vazut postarea.
Solutia de mai sus este buna.
Scriu cateva cuvinte despre ceea ce fac eu in astfel de cazuri.

  • Uneori prefer sa iau (in sage, nu in python) in loc de range constructia mai aproape de matematica cu un fel de intervale.
    range( 1000 )
    se poate inlocui (fara schimbari in rulare) cu [ 0 .. 999 ] , lista numerelor de la 0 la 999 (inclusiv).

    Daca ar fi fost 10000000 in loc de 1000, atunci trebuie sa folosim xrange.
    Lucrand cu [ 0 .. 999 ] avem deja in mana intregi-sage, de exemplu:

    sage: for k in [ 0 .. 2 ]: print k, type(k)
    0 <type 'sage.rings.integer.Integer'>
    1 <type 'sage.rings.integer.Integer'>
    2 <type 'sage.rings.integer.Integer'>

    si este o mare deosebire intre 2-ul din python si 2-ul de mai sus, care este mai degraba ZZ(2). (A se tipari a=2, apoi pe linia urmatoare a.TAB - vine lista metodelor ce le putem aplica lui 2. De exemplu:

    sage: a = 2
    sage: a.is_prime()
    True
    sage: a.parent()
    Integer Ring

    2-ul din range sau xrange este un 'int' ...)

  • Apoi ecuatia
    ( 125 + 5*x ) % 23 == 0
    o rezolvam cel mai bine in corpul cu 23 de elemente:
    x-ul este desigur -125 / 5 = -25 = -2 = 21 .
    Putem factoriza de la inceput, vazand ca 5 si 23 sunt prime intre ele... dar si altfel, putem incerca:

    sage: F = GF( 23 )
    sage: F( -125 ) / F(5)
    21
    sage: _.parent()
    Finite Field of size 23

  • Este bine de stiut ca se poate folosi "list comprehension", este exact modul in care matematicienii scriu multimile. (Aici dam de o lista...)

    print [ x for x in range( 1000 ) if ( 125 + 5*x ) % 23 == 0 ]

    ne da

    sage: print [ x for x in range( 1000 ) if ( 125 + 5*x ) % 23 == 0 ]
    [21, 44, 67, 90, 113, 136, 159, 182, 205, 228, 251, 274, 297, 320, 343, 366, 389, 412, 435, 458, 481, 504, 527, 550, 573, 596, 619, 642, 665, 688, 711, 734, 757, 780, 803, 826, 849, 872, 895, 918, 941, 964, 987]
    sage:

    (spatierea ajuta la citit...)
    (de obicei salvam lista in ceva, nu vrem sa o printam...)


  • ---
    df (gauss)
    daviodan
    Grup: membru
    Mesaje: 303
    16 Oct 2014, 22:31

    [Trimite mesaj privat]


    Va multumesc pentru informatii.

    daviodan
    Grup: membru
    Mesaje: 303
    18 Oct 2014, 17:47

    [Trimite mesaj privat]


    Va rog sa-mi spuneti cum sa procedez pentru ca Sage sa genereze numerele de forma
    .

    In situatia in care numarul ar fi de forma
    atunci se poate utiliza:
    print[a for a in [0..9] if (7000+111*a)%7==0]
    [0, 7]

    si se afla cifra a pentru care
    .
    Nu stiu cum sa procedez daca cifrele sunt diferite. Multumesc.

    daviodan
    Grup: membru
    Mesaje: 303
    18 Oct 2014, 19:21

    [Trimite mesaj privat]


    Dupa mai multe incercari am gasit o solutie:

    sage: print [a for a in [7000..7999] if a%360==0]
    [7200, 7560, 7920]


    daviodan
    Grup: membru
    Mesaje: 303
    26 Oct 2014, 18:19

    [Trimite mesaj privat]


    Domnule profesor Gauss va rog sa-mi spuneti daca este posibil sa determinam in Sage Math domeniile de definitie maxime si imaginile functiilor:
    .

    gauss
    Grup: Administrator
    Mesaje: 6933
    26 Oct 2014, 18:54

    [Trimite mesaj privat]


    [Citat]
    Domnule profesor Gauss va rog sa-mi spuneti daca este posibil sa determinam in Sage Math domeniile de definitie maxime si imaginile functiilor:
    .


    Nu mi-am pus niciodata problema de a cere programatic / prin cod domeniul maxim de definitie pentru o functie, pentru f-ul si pentru g-ul de mai sus sage stie si numere complexe, asa ca este de datoria programatorului sa explice prin cod ce vrea.

    Vrem maxim si minim, deci luam functiile de la IR (fara poli) la IR.

    (Plotarea rezolva multe astfel de probleme. Fara...)

    Daca chiar vrem max si min pe un interval, exista o utilitate numerica ce poate fi de ajutor in astfel de cazuri. Raspunsul este doar aproximativ, dar pentru mine suficient (cand il cer asa).

    sage: f(x) = x / (x^2-1)
    sage: g(x) = exp( x^2 )

    sage: f.find_local_minimum ?
    sage: f.find_local_maximum ?

    sage: f.find_local_minimum( 1, 100 )
    (0.010001000323734516, 99.999997763425981)
    sage: f.find_local_maximum( 1, 100 )
    (12816771.112462174, 1.0000000390113863)

    sage: g.find_local_minimum( -5, 5 )
    (1.0, 9.8666660737060122e-09)
    sage: g.find_local_maximum( -5, 5 )
    (72004822993.24107, -4.999999893973623)



    Deci
    -- f ia un minim numeric de zero virgula ceva pe intervalul [ 1, 100 ] spre capatul cu 100. (Ne asteptam sa avem o asimptotica spre zero...)
    -- f ia un maxim numeric mare pe intervalul [ 1, 100 ] spre capatul cu 100 (EDIT: am copiat prea mult..).

    -- g ia un minim numeric de valoare 1 [ -5, 5 ] pe langa zero.
    -- g ia un maxim numeric mare pe intervalul [ -5, 5 ] spre capatul cu -5.

    Desigur ca un plot ajuta mai mult...
    Mai mult nu stiu.


    ---
    df (gauss)
    daviodan
    Grup: membru
    Mesaje: 303
    26 Oct 2014, 19:07

    [Trimite mesaj privat]


    Va multumesc pentru raspuns.

    [1]


    Legendă:  Access general  Conţine mesaje necitite  47559 membri, 58582 mesaje.
    © 2007, 2008, 2009, 2010 Pro-Didactica.ρ