Beruflich Dokumente
Kultur Dokumente
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:
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 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
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)
Soluie:
In determinarea soluiilor nebanale ale ecuaiei Ax = x unde:
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 ! !
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
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