Functia
nu are radacinile rationale. Am verificat acest lucru repede cu computerul cu un cod asemanator cu cel mentionat mai sus. Eu folosesc in ultima vreme pentru multe probleme de matematica mai mult sau mai putin teoretica sage,
www.mathsage.org, dar adevarul este ca sub acest nume se ascund toate softurile matematice LIBERE (CAS ~ computer algebra systems) pe care le-am cunoscut si folosit intens in ultima decada. Am renuntat de mult la a fi purist in locuri in care puterea de calcul este mai bine rezolvata de cei ce-au implementat toti algoritmii de calculat de la vechii egipteni pana Fermat, Newton, Euler, Gauss, Riemann, Hilbert...
In fine, aici am de verificat doar daca -1,1, -5,5, -25,25 sunt radacini. Cu ochiul liber se vede ca ultimele doua valori cam sparg cadrul unui grafic pe o foaie normala de hartie, asa ca un plot intre -10 si 10 poate fi riscat la inceput. M-am recorectat cu intervalul [-2,10 ] pana la urma.
Gnuplot (care nu este parte din sage) poate fi folosit pentru a avea un output in latex. De cele mai multe ori insa imi ajunge un rawplot al lui gp/pari. Deoarece aici este un forum si nu am altfel cu cine sa sporovaiesc azi, dau ambele plotari cu cod cu tot. Cel mai simplu si efectiv este desigur partea cu arta ascii (chestie de gust...)
gp are o linie si produce de la sine cadrul...
Partea cu gnuplot este ceva mai complicat de reprodus aci, liniile de comanda sunt relativ usoare, le redau cum vin la mine intr-un terminal linux,
dan@riemann:~/ > gnuplot
G N U P L O T
Version 4.2 patchlevel 2
last modified 31 Aug 2007
System: Linux 2.6.24-27-generic
gnuplot> set terminal latex
Terminal type set to 'latex'
Options are '(document specific font)'
gnuplot> gnuplot> plot [x=-2:10] x**3 - 10*x**2 + 25 , 0
ceea ce rezulta insa pentru a fi prelucrat in latex este ceva mai lung... (A se apasa acel [Citeaza] si a se renuntza repede la vizionat in caz de curiozitate maxima).
In latex insa se obtine o imagine clara.
(Acel 0 de dupa definitia lui g insista ca si axa ox sa fie trasata.)
De aici am vazut imediat cum este "mersul" acestui g.
Pentru functia f din enuntz, este relevant sa vedem pe unde sunt localizate radacinile lui g, respectiv daca au vreo relevantza pentru f. De aceea am ales acele puncte, -2,-1 mai intai pentru a vedea prima schimbare de semn, 0 pentru ca este un punct didactic interesant, 1,2 pentru ca mai are loc o schimbare de semn, in sfarsit 9,10 pentru a da de cea de-a treia si ultima in drumul lui g spre infinit.
Nu am facut nimic deosebit.
Valoarea aproximativa a radacinilor mi-am printat-o in sage. La fel de usor ar fi fost in gp/pari, de exemplu:
Deoarece algoritmul lui Newton de aproximat folosit (metoda tangentei construita recursiv) converge "patratic", la fel de repede se pot reproduce primele 400 (sau 1000 sau...) de zecimale, asta daca vrem sa zburam spre luna doar. (Nici macar poezii despre luna nu se mai scriu...)
Mai sus, acel x=9,10 ... cere solutia dintre 9 si 10, noi insa avand de asigurat ca are loc o schimbare de semn.
Mai ales pentru elevi recomand acomodarea cu astfel de "noi instrumente". De ce? Pentru ca lumea s-a schimbat razant. Din pacate, toate sistemele de educatie din lume au o inertie inevitabila. Ajunge sa privim statistic in directia catedrei si a meselor de la inspectorate. Toate lucrurile se vor schimba. Elevii trebuie insa sa vada pentru sine cum vor lucra in 10 pana la 50 de ani.
In plus, sistemele algebrice computerizate calculeaza derivate si integrale intr-o secunda (daca acestea pot fi calculate..). Pozitia unor profesori ar fi periclitata. In loc sa vada o sansa in acest lucru, ca posibilitate unica de a pune punctul pe rana in matematica, nu pe bucataria sterila, efortul de restructurare este enorm. In aceste randuri ma adresez mai ales profesorilor de acum. Nu trebuie sa devina experti in sage de maine, ar fi insa excelent, daca ar delega acelor "hacker"-i din clasa munca de a calcula intr-o linie ceea ce se face la clasa. In cadrul acestei noi diviziuni a muncii, elevii au o motivare imediata de a prinde noul joc al lumii, iar pozitia profesorilor (sinceri) creste pentru ca pentru prima oara apar intrebari ce altfel nu ar fi aparut niciodata. De exemplu, data fiind problema din aceasta sectiune, se poate tipari repede...
plot [sqrt(5.):13]
[-50:50]
sqrt( x**4-5*x**2 ) / (x-5)
, x**3 - 10*x**2 + 25
, 0
Ceea ce au aici nu pot face, sa listez toate experimentele ce pot veni din toate intrebarile, de exemplu acel minim local nu se vede prea bine daca avem scala data, se poate face mult mai usor la "ora"...
Raman desigur dator cu calculul explicit al radacinii dintre 9 si 10...
Calculele sunt nu neaparat simple, dar eu incerc, din nou ajutat de ploturi de computer, sa schitzez drumul.
In ecuatia g(x)=0 schimbam variabila x, pentru a face rost de o ecuatie in care nu apare acel (x patrat).
Substituim:
si obtinem "usor" in y o ecuatie:
Folosind formula cunoscuta
sunt radacinile complexe de ordinul trei ale unitatii diferite de unu, incercam sa ne incadram cu ecuatia noastra in y si sa cautam doua numere a si b care sa ne ajute. Aceste numere ar trebui sa satisfaca
si la nivel de a IX-a ne putem mesteri ecuatii ce au de-a face cu suma si produsul pentru puterile a treia ale lui a si b. Asociem aceasta ecuatie in necunoscuta U, sa zicem,
Rezolvand, dam de
Pentru a face rost explicit de a si b,
trebuie sa extragem radacina de ordinul trei dintr--un numar complex... La sfarsit trebuie sa coordonam valorile lui a si b astfel incat produsul lor sa fie 100/9.
Calculele aproximative le efectuez cu calculatorul, punem mana pe numere, ca sa stim cum stau lucrurile cu adevarat. Notez cu aaa cubul lui a...
Cod, care ar trebui sa fie usor de urmarit...
Cod
aaa = ( 1325 / 27 + I*25*sqrt(399) / 9 ) / 2
print "Print modulul (valoarea absoluta) a lui a este", abs( aaa )
print "Partea reala a lui aaa este", aaa.real()
print "Argumentul lui aaa este:"
alfa = arccos( aaa.real() / abs(aaa) )
print alfa
print "Valoarea lui numerica este (in radiani)"
print alfa.n( digits = 20 )
print "Impartind la 3 obtinem argumentul lui a:", alfa.n( digits = 20 ) / 3.
a = abs( aaa.n( digits = 60 ) )^(1/3) * ( cos(alfa/3) + I*sin(alfa/3) )
b = 100 / 9 / a
a = a.n( digits = 20 )
b = b.n( digits = 20 )
print "a =", a
print "b =", b
print "Tot inlocuind ne legam de 10/3+a+b =", 10./3. + a + b
Listingul incepe cu
Rezultate
sage: aaa = ( 1325 / 27 + I*25*sqrt(399) / 9 ) / 2
sage: print "Print modulul (valoarea absoluta) a lui a este", abs( aaa )
Print modulul (valoarea absoluta) a lui a este
1000
----
27
sage: print "Partea reala a lui aaa este", aaa.real()
Partea reala a lui aaa este
1325
----
54
sage: print "Argumentul lui aaa este:"
Argumentul lui aaa este:
sage: alfa = arccos( aaa.real() / abs(aaa) )
sage: print alfa
53
arccos(--)
80
sage: print "Valoarea lui numerica este (in radiani)"
Valoarea lui numerica este (in radiani)
sage: print alfa.n( digits = 20 )
0.84664496332181142703
sage: print "Impartind la 3 obtinem argumentul lui a:", alfa.n( digits = 20 ) / 3.
Impartind la 3 obtinem argumentul lui a: 0.282214987773937
sage:
sage:
sage: a = abs( aaa.n( digits = 60 ) )^(1/3) * ( cos(alfa/3) + I*sin(alfa/3) )
sage: b = 100 / 9 / a
sage:
sage: a = a.n( digits = 20 )
sage: b = b.n( digits = 20 )
sage:
sage: print "a =", a
a = 3.2014698562611831748 + 0.92827898315221499646*I
sage: print "b =", b
b = 3.2014698562611831748 - 0.92827898315221499646*I
sage:
sage: print "Tot inlocuind ne legam de 10/3+a+b =", 10./3. + a + b
si se termina cu
Tot inlocuind ne legam de 10/3+a+b = 9.73627304585570
Sper ca acestea clarifica ca lucrurile stau mai complicat decat la nivel de liceu pentru a raspunde in detaliu la intrebarea "care este radacina lui g=0 dintre 9 si 10", desi mijloacele le are orice elev de clasa a IX-a. Intelegera fenomenologica (facem asa, dam de asta...) este simpla, dar intelegrea algebrica este o munca de iluzionist pe alocuri. (De asemenea, se vede poate ca pentru a intelege matematica avem nevoie de "prieteni buni", in aceste randuri calculatorul cu multele functii matematice implementate. Faptul ca am recurs la calculator nu este neaparat politicos pe o pagina de didactica, cer scuze pentru aceasta. Situatia este asemanatoare cu cea a filmelor sangeroase cu acord parental la care copiii nu au ce cauta de fapt. Spre deosebire de aceasta situatie, am convingerea ca aici nu se va cere nici acordul si nici nu se va viziona, deci sunt pe partea sigura...)
Acelasi lucru mai pe lung si scurt si cu celalte radacini sunt desigur...
x1 x2 x3
aaa = ( 1325 / 27 + I*25*sqrt(399) / 9 ) / 2
aaa = numerical_approx( aaa )
a = aaa^(1/3)
b = 100./9./a
z = (-1 + I*sqrt(3)) / 2
zz = (-1 - I*sqrt(3)) / 2
x1 = 10./3. + a*z + b*zz
x2 = 10./3. + a*zz + b*z
x3 = 10./3. + a + b
x1 = numerical_approx( x1 )
x2 = numerical_approx( x2 )
x3 = numerical_approx( x3 )
print x1
print x2
print x3
print "Pe de alta parte..."
g(x) = x^3 - 10*x^2 + 25
solutions = solve( g(x) == 0, x, solution_dict=True );
solutions
for sol in solutions:
print sol[x].n(digits=30)
Rezultate:
Rezultate x1 x2 x3
sage: aaa = ( 1325 / 27 + I*25*sqrt(399) / 9 ) / 2
sage: aaa = numerical_approx( aaa )
sage:
sage: a = aaa^(1/3)
sage: b = 100./9./a
sage:
sage: z = (-1 + I*sqrt(3)) / 2
sage: zz = (-1 - I*sqrt(3)) / 2
sage:
sage: x1 = 10./3. + a*z + b*zz
sage: x2 = 10./3. + a*zz + b*z
sage: x3 = 10./3. + a + b
sage:
sage: x1 = numerical_approx( x1 )
sage: x2 = numerical_approx( x2 )
sage: x3 = numerical_approx( x3 )
sage:
sage: print x1
-1.47596288534586 - 8.88178419700125e-16*I
sage: print x2
1.73968983949016 + 1.77635683940025e-15*I
sage: print x3
9.73627304585570 - 3.33066907387547e-16*I
sage:
sage: print "Pe de alta parte..."
Pe de alta parte...
sage:
sage: g(x) = x^3 - 10*x^2 + 25
sage: solutions = solve( g(x) == 0, x, solution_dict=True );
sage: solutions
[{x: (-sqrt(3)*I/2 - 1/2)*(25*sqrt(133)*I/(6*sqrt(3)) + 1325/54)^(1/3) + 100*(sqrt(3)*I/2 - 1/2)/(9*(25*sqrt(133)*I/(6*sqrt(3)) + 1325/54)^(1/3)) + 10/3},
{x: (sqrt(3)*I/2 - 1/2)*(25*sqrt(133)*I/(6*sqrt(3)) + 1325/54)^(1/3) + 100*(-sqrt(3)*I/2 - 1/2)/(9*(25*sqrt(133)*I/(6*sqrt(3)) + 1325/54)^(1/3)) + 10/3},
{x: (25*sqrt(133)*I/(6*sqrt(3)) + 1325/54)^(1/3) + 100/(9*(25*sqrt(133)*I/(6*sqrt(3)) + 1325/54)^(1/3)) + 10/3}]
sage: for sol in solutions:
....: print sol[x].n(digits=30)
....:
1.739689839490160382594754323166 - 1.972152263052529513529321413207e-31*I
-1.475962885345860065455980639353 - 1.972152263052529513529321413207e-31*I
9.736273045855699682861226316186 + 4.930380657631323783823303533017e-32*I
sage: