You are on page 1of 14

Mtodes Numrics Marc Costa Ros

1
Mat Lab

Notacions Prvies Nomenclatura: [Considero = Enter]

; al final evita que aparegui tots els resultats en pantalla.

Operadors Principals:










Funcions Bsiques:

Funcions de Borra:





Funcions Trigonomtriques:

Per avaluar en angles
sexagesimals (degrees)
afegir la lletra d al final,
per abans de (x)
sind(x)
cosd(x)
tand(x)







Altres Funcions:

















Valors tpics de MatLab:
+ Adici o suma
Sostracci o resta
* Multiplicaci
' Trasposta
^ Potenciaci
\ Divisi - esquerra
/ Divisi - dreta
.* Producte element a element
./ i .\ Divisi element a element
.^ Elevar a una potencia element a element
Clear Borra totes les variables del Workspace.
Clear x Borra totes les variables indicades.
Clc Borra tot el Command Window.
sin(x) sinus
cos(x) cosinus
tan(x) tangent
asin(x) arco sinus
acos(x) arco cosinus
atan(x) arco tangent (torna un angle entre -/2 y +/2)
atan2(x) arco tangent (torna un angle entre - y +); 2 arguments.
Proporcionals al sinus i al cosinus:
sinh(x) sinus hiperblic
cosh(x) cosinus hiperblic
tanh(x) tangent hiperblic
asinh(x) arc sinus hiperblic
acosh(x) arc cosinus hiperblic
atanh(x) arc tangent hiperblic
sqrt(x) arrel quadrada
exp(x) funci exponencial
log(x) logaritme natural
log10(x) logaritme decimal
log2(x) logaritme en base 2
sign(x) torna -1 si <0, 0 si =0 y 1 si >0. Aplicada a un nmero complex,
torna un vector unitari en la mateixa direcci
round(x) arrodoniment cap a lenter ms proper
fix(x) arrodoniment cap a lenter ms proper a 0
floor(x) valor enter ms proper cap a -
ceil(x) valor enter ms proper cap a +
gcd(x) mxim com divisor
lcm(x) mnim com mltiple
abs(x) valores absoluts
rem(x,y) resto de la divisi (2 arguments que no tenen que ser enters)
real(x) partes reals
imag(x) partes imaginries
angle(x) angles de fase
realmax = 1.7977e+308 realmin = 2.2251e-308
N (mx. / mn.) de nombres que assimila lordinador abans de considerar
linfinit


NaN: Not a Number
Mtodes Numrics Marc Costa Ros
2
Vectors: (en Mat Lab un vector s una matriu duna fila)

Nomenclatura:




Assignacions rpides:






Funcions amb vectors:






Matrius:

Nomenclatura:








Assignacions rpides:








Funcions amb matrius:






Altres:




Polinomis:

Nomenclatura:

Funcions amb polinomis:


Horitzontal: v = [a,b,c] o [ a b c]

Vertical: v = [a;b;c] o [a b c]
- desde : fins [augment de unitat en unitat(de 1 en e1)]

- desde : pas : fins

- linspace ( des de, fins, quantitat de nombres )
max(x) ens torna el valor mxim dun vector i la posici que ocupa
min(x) ens torna el valor mnim dun vector i la posici que ocupa
sum(x) suma les components dun vector.
prod(x) producte de les components dun vector.
mean(x) torna el valor mig dels elements dun vector.
length(x) ens dna el nombre de components que te el vector.
size(A) ens dona la dimensi del vector. Torna 2 valors: Files Columnes
[a,b,c; d,e,f] o [ a b c ; d e f] o [ a b c d e f]

A(m,n) = A(files, columnes)

Si nomes posem un valor (m) ens fa un matriu quadrada
size(A): ens dona la dimensi duna matriu. Torna 2 valors: Files Columnes
ones (m,n): matriu plena de 1
zeros (m,n): matriu plena de 0
eye (m,n): matriu identitat
rand (m,n) matrius de nombres aleatoris entre el 0 i el 1
A=diag(x) crea una matriu diagonal a partir de les components dun vector.
x=diag(A) crea un vector a partir de les components de la diagonal de A.
Fliplr(A): inverteix lordre de les columnes.
Podem crear matrius a blocs si sempre es compleixen les dimensions.

Sistemes dequacions: Ax=b; x=A
-1
*b = A\b x=b/A
[y*B=c y=c/B]
trace(A) ens dona la traa de la matriu A.
inv(A) ens dona la inversa de la matriu A.
A Trasposta
A. Trasposta Conjugada
v=poly(A) Torna un vector v amb els coeficients del polinomi caracterstic de
la matriu quadrada A
pol=[a b c d n k] polinomi de tipus: ax
n
+ bx
n-1
+ cx
n-2
+ + nx + k = 0
polyval(pol,x) avaluar polinomi en x
roots (pol) arrels de pol
conv(pol1,pol2) producte de dos polinomis (pol1 i pol2)
plyder(pol) calcula la derivada de pol
Mtodes Numrics Marc Costa Ros
3
Indexar Vectors / Matrius:

Vectors:








Matrius:










Exemples:

a = 10 20 30 40 0 0 0 0 4 3 2 1 a=[10:10:40 zeros(1,4) 4:-1:1]

B =






Dibuixar Grfiques:

Funci plot(x,y):

Parmetres a Considerar:






















v = vector v (i) component i del vector,

si v(i) = a podem canviar el valor de a pel de b fent v (i) = b

v(a:b) ndex de la a a la b columnes.
Si v=(a:c:b) podem invertir lordre de les components fent: u=v(b:-c:a)
Si v=[a b c] podem agafar les components a,b,c dun vector x fent x(v) o b x([a b c])
A = matriu A(a,b) component de la matriu A que es troba en la fila a i la columna b

A(a,b:c) components de la fila a i columnes b fins la c
A(a:c,b) components de les files a fins la c i columna b
A(a,: ) tots els components de la fila a
A([a c d], : ) tots els elements de les files a, c i d
Si tenim dues matrius A i B i volem canviar les files a i b de B per les files c i d de A:
B([a b],: )=A([c d],: )
A( : ) representa un vector columna amb les columnes de A una rere laltre.
B=zeros(5,6);
B(2:4,2:4)=1;
B(3,3)=2;
B(5,4)=1;
0 0 0 0 0 0
0 1 1 1 0 0
0 1 2 1 0 0
0 1 1 1 0 0
0 0 0 1 0 0
Al fer un grfic comena sempre posant: figure(i); clf; on i = 1,2,,n

plot(x,y,k,l,n) k = parmetre de Lletra_Smbol_Tipus de Lnia [veure taula]
lletra del color seguida de (continua) o -- (discontinua)
l = LineWidth permet donar un gruix determinat a la lnia
'MarkerSize' permet donar un gruix determinat al punt
n = gruix de la lnia segons linewidth

Ex: plot(x,z,'g-','LineWidth',3) ; plot(x,y,'r--', 'LineWidth',2)

title(nom) permet escriure un ttol a la funci
xlable(nom) permet editar un nom a leix de les x
ylable(nom) permet editar un nom a leix de les y

hold on mante el grfic I (al escriure un de nou no borra lanterior)
hold off anulla hold on

Per dibuixar Lnies Horitzontals:
x=linspace (a,b);
plot([x(1),x(end)],[0,0],'k:')

Es poden dibuixar diferents grfiques amb un nic plot seguit lesquema:

plot(a
1
,b
1
,k
1
,a
2
,b
2
,h
2
, ... ,a
n
,b
n
,k
n
)


Per graduar eixos:
axis([a,b,c,d]) on


legend (frase 1, frase 2, , frase n) llegenda de la Grfica

loglog(x,y) Dibuixa un grfic en escala logartmica en x i en y
semilogx Dibuixa un grfic en escala logartmica en x i y normal
semilogy Dibuixa un grfic en escala logartmica en y i x normal
a = valor mnim de x
b = valor mxim de x
c = valor mnim de y
d = valor mxim de y
Mtodes Numrics Marc Costa Ros
4
Script Files:

Els Script Files sn programes que nosaltres creem que utilitza certes funcions de manera que podem assolir els
resultats desitjats introduint noms les dades corresponents.
File New M-File: Editor de Mat Lab Fem el programa ()
File Save as () sempre guardem el programa amb el mateix nom de la funci!

Exemple:
n=floor(rand*10);

k= input ('Escriu un nombre entre 0 i 9 :');

contador=1;

while k~=n
disp('Mala sort..., torna a provar');
k=input('Torna a escriure un altre nombre de 1 al 10:');
contador=contador +1;
end

disp (sprintf('Molt b! Has necessitat %3d intents per acertar el numero %3d'...
, contador, n))

fprintf('Molt b! Has necessitat %3d intents per acertar el numero %3d \n'...
, contador, n)


Function Files:

Funcions noves que creem perqu facin alguna tasca en concret en Mat Lab.

function parmetre de sortida = nom de la funci sense espais (parmetre dentrada)
Comentaris en % ____
Sempre s convenient comentar la funci: Ex % parmetre de sortida = parmetre dentrada + k

Sempre guardem el programa amb el mateix nom de la funci!
Si tenim ms duna funci posem claudtors: function [a,b,c]=

Al tornar a Matlab i executar la funci noms obtindrem el resultat

Exemple:
function m=ElMinim(V)

n=length(V);
m=V(1);

for i=2:n
if V(i)<m
m=V(i);
end

end

fprintf('La component mnima s: %5,2e',m)






Mtodes Numrics Marc Costa Ros
5
Expressions Lgiques:

Expressions lgiques en Mat Lab:



| = Alt Gr + 1










Observacions:


Exemple:
R= (b~=0) && (a/b>0) Si b= 0 ja no savalua a/0 i ens estalviem un error.

En el cas que el programa entri en un bucle: Ctrl + C (atura tots els processos de Mat Lab) .



Entrada i Impressi de dades:

Input:




Display:





Sprintf


















Fprintf
Normal MatLab
Igual = a=b == a==b
Diferent ab ~= a ~=b
Ms gran que > a>b > a > b
Ms gran o igual que ab >= a >= b
Ms petit que < a<b < a < b
Ms petit o igual que ab <= a <= b
Vertader (true) V V 1 1
Fal (false) F F 0 0
I a b & a & b
I breu && a && b
O V a V b | a | b
O breu || a || b
& true si les dues condicions sn certes.
&& si el primer es false no savalua el segon. (Al final tot ser false).
| true si un de les dues condicions s true.
|| si el primer s true ja no savalua el segon. (Al final tot ser true).
x=input (entrar dada:) ens apareix en pantalla la frase entrar dada:
[posar les cometes simples: ]

desprs dentrar un valor a Mat Lab assigna x = a.
disp (x): ens apareix en pantalla el valor de x
disp(text) ens apareix en pantalla la frase text. [posar les cometes simples: ]
disp(sprintf(%a,bk , i ) )
%a,bk: Format, on si posem %ad
a = n de carcters totals a = n de carcters totals
b = nombre de decimals no posem b
k = f format decimal k = d format enter
k = e format exponencial

a es pot ometre i el programa agafar un valor concret

podem collocar diversos formats en una sola lnia:
1.- primer escrivim tots els formats seguits amb el seu % corresponent
2.- separats en comes escrivim la variable amb la que funciona cada format de manera ordenada.

Exemple: disp(sprintf(%1, %2, .... %n, i
1
, i
2
, , i
n
,))

Podem escriure text entre els formats. Lhem descriure entre cometes simples: .

Podem posar Tabulacions: \t = espai en blanc
\n = salt de lnia

Si la lnia s molt llarga utilitzar els
fprintf () = disp(sprintf ( ) )

s aconsellable posar \n al final de la lnia.
Mtodes Numrics Marc Costa Ros
6
Treballar amb arxius de text:

Procediment:







Exemple:

%
% Escriure un programa que generi una matriu aleatria de n files
% i m columnes i la escrigui en un fitxer de manera ordenada.
%

% Les dades n i m han de demanar-se a l'usuari.

n = input('Nombre de files de la matriu: ');
m = input('Nombre de columnes de la matriu: ');

A = rand(n,m);

matriu = fopen('matriu.txt','w');

for i=1:n
for j=1:m
fprintf(matriu,'%5.3f \t',A(i,j));
end
fprintf(matriu,'\n');
end

fclose(matriu);


Altres:


Return:



Break
















nom_programa = fopen (___.a, k ) a = txt, res,
k = w podem escriure
k = r podem llegir.
fclose(nom_programa)

Per imprimir resultats en un arxiu de text: fprintf (nom_programa, )
return En el cas que estiguem analitzant una funci on no es compleix una condici i
no es pugui continuar ens torna a la pantalla principal.
break En el cas que estiguem realitzant sentencies i en un dels casos vulguem sortir
dun bucle i continuar desprs del end.

Exemple:
for i=1:100
T = T + 0.5;
p = 0.00105*T^2 + 0.0042*T + 1.352;
fprintf (file1, '%12.8f \t\t %12.8f\n',T,p);
if p >=3.2
break
end
end
Mtodes Numrics Marc Costa Ros
7
If: [Amb el if la condici ha destar entre parntesis]

Permet establir metdiques diferents segons condicions.

Esquema General:




Si la condici imposada s certa es segueixen unes certes
sentencies de programaci que no es seguirien si la condici s
falsa.


If else:


Esquema General:




Si la condici imposada s certa es segueixen unes certes
sentencies A de programaci.
Si la condici imposada s falsa o no es compleix es segueixen
unes certes sentencies B de programaci.




Elseif:


Esquema General:












Si la condici imposada s certa es segueixen unes certes
sentencies A de programaci.
Si la condici imposada s falsa o no es compleix simposa
una altra condici.
Si la nova condici imposada s certa es segueixen unes certes
sentencies B de programaci.
Si la nova condici imposada s falsa o no es compleix
simposa una altra condici.
Aix fins a arribar a lltim elseif:
Si la ltima condici imposada s certa es segueixen unes
certes sentencies N-1 de programaci.
Si la ltima condici imposada s falsa o no es compleix es
segueixen unes certes sentencies N de programaci.

if (Condici)

Sentncies

end
Condici
Sentncies
if
end
Vertader
Fals
if (Condici)

Sentncies A

else

Sentncies B

end
Condici
Sentncies A
if
end
Vertader
Fals
else
Sentncies B
if (Condici 1)

Sentncies A

elseif (Condici 2)

Sentncies B

elseif (Condici 3)

Sentncies C


elseif (Condici N-1)

Sentncies Z

else

Sentncies N

end
Condici A
Sentncies A
if
Vertader
Fals
elseif
Sentncies B
end
else
Sentncies N
Condici B
V
elseif
Sentncies C
Condici C
V
F
F
Mtodes Numrics Marc Costa Ros
8
Switch:

Permet analitzar els casos de variaci del valor duna variable


Esquema General:












Si la variable t valor 1 sexecuten unes certes sentencies A de
programaci.
Si la variable t valor 2 sexecuten unes certes sentencies B de
programaci.
Aix fins a arribar a otherwise:
Si la variable no pren cap dels valors anteriors sexecuten unes
certes sentencies N de programaci.


For:

Hi ha ocasions que s necessari repetir el mateix conjunt dinstruccions moltes vegades, canviant alguns detalls:

Esquema General:




Es van executant les instruccions del interior del bucle mentre la
variable comptador pren valors compresos entre el inici i el fi amb pas
h. Si no sespecifica el pas h=1.

Una vegada el comptador arriba al final, el bucle sacaba i el
programa continua amb les sentencies desprs del end.


While:

Hi ha ocasions que s necessari repetir el mateix conjunt dinstruccions moltes vegades fins que es compleixi una
certa condici, sense saber quantes vegades es repetir, canviant alguns detalls:

Esquema General:






s possible substituir la (condici) per una variable que pren el valor
0 i una condici falsa. Si la variable pren valors diferents a O s
equivalent a una condici vertadera.
El comptador x ha de ser modificat de manera x=kx+c. En quant el x
pren el valor 0 la condici ser falsa i el bucle acabar.
switch (Variable)

case (Valor 1)

Sentncies A



case (Valor N-1)

Sentncies N-1

otherwise

Sentncies N

end
Variable switch
Case
Sentncies A
end
Otherwise
Sentncies N
Valor 1
Case
Sentncies N-1
Valor N-1
for Comptador = inici : pas (h) : fi

Sentncies

end
Comptador i:h:f
Sentncies
for
end
Compt < f
Compt = f
x = 0
while Condici o Variable

Sentncies

Modificaci de x

end
El programa s efica si la variable no pren (o pot prendre) molts valors.
Sentncies A en x
Modificaci
de x; x=kx+c
while
end
C
certa
C falsa
Condici C
Mtodes Numrics Marc Costa Ros
9
Resum de metdiques:













































Condici
Sentncies
if
end
Vertader
Fals
Condici
Sentncies A
if
end
Vertader
Fals
else
Sentncies B
Condici A
Sentncies A
if
Vertader
Fals
elseif
Sentncies B
end
else
Sentncies N
Condici B
V
elseif
Sentncies C
Condici C
V
F
F
Variable switch
Case
Sentncies A
end
Otherwise
Sentncies N
Valor 1
Case
Sentncies N-1
Valor N-1
Comptador i:h:f
Sentncies
for
end
Compt < f
Compt = f
Sentncies A en x
Modificaci
de x; x=kx+c
while
end
C
certa
C falsa
Condici C
Mtodes Numrics Marc Costa Ros
10
Exemples:

Exemple de If:

Function file previ i necessari

function d = discriminante( a, b, c )
% uso: d = discriminante( a, b, c )
%
% Calcula el discriminante de la ecuacin de 2 grado: a x^2 + b x + c
%
% INPUT
% a, b, c: coeficientes de la ecuacin
%
% OUTPUT
% d: discriminante
%
d = b^2 - 4*a*c;


Script file

% Ecuacion2.m
%
% Programa que calcula las soluciones reales de
% una ecuacin de segundo grado
%

% Entrada de datos
disp( 'Vamos a resolver una ecuacin ax^2 + bx + c = 0' )
a = input( 'Entra el coeficiente cuadrtico a: ' )
b = input( 'Entra el coeficiente lineal b: ' )
c = input( 'Entra el trmino independiente c: ' )

% Clculo del discriminante
disc = discriminante( a, b, c );

% Resolucin de la ecuacin
if disc < 0
disp( 'El discriminante es negativo y el polinomio no tiene races reales.' )
elseif disc == 0
disp( 'El discriminante es nulo y slo existe una solucin.' )
sol = -b/(2*a)
else
disp( 'La ecuacin tiene dos soluciones reales: ' )
disc = sqrt( disc );
sol_1 = (-b+disc)/(2*a)
sol_2 = (-b-disc)/(2*a)
end











Mtodes Numrics Marc Costa Ros
11
Exemple de elseif

Function file previ i necessari

function v = volumenCubo( lado )
%
% uso: v = volumenCubo( lado )
%

% Verificacin de los datos
if lado < 0
disp( 'Las dimensiones del cubo tienen que ser positivas' )
return
end

% Clculo del volumen
v = lado^3;


function v = volumenCilindro( radio, altura )
%
% uso: v = volumenCilindro( radio, altura )
%

% Verificacin de los datos
if radio < 0 | altura < 0
disp( 'Las dimensiones del cilindro tienen que ser positivas' );
return
end

% Clculo del volumen
v = pi * radio^2 * altura;


function v = volumenEsfera( radio )
%
% uso: v = volumenEsfera( radio )
%

% Verificacin de datos
if radio < 0
disp( 'El radio de la esfera tiene que ser un valor positivo' )
return
end

% Clculo del volumen
v = 4/3 * pi * radio^3;


function v = volumenCono( radioBase, altura )
%
% uso: v = volumenCono( radioBase, altura )
%

% Verificacin de los datos
if radioBase < 0 | altura < 0
disp( 'Las dimensiones del cilindro tienen que ser positivas' )
return
end

% Clculo del volumen
v = pi * radioBase^2 * altura/3;
Mtodes Numrics Marc Costa Ros
12
Script file

% volumen.m
%
% Programa que calcula el volumen de diferentes cuerpos geomtricos.
% Pide datos y muestra el resultado por pantalla.
%
%
disp( ' [ 1 = Cubo ]' )
disp( ' [ 2 = Esfera ]' )
disp( ' [ 3 = Cilindro ]' )
disp( ' [ 4 = Cono ]' )

%
% Elegimos el cuerpo del que se va a calcular el volumen.
%
cuerpo = input( 'Elige el nmero correspondiente al cuerpo del que se quiere calcular el volumen: ' );

%
% Segn el cuerpo elegido se piden los datos y se llama a la funcin
% de clculo de volumen correspondiente
%
if cuerpo == 1
d = input( 'Longitud del lado: ' );
v = volumenCubo( d );
disp( 'El volumen del cubo es:' )
disp( v )

elseif cuerpo == 2
r = input( 'Radio de la esfera: ' );
v = volumenEsfera( r ) ;
disp( 'El volumen de la esfera es:' )
disp( v )

elseif cuerpo == 3
r = input( 'Radio del cilindro: ' );
h = input( 'Altura del cilindro: ' );
v = volumenCilindro( r, h );
disp( 'El volumen del cilindro es:' )
disp( v )

elseif cuerpo == 4
r = input( 'Radio de la base del cono: ' );
h = input( 'Altura del cono: ' );
v = volumenCono( r, h );
disp( 'El volumen del cono es:' )
disp( v )

else
disp( 'El nmero elegido no coresponde a ningn cuerpo no disponible' )

end








Mtodes Numrics Marc Costa Ros
13
Exemple For:


% ejemplo de for

n = 10;
V = 1:n;

suma = 0;
for I = 1:n
suma = suma + V(I);
end

if suma == n*(n+1)/2
disp( 'No haca falta hacer la cuenta para saber el resultado...' )
else
disp( 'Ups!' )
end


% exemple 2 de for

function m=ElMinim(V)

n=length(V);
m=V(1);

for i=2:n
if V(i)<m
m=V(i);
end

end



%Funci que ens dna la component mnima d'un vector

function m = minim(w, n, min, i)


% Entrada de dades
w = input ('Introduir el vector');
n = length(w);
min = w(1);

for i=2:1:n
if min > w(i)
min = w(i);
end
end

fprintf('La component mnima s: %5,2e',m)







Mtodes Numrics Marc Costa Ros
14
Exemple de While:


% Llista dels 100 primers nombres primers


disp('Llista dels 100 nombres primers')


num_primers=0;
num_test=1;

while num_primers <=100
if isprime(num_test)==1
num_primers = num_primers+1;
fprintf('El primer numero %3d s %3d \n', num_primers, num_test)
end
num_test=num_test+1;
end



%
% Anem a progamar un joc
% El joc consisteix en endevinar el numero d'un dau de 10 cares
%

n=floor(rand*10);

k= input ('Escriu un nombre entre 0 i 9 :');

contador=1;

% Creem el bucle corresponen a les tirades:

while k~=n
disp('Mala sort..., torna a provar');
k=input('Torna a escriure un altre nombre de 0 al 9:');
contador=contador +1;
end

% Ara creem les possibles respostes resultants

if contador ==1
disp (sprintf('Felicitats Fenomenon!!! Has necessitat %3d intents per encertar el numero %3d crak!'...
, contador, n))
elseif contador >1 & contador <6
disp (sprintf('No esta mal... Has necessitat %3d intents per encertar el numero %3d ...'...
, contador, n))
elseif contador >=6 & contador <9
disp (sprintf('Buff... Has necessitat %3d intents per encertar el numero %3d . Es pot millorar no creus?'...
, contador, n))
elseif contador >=9
disp (sprintf('Jajajaja... Has necessitat %3d intents per encertar el numero %3d primo/a!!'...
, contador, n))
end

You might also like