home


Capitulu cuartu: sas funtziones


Adotamus una definitzione famada meda po narrer ite intendimus nois po funtziones: fun inparis de operatziones, no importat de ite natura, aplicadas a inparis de datos. In matematicas nd'agatamus de tantos tipos, in informatica nd'enin atzuntas de ateras calidades, e cando si podet e si torrat sa definitzione issoro, si nd'atzunghen ateras a piaghere nostru e a segundu de su bisonzu.


4.1


A programmare in Mathematica est, a s'in prus parte, una chistione de iscrier funtziones pre-paradas, chi triballan comente sas funtziones matematicas chi pesen arrespetu. Cando issas benin aplicadas a valores bene determinados e definidos, tando fun in gradu de cumprire computos e torrare resultados. Nois hamus a amustrare, totu reduidu in d'una tecnica chi si narat a tretu a tretu, comente pesare una funtzione pre-parada impreande unu istile de programmatzione funtzionale. No nos hamus a pistighintzare meda de cantu sa funtzione hat a poder esser lestra e coidadosa in sos computos nostros. A s'incomintzu su chi contat est solu chi sa funtzione chi hamus a pre-parare siat in gradu de atire a cumprimentu sa chi ddi pedimus. Hamus amustradu in tantas ocasiones comente sas funtziones de Matematica, impreadas cun tipos de datos varios, unu compitu difitzile ddu torren fatzile. Una tecnica de programmatzione est semper a sighire su cussitzu de perder mancari tempus meda a cricare si s'agatan funtziones pre-paradas, e solu a s'urtimu arrematu a si ponner a nd'iscrier po contu nostru. Mancari cando hamus amustradu e comente custas funtziones amanipulan sos datos, custos hian a esser de sa prus comuna calidade cun sas operatziones sas prus semplitzes: su disitzu nostru est tando chi custas operatziones amanipulen datos medas e in maneras cumplicadas.

N[Pi,160]
3.14159265358979323846264338327950288419716939937510582\

097494459230781640628620899862803482534211706798214808\

65132823066470938446095505822317253594081284811174503



4.2


Su numeru Pigrecu, de su cales chi pagu prima hamus amustradu una aprossimatzione de chentusessanta cifras deghimales, est cunsideradu de Mathematica una costante. Su programma tenet algoritmos internos e onni orta chi ddu preguntamus po Pigrecu nosi nde torrat una aprossimatzione cun cantas cifras deghimales cherimus.
S'agatan in matematicas algoritmos sos prus varios e fantasiosos po computare sas primas cifras de custu numeru. Sas cifras deghimales suas fun infinidas, e unu tempus coladu fuit un'isfida de importu intra sos altzebristas a chie nde computada su numeru prus mannu.
Como sa chistione non importat prus a nemos, ma est bella e istrutiva, e nois bos contamus comente intrat Pigrecu cun sas chistiones de su tiru a sinnu, e comente de custos fattos si pothat pesare una formula po ddu computare, tenende tempus cun d'una pretzisione manna.

Su numeru Pigrecu, 3.14... est su raportu intra sa longhesa de unu cricu e su diametru suu. Hamus a narrer sine dintintzione peruna cricu a sa figura zeometrica intesa e comente superficie e comente orizu.
Sa superficie de unu cricu est, de una formula elementare, Pi r^2, su numeru Pigrecu moltiplicadu po su cuadradu de su raju. Si su raju est uguale a una unidade de misura, comente hamus a ponner nois, e tando custa superfitzie est Pigrecu. Leamus in cunsideru unu cuadradu, unu ladu de su cales misurat duas unidades de longhesa. E tando sa superfitzie de custu cuadradu est duos po duos batoro unidades cuadradas. Est custa puru una formula elementare: s=l^2. Pensamus a su cricu inscritu in su quadradu comente a unu bersalliu'e tiru a sinnu, a inue s'isparan tanto cropos. Totus han a cropire su cuadradu, e talunos su cricu. Esistit una proportzione tando, intra sas duas superfitzies e su numeru de sos cropos chi ddas han fertas: sa superfitzie de su cricu istat a sos cropos chi dd'han ferta comente sa superfitzie de su cuadradu istat a totu sos cropos isparados:


Pi : introsucricu = 4 : introsucuadradu

inue introsucricu cheret narrer su numeru de ballas chi han fertu solu su cricu, e introsucuadradu su numeru de ballas chi fun istadas isparadas e chi han fertu chena duda peruna, po ipotesi, su cuadradu. Irboligande custa proportzione s'agatat chi Pigrecu est uguale a batoro ortas introsucricu divididu po introsucuadradu: Pi= 4 Introsucricu/introsucuadradu.
E pesamus una lista de numeros cumplessos, a prova, po ddos connoscher e comente fun fattos, e ddi ponimus a numene provacumplessos.


provacumplessos=Table[
                                 Random[
                                    Complex,{-1-I,1+I}],{10}]

{-0.922357 + 0.0055577 I, -0.607548 - 0.126257 I,

-0.602875 - 0.975827 I, -0.959887 - 0.77478 I,

0.814093 - 0.708642 I, -0.916642 - 0.106597 I,

0.930148 - 0.984685 I, 0.0646964 - 0.453902 I,

0.0839279 + 0.56453 I, -0.138358 - 0.881242 I}


Sos numeros cumplessos han duas cumponentes, una si narat reale e s'atera imatzinaria. Nois podimus impreare custas duas partes comente sas coordinadas reales de unu puntu in su pranu cartesianu.
E tando sas cumponentes reales e imatzinarias de custos deghe numeros cumplessos, de sos cales hamus postu contivizu mannu a ddos seberare in manera chi esseren totus cumpresos intra mancus unu e prus unu, ( est a narrer distantes de unu tzentru unu a su maximu, e intra a issos non prus de duos), fun sas coordinadas de deghe puntos a intro de unu cuadradu de ladu duos; e calincunu, medas, istan puru a intro de su cricu inscritu.


provacoordinadas=Partition[
                               Transpose[
                                     {Re[provacumplessos],
                                       Im[provacumplessos]}],2]

{{{-0.922357, 0.0055577}, {-0.607548, -0.126257}},

{{-0.602875, -0.975827}, {-0.959887, -0.77478}},

{{0.814093, -0.708642}, {-0.916642, -0.106597}},

{{0.930148, -0.984685}, {0.0646964, -0.453902}},

{{0.0839279, 0.56453}, {-0.138358, -0.881242}}}


Podimus notare chi a intro de custu inparis sos elementos funi parigas de numeros, deghe parigas, est a narrer comente prevedidu, sas coordinadas de sos deghe puntos disitzados.


4.3


Cherende podimus pesare una funtzione chi seberet listas de numeros cumplessos casuales a intro de duas lacanas, listas longas cantu nos paret e praghet. Custa est tando una funtzione pre-parada de su chi de Mathematica si serbit, s'utente de su limbazu de programatzione Mathematica. Custa funtzione no est po nudda diferente de sas funtziones pre-paradas in su limbazu. Tenet unu numene e triballat cando enit preguntada cun sos argumentos suos. Sa paraula Module est una crae po ch'inserrare aintro de sa funtzione sas variabiles chi disizamus sian locales.
Su numene de sa funtzione est unu numene longu, chi narat issu e totu su dovere chi sa funtzione cumprit: est como una netzessidade didatica, posca sos numenes enin postos comente onniunu disitzat: imparisdenumeroscumplessos est de lettura pagu discantzosa, e tando podimus ponner solu sas initziales: inc, totu atacadu sighidu de parentis cuadra aberta intro sa cales s'iscrien sos argumentos, disinnados cun su trattu lineare e separados de virgulas, e si tancan sas parentis cuadras. Ite cheren narrer sos duos puntos e s'uguale dd'hamus ispetzificadu pagu inantis: est una assinnatzione diferida.
Sos argumentos ddos hamus pesados a numene primalacana (pl) e segundalacana (sl) po cherrer amentare fintzas chi sos numeros cumplessos non fun ordinados e no tenimus unu numeru prus mannu e unu prus piticu de un'ateru. S'argumentu cantosfun (cf) est sa numerosidade de sa lista. Module incraeddat custas tres variabiles a intro de sa funtzione a manera chi su numene issoro no pothat interferrer cun ateras aliagas.
Sa funtzione prima s'iscriet a video e a pustis si cumpilat. Custu fattu non torrat arresposta ca a sa fine hamus tentu cuntivitzu de ponner unu puntu e virgula.


inc[primalacana_,segundalacana_,cantosfuni_]:=
   Module[{pl=primalacana,
          sl=segundalacana,
          cf=cantosfuni},
                          Table[
                         Random[
                  Complex,{pl,sl}],{cf}]];
  a=inc[-1-I,1+I,10]

{0.222964 - 0.335169 I, 0.0200486 - 0.622849 I,

0.145321 + 0.659273 I, -0.372403 + 0.503408 I,

-0.251804 + 0.6351 I, -0.412517 + 0.278188 I,

-0.0658973 + 0.343742 I, -0.495874 - 0.615214 I,

0.00395424 + 0.328427 I, 0.439429 + 0.838687 I}


Est pretzisu chi a su postu de deghe numeros podimus pesare listas de deghemila numeros. Inibimus sa resposta a custa pregunta, semper cun su puntu e virgula.


Clear[a]
a=inc[-1-I,1+I,2000];


Sos duamila numeros cumplessos de sa lista enin como trasformados in sas coordinadas cartesianas de duamila puntos in su pranu. Custos puntos enin torrados in d'unu graficu.


puntos=ListPlot[
                  Partition[
                      Join[Re[a],Im[a]],2],
                        PlotStyle->PointSize[0.005],
                         Ticks->None,
AspectRatio->Automatic];



wpe9.gif (3771 byte)



Nd'essit foras su graficu de sos duamila puntos sas coordinadas numericas de sos cales funi istadas computadas da e sa funtzione inc e imagasinadas in sa lista a. Disinnamus como unu cuadradu e unu cricu, totu a duos boidos e ddos ponimus susu custu graficu de puntos.


cuadradu=Show[
       Graphics[
               Line[{{1,1},{-1,1},{-1,-1},{1,-1},{1,1}}]],
AspectRatio->Automatic];


wpe8.gif (1900 byte)



cricu=Show[
        Graphics[
             Circle[{0,0},1],
AspectRatio->Automatic]];


wpe7.gif (2142 byte)

 


4.4


Sa funtzione Line[] pretendet po argumentos suos una lista, sos elementos de sa cales funi meda parigas de numeros, chi rapresentan sas coordinadas de sos puntos, de inue movet una rectilinea, e a manu a manu inue passat e a inue arribat: est in custa manera chi hamus disinnadu una figura chi hamus mutidu cuadradu. Line est unu argumentu de ateruna funtzione, Graphics, e solu cun issa triballat. Su chi faen custas duas funtzione si podet bier a video cun sa funtzione Show[], de sa cales funi argumentos.
Circle[] arrechedet una lista de numeros chi funi sas coordinadas de su puntu chi disizamus po tzentru, e unu numeru chi hat a esser sa longhesa de su raju. Comente inantis, fintzas Circle[] est argumentu de sa funtzione Graphics[] e podet esser bistu su graficu preguntandeddu a Show[]. Custos tres ozetos graficos, puntos, cuadradu e cricu ddos podimus amustrare inparis:


Show[puntos,cuadradu,cricu];

 

wpe6.gif (4663 byte)


E notamus chi totus sos puntos funi a intro de su cuadradu e de custos, paritzos capitan a intro de su cricu. Po cantu si podet bier, in mannu, sa distributzione est uniforme, cherende narrer cun custu chi sos puntos non tenen unu donu delatadu po si amustrarare totus in su matessi tzassu, s'ispraghen masprestu in totu su pranu, cussu allacanadu de sos lados de su cuadradu, sentza preferentzia peruna. Onni orta chi attivas sa funtzione inc has a tenner semper numeros cumplessos, e tando puntos diferentes in su pranu, e perņ distributziones simbitzantes.


4.5


In su pranu cartesianu sa distantzia in tra duos puntos enit definida comente sa raighina cuadrada de sa summa de sos cuadrados de sas diferentzias de sas coordinandas de sos puntos cunsiderados. Si po comente cunsideramus sa distantzia de sos puntos de su pranu da e unu puntu particulare, s'origine de su sistema de sos asses cartesianos sas coordinadas de sa cales funi zero de ascissa e de ordinada, tando sa formula chi hamus pesadu inantis enit semplificada: sa distantzia de sos puntos de su pranu da e s'origine est sa raighina cuadrada de sa summa de sos cuadrados de sas coordinadas. Si ponides mente a su teorema de Pitagora, os agatades in sa definitzione a maravitza. Una funtzione chi andat che ozu a pedde a cantu semus cunsiderande est:


distantzia[{x_,y_}]:=N[Sqrt[x^2+y^2]];


Sos numeros argumentu de sa funtzione funi sas coordinadas cartesianas de sos puntos. Unu inparis de numeros cun su numene aintrodesucuadradu, e chi nois abreviamus cun aic est pesadu cun totus sas distantzias dae s'origine, de sos puntos leados in cunsideru. Sa funtzione Map enit aplicada a sa funtzione distantzia po leare sa distantzia de totus sos puntos da e s'origine:


aic=Map[distantzia,
                       Partition[
                              Join[Re[a],Im[a]],2]];


Pigamus in cunsideru unu criteriu: si sa distantzia de su tzentru est minore de 1, su puntu istat a intro de su cricu, si est uguale a 1 istat in pizu de su cricu e si est prus de 1 istat foras de su cricu ma aintro de su cuadradu. Sa funtzione chi seletzionat numeros segundu custu criteriu tenet a numene minoresdeN, abreviada cun mN:


mN[n_Real]:=n<=1.;

Connotu custu criteriu pesamus ateruna funtzione chi seletzionet in d'una lista sos numeros minores o uguales a 1. Sa funtzione si narat seletziona, abreviada cun sel:


sel[k_List]:=Select[k,mN];


Istan tando aintrodesucricu, abreviadu cun acri, solu sos puntos chi passan sa seletzione:


acri=sel[aic];


Su numeru de elementos chi istan in d'una lista si pedit cun Length. E tando, sigundu sos contos nostros, batoro ortas su numeru de sos elementos chi istan aintrodesucricu divisos po su numeru de sos elementos chi istan aitrodesucuadradu dat una aprossimatzione ona de pigrecu:


pigrecu=N[4. Length[acri]/Length[aic]]
3.174


Aumentande su numeru de sos puntos metzorat sa aprossimatzione de pigrecu. Onni orta chi su programa computat inparis de numeros novos s'aprossimatzione cambiat, ca essende sos numeros casuales, onni orta funi diferentes.


4.6


Una funtzione anonima non tenet numene, ma si cheres dda podes atiare e sas variabiles suas tenen una forma delatada: #. Non si cumprendet cantu est utile una funtzione anonima e ne si podet pretziare chena dd'impreare. Como chi semus espertos de funtziones pre-paradas pensamus a una chi cuadret numeros, o mancari nde computet sas potentzias e ddas ponimus a cunfrontu cun sas funtziones anonimas.


cuadraunu[x_]:=x^2;
           cuadraduos:=(#^2)&;
                   cuadratres:=Function[x,x^2];
cuadraunu[4]

16
cuadraduos[5]
25
cuadratres[6]
36


Totas tres sas funtziones cuadran numeros. Podimus pesare cun sa matessi logica ateras tres funtziones de duos argumentos, su primu chi siat sa base de una potentzia e su segundu s'esponente:


potuna[x_,y_]:=x^y;
         potduas:=(#1^#2)&;
                potres:=Function[{x,y},x^y];
potuna[5,3]

125
potduas[3,4]
81
potres[2,6]
64


Pesandeddas totu in pare po unu cunfrontu:


{{cuadraunu[6],cuadraduos[6],cuadratres[6]},
{potuna[3,4],potduas[3,4],potres[3,4]}}

{{36, 36, 36}, {81, 81, 81}}



4.7


Iscridimus una funtzione chi computet pigrecu segundu cantu hamus arresonadu inantis. Intro de istedditos ponimus su chi sos numenes abreviados cheren narrer. Sa funtzione triballat preguntandedda pi, e po argumentu cheret unu numeru intreu, mannu ma non meda, intra milli e chimbemila.


mN[m_Real]:=m<=1.;
(*sos puntos aintro de su cricu distan
de su tzentru prus pagu de una unidade de misura*)

d[{x_,y_}]:=N[Sqrt[x^2+y^2],5];
(*una formula po computare una distantzia*)

s[j_List]:=Select[j,mN];
(*seberat sos puntos aintro de su cricu*)


pi[n_Integer]:=
(* sa funtzione*)

Module[
     {k=Table[
             Random[Complex,{-1-I,1+I}],{n}]},
                        q=Map[d,
                              Partition[
                                  Join[Re[k],Im[k]],2]]
(*sos puntos aintro de su cuadradu*);

c=s[q]
(*sos puntos aintro de su cricu*);

N[4. Length[c]/Length[q],5]]
pi[3000]

3.164

home