Sie sind auf Seite 1von 9

II. 3.2.

Fiiere de tip funcie

Fiierele funcie sunt utilizate pentru crearea unor noi funcii


SCILAB. Forma general a unui fiier funcie este:

(parametri_intrare) function [parametri_ieire] = nume_funcie (parametri_intrare) ..instruciuni de definire a funciei endfunction


unde:

function: cuvnt cheie care declar fiierul ca fiier funcie function


(obligatoriu);

nume_functie: numele funciei, adic numele sub care se salveaz nume_functie


fiierul, fr extensie; nu poate fi identic cu cel al unui fiier existent;

parametri_iesire: parametrii de ieire trebuie separai cu virgul i


cuprinsi ntre paranteze drepte. Dac funcia nu are parametri de ieire parantezele drepte i semnul egal (=) nu mai au sens;

parametri_intrare: parametrii de intrare trebuie separai cu virgul i


cuprinsi ntre paranteze rotunde. Daca funcia nu are parametri de intrare parantezele rotunde nu mai au sens.

endfunction: instruciunea de terminare a unei funcii.

Observaii: Observaii Un fiier de tip funcie poate s contin mai multe funcii. Pentru utilizarea unei funcii trebuie folosit, mai inti, comanda:

getf(NumeFunctie.sci)
Spre deosebire de fiierele script care au extensia sce, fiierele de tip funcie au extensia sci. Exemplul 1:

Calculul factorialului: se vor defini n acelai fiier (functii.sci) dou funcii care calculeaz factorialul unui numr dat; prima nu verific dac argumentul este ntreg pozitiv, a doua funcie face acest lucru nainte de a face calculul

function [f]=factorial(n) f=prod(1:n) endfunction function [f]=factorial1(n) //dac n nu este ntreg i pozitiv se transmite un mesaj de eroare, //apoi se transform numrul ntr-un numr ntreg pozitiv if (n-floor(n)~=0)|n<0 then n=floor(abs(n)) warning('argumentul nu este ntreg pozitiv; se va calcula '+sprintf("%d",n)+"!") end f=prod(1:n) endfunction
n fereastra de comand se vor folosi aceste funcii astfel:

-->getf('functii.sci') -->factorial(5) ans = ans = ans = 120. 1. 1. -->factorial(0.5) -->factorial(-0.5)


Dac argumentul nu este ntreg i pozitiv funcia factorial ntoarce un rezultat oarecare, 1. Dac vom folosi funcia factorial1 se va obine:

-->factorial1(5) ans = 120. -->factorial1(0.5)

WARNING:argumentul nu este ntreg pozitiv; se va calcula 0! ans = 1. -->factorial1(-5) WARNING:argumentul nu este ntreg pozitiv; se va calcula 5! ans = 120. Recursivitate: o funcie se poate apela pe ea nsi.
2: Exemplul 2 calculul factorialului recursiv

function [f]=fact(n) if n<=1 then f=1 else f=n*fact(n-1) end endfunction


3: Exemplul 3 exemplul urmtor calculeaz polinoamele Chebyshev care verific relaia de recuren: Tn +1 ( x ) = 2 xTn ( x ) Tn 1 ( x ) .

function ch=chebyshev(x,n) if n==0 ch=1; elseif n==1 ch=x; else ch=2*x*chebyshev(x,n-1)-chebyshev(x,n-2); end endfunction
Observaie: Observaie O funcie se poate defini direct prin intermediul comenzii deff

deff([y1, y2,, ]=nume_functie(x1, x2, ),text)

Exemplu: deff([y]=f(x),y=sin(x).*cos(x))

Exerciii

1. S se calculeze i s se afieze suma ptratelor elementelor mai mari decat 1 ale unei matrice ptratice.

Soluie:
function [s]=sumaP(a) [m,n]=size(a) s=0; for i=1:m for j=1:n if a(i,j)>=1 s=s+a(i,j)^2 end end end endfunction 2. S se calculeze media aritmetic a elementelor de pe diagonala principal a unei matrice ptratice de ordinul n, cu n<10

Soluie:
function [ma]=media(a) n=size(a,'r') ma=0; for i=1:n ma=ma+a(i,i) end ma=ma/n endfunction

3. S se determine valorile maxime i minime ale unui vector i ale unei matrice, apoi s se determine i indicele (poziia acestora).

Soluie:
-->a=ceil(10*rand(3,3)) a = ! 3. ! 8. ! 1. n = ! 1. m = 9. -->[mi,p]=min(a) p = ! 3. mi = 1. ! 1. 3. ! 4. 7. 7. 9. ! 7. ! 9. !

-->[m,n]=max(a)

4. S se determine valorile i vectorii proprii ale matricei


0 2 1 1 2 1 . 0 1 2

Soluie:
In determinarea soluiilor nebanale ale ecuaiei Ax = x unde:

A este o matrice patratic de ordinul n, x este vector coloan de ordinul n, iar


- este un scalar,

valorile x, respectiv , care satisfac ecuaia de mai sus se numesc vectori proprii respectiv valori proprii. -->a=[-2 1 0;1 -2 1;0 1 -2]; -->[v,d]=spec(a) d =! - 3.4142136 0. 0. !

! ! v =! 0.5

0. 0.

- 2.

0.

! - 0.5 - 0.5 ! !

0. - 0.5857864 ! - 0.7071068 0.7071068 2.082D-17 - 0.7071068 !

! - 0.7071068 ! 0.5 ale unei matrice.

5. S se calculeze suma elementelor diferite de o valoare dat, v,

Soluie:
function [s]=sdv(a,v) [m,n]=size(a) s=0; for i=1:m for j=1:n if a(i,j)~=v s=s+a(i,j) end end end endfunction 6. S se determine elementul maxim al unui matrice de numere reale. 7. S se calculeze produsul elementelor diferite de zero de pe diagonala principal (secundar) ale unei matrice.

Soluie:
function [p]=prodDS(a) n=size(a,'c') p=1; for i=1:n if a(i,n-i+1)~=0 p=p*a(i,n-i+1) end end

endfunction 8. S se calculeze suma elementelor unei matrice situate deasupra (dedesubtul) diagonalei principale (secundare).

Soluie:
function [s]=sdeasupra(a) n=size(a,'r') s=0; for i=1:n-1 for j=i+1:n s=s+a(i,j) end end endfunction 9. S se realizeze un program care calculeaz produsul a dou matrice.

Solutie:
function [c]=f(a,b) [m,n]=size(a) [n,p]=size(b) for i=1:m for j=1:p c(i,j)=0 for k=1:n c(i,j)=c(i,j)+a(i,k)*b(k,j) end end end endfunction 10. S se determine numrul de coloane cu toate elementele negative dintr-o matrice de tip m n .

Solutie:
function [cn]=colneg(a)

[m,n]=size(a); cn=0; j=1; while j<n for i=1:m if a(i,j)>0 j=j+1; i=1; else i=i+1; if i>m cn=cn+1; j=j+1; end end end end endfunction 11. S se determine o linie a unei matrice de tip m n care conine elementul a crui valoare absolut este mai mare dect toate celelalte elemente ale matricei.

Solutie:
function [L]=linie(a) [m,n]=size(a) v=a(1,1) for i=1:m for j=1:n if abs(a(i,j))>v L=i end end end

endfunction 12. Se dau numerele aij , i = 1,2,...,100; j = 1,2,...,50 si b j j = 1,2,...,50 . S


ci = aij b j , i = 1,2,...,100 .
j =1 50

se realizeze un program care calculeaz:

Soluie:
function [c]=f(a,b) [m,n]=size(a) for i=1:m c(i)=0 for j=1:n c(i)=c(i)+a(i,j)*b(j) end end endfunction

Das könnte Ihnen auch gefallen