Professional Documents
Culture Documents
de la niversidad !omplutense de Madrid, se pretende dar un primer paso en el aprendi"a#e del uso de MA$%A&' En lo (ue si)ue, se supone (ue el usuario teclea lo (ue aparece en color ro#o *de +ec+o, lo ,ptimo sera (ue el aprendi" de MA$%A& reprodu#era stos y parecidos e#emplos por s mismo- y precedido del smbolo .., (ue +ace el papel del prompt de la m(uina' En color ne)ro aparecer la respuesta de MA$%A& a la instrucci,n tecleada' %os comentarios aparecern en color verde' Antes de comen"ar, +a)amos al)unas consideraciones )enerales/ MA$%A& distin)ue entre may0sculas y min0sculas' %a comilla 1 es la (ue, en un teclado estndar, se encuentra en la tecla de la interro)aci,n'
%os comentarios deben ir precedidos por 2 o, lo (ue es lo mismo, MA$%A& i)nora todo lo (ue vaya precedido por el smbolo 2' %a ayuda de MA$%A& es bastante 0til3 para acceder a la misma basta teclear help' Es recomendable usarlo para obtener una informaci,n ms precisa sobre la sinta4is y diversas posiblidades de uso de los comandos'
A )randes ras)os, los temas a(u introducidos son/ 5eneralidades' 6ectores y matrices'
7peraciones con vectores y matrices' 6ariables l,)icas' 8olinomios' Derivadas y primitivas' 5rficas de funciones' 8ro)ramaci,n con MA$%A&'
%os clculos (ue no se asi)nan a una variable en concreto se asi)nan a la variable de respuesta por defecto (ue es ans *del in)ls, answer-/
>>2+3 ans =
9in embar)o, si el clculo se asi)na a una variable, el resultado (ueda )uardado en ella/
>>x=2+3 x = 5
%as operaciones se eval0an por orden de prioridad/ primero las potencias, despus las multiplicaciones y divisiones y, finalmente, las sumas y restas' %as operaciones de i)ual prioridad se eval0an de i"(uierda a derec+a/
>>2/4*3 ans = 1.5000 >>2/(4*3) ans = 0.1667
9e pueden utili"ar las funciones matemticas +abituales' As, por e#emplo, la funci,n
coseno,
>>cos(pi) % pi es ans = (1 na !a"ia#le con !alo" p"e$e%e"&ina$o 3.1415'...
o la funci,n e4ponencial
>>exp(1) ans = 2.71-3 % ) nci*n exponencial e!al a$a en 1+ es $eci"+ el n,&e"o e
Adems de la variable pi , MA$%A& tiene otras variables con valor predeterminado3 ste se pierde si se les asi)na otro valor distinto' 8or e#emplo/
>>eps p"ecisi*n ans = 2.2204e(016 % .psilon $e la &/0 ina. 1#s2"!ese 0 e 345647 %"a#a8a en $o#le
pero'''
>>eps=7 eps = 7
7tro e#emplo de funci,n matemtica/ la ra" cuadrada3 como puede verse, traba#ar con comple#os no da nin)0n tipo de problema' %a unidad ima)inaria se representa en MA$%A&como i o 8, variables con dic+o valor como predeterminado/
>>s0"%((4) ans = 0+ 2.0000i
El usuario puede controlar el n0mero de decimales con (ue aparece en pantalla el valor de las variables, sin olvidar (ue ello no est relacionado con la precisi,n con la (ue se +acen los clculos, sino con el aspecto con (ue stos se muestran/
>>1/3
ans = 0.3333 >>9o"&a% lon: >>1/3 ans = 0.33333333333333 >>9o"&a% % ; el!e al 9o"&a%o es%/n$a" 0 e es el $e 4 ci9"as $eci&ales
$o $o $o $o
8ara definir un vector fila, basta introducir sus coordenadas entre corc+etes/
>>!=D1 2 3E != 1 2 3 >><=D4 5 6E; % ;ec%o" $e 3 coo"$ena$as
9i (ueremos declarar un vector de coordenadas e(uiespaciadas entre dos dadas, por e#emplo, (ue la primera val)a ;, la 0ltima <; y la distancia entre coordenadas sea <, basta poner/
>>!ec%1=0>2>20 !ec%1 = 0 2 4 6 - 10 12 14 16 1- 20
E(uivalentemente, si lo (ue conocemos del vector es (ue la primera coordenada vale ;, la 0ltima <; y (ue tiene == en total, escribiremos/
>>!ec%2=linspace(0+20+11) !ec%2 = 0 2 4 6 - 10 12 14 16 1- 20
A las coordenadas de un vector se accede sin ms (ue escribir el nombre del vector y, entre parntesis, su ndice/
>>!ec%2(3) ans = 4
o,
>>!ec%1(>) ans= 0 2 4 6 10 12 14 16 120
%as matrices se escriben como los vectores, pero separando las filas mediante un punto y coma3 as una matri" >4>/
>>3=D1 2 3;4 5 6;7 - 'E 3 1 4 7 = 2 3 5 6 - ' % @ %"asp es%a (s a$8 n%a)
>>3F ans =
A los elementos de una matri" se accede sin ms (ue escribir el nombre de la matri" y, entre parntesis, los respectivos ndices/
>>&a%(1+3) ans = 3 % Gle&en%o en la p"i&e"a 9ila y %e"ce"a col &na $e la &a%"iA &a%
ans = 4 6 0 1
0 0 0 1 0
0 0 0 0 1
la matri" nula,
>>Ae"os(3) ans 0 0 0 0 0 0 = 0 0 0
1 1 1 1
ans = 3 3 >>siAe(!) ans = 1 3 >>len:%h(!) % 6on:i% $ $el !ec%o" (n,&e"o $e coo"$ena$as) ans = 3
E4isten comandos (ue permiten crear de forma sencilla matrices' 8or e#emplo/
>>$ia:(!) ans 1 0 0 2 0 0 = 0 0 3 % 3a%"iA $ia:onal c ya $ia:onal es el !ec%o" !
>>$ia:($ia:(3)) % 3a%"iA $ia:onal con la $ia:onal $e 3. 6a sen%encia $ia:(3) $a % el !ec%o" 9o"&a$o po" la $ia:onal $e la &a%"iA 3 ans 1 0 0 5 0 0 = 0 0 '
0 0 1 0 1
0 0 0 1 0
1 0 0 4 5 0 7 - ' >>%"i (3) % 3a%"iA 9o"&a$a po" la pa"%e %"ian: la" s pe"io" $e 3. ans 1 2 0 5 0 0 = 3 6 '
%as funciones matemticas elementales estn definidas de forma (ue se pueden aplicar sobre arrays' El resultado es el array formado por la aplicaci,n de la funci,n a cada elemento del array' As/
>>lo:(!) ans = 0 0.6'31 1.0'-6 >>p=(0>0.1>1)*pi % ;ec%o" $e9ini$o co&o el p"o$ c%o $e escala" p = Bol &ns 1 %h"o :h 7 0 0.3142 0.62-3 0.'425 1.2566 1.570- 1.--50 Bol &ns - %h"o :h 11 2.1''1 2.5133 2.-274 3.1416 >>x=sin(p) n !ec%o" po" n
x = Bol &ns 1 %h"o :h 7 0 0.30'0 0.5-7- 0.-0'0 0.'511 1.0000 0.'511 Bol &ns - %h"o :h 11 0.-0'0 0.5-7- 0.30'0 0.0000
%as operaciones +abituales entre arrays *suma, resta y producto escalar de vectores3 suma, resta, producto y potencia de matrices- se representan con los operadores +abituales/
>>!+< ! 1 < 4 = 2 3 = 5 6 % L"o$ c%o escala" (p"o$ c%o $e &a%"ices 1x3 po" 3x1) % Keco"$a&os los !alo"es $e ! y <
>>A=!*<F A = 32 >>M=<F*! M 4 5 6 = - 12 10 15 12 1-
>>!*<
NNN G""o" sin: ==> * Inne" &a%"ix $i&ensions & s% a:"ee. >>&a% &a% 1 2 4 5 0 0 = 3 6 1 % 3a%"iA &a% ele!a$a al c a$"a$o % Keco"$a&os el !alo" $e la &a%"iA &a%
$ambin pueden efectuarse multiplicaciones, divisiones y potencias de arrays, entendindolas como elemento a elemento *como, de +ec+o, se reali"an la suma y la resta-' El operador utili"ado para ellas es el +abitual precedido por un punto3 es decir/
>>!.*< % ;ec%o" 9o"&a$o po" los p"o$ c%os $e las "espec%i!as coo"$ena$as> % ans(i)=!(i)*<(i) ans = 4 10 1>><./! % ;ec%o" 9o"&a$o po" el cocien%e $e ca$a coo"$ena$a $e < en%"e la % coo"$ena$a co""espon$ien%e $e !> ans(i)=<(i)/!(i)
ans = 4.0000 2.5000 2.0000 >>&a%.O2 % 3a%"iA c yos ele&en%os son los $e &a% ele!a$os % al c a$"a$o> ans(i+8)=&a%(i+8)O2 ans = 1 4 ' 16 25 36 0 0 1
$ambin e4isten variables l,)icas (ue toman los valores ; *falso- o = *verdadero- ' 8or e#emplo/
>>a#s(!)>=2 % ;ec%o" l*:ico c yas coo"$ena$as !alen 1 si la coo"$ena$a % co""espon$ien%e $e ! es >= 2 y 0 si no lo es
ans = 0 1 1 >>!ec%o"=!(a#s(!)>=2) % ;ec%o" 9o"&a$o po" la coo"$ena$as $e ! 0 e % !e"i9ican la $esi: al$a$ !ec%o" = 2 3 >>!2=D3 2 1E !2 = 3 2 1 >>lo:ica=!==!2 % 4si:naci*n $e n !alo" l*:ico (el $o#le si:no i: al es el % i: al l*:ico)
9e puede traba#ar con polinomios/ basta tener en cuenta (ue un polinomio no es ms (ue un vector' El orden de los coeficientes es de mayor a menor )rado, por e#emplo/
>>p=D1 0 2 0 3E p = 1 0 2 0 3 >>0=D2 1 0E 0 = 2 1 0 % Lolino&io 2*xO2+x % Lolino&io xO4+2*xO2+3
(0.5000 >>poly(Di (i 1/2 piE) % Lolino&io &*nico 0 e %iene po" "aRces a los % n,&e"os i+ (i+ 0.5 y pi
Dentro del m,dulo *toolbox- de matemtica simb,lica, se utili"a el pro)rama de clculo simb,lico MA8%E' !on estas +erramientas, se puede traba#ar con funciones,
>>9=Fsin(x)F 9 = sin(x) % ) nci*n sin(x) $e9ini$a &e$ian%e na ca$ena $e ca"ac%e"es
calcular derivadas,
>>$i99(sy&(9)) ans = cos(x) >>$i99(sy&(9)+2) ans = (sin(x) % Je"i!a$a se: n$a $e 9
o encontrar primitivas'
>>in%(sy&(Flo:(x)F)) % L"i&i%i!a $e la 9 nci*n lo:a"i%&o ans = x*lo:(x)(x >>$i99(sy&(Fx*lo:(x)(xF)) % Bo&p"o#aci*n ans = lo:(x)
MA$%A& tiene un )ran potencial de +erramientas )rficas' 9e pueden dibu#ar los valores de un vector frente a otro *de la misma lon)itud-/
>>x=pi*((1>0.1>1); >>y=x.*sin(x); >>plo%(x+y) % Lo" $e9ec%o poli:onal
na
!omo se ve, con pocos puntos la )rfica tiene un aspecto demasiado lineal a tro"os' 8ara @en)a:ar@ al o#o, basta tomar ms puntos'
>>x=pi*((1>0.01>1); >>y=x.*sin(x); >>plo%(x+y)
>>9plo%(FxO2*sin(1/x)F+D(0.05 0.05E)
$ambin puede usarse el verstil comando eAplo% *se lee como easy plot- (ue permite dibu#ar funciones,
>>eAplo%(Fexp(x)F) a la 9 nci*n % Ji# 8a la 9 nci*n exponencial en n in%e"!alo a$ec a$o
curvas en paramtricas,
>>eAplo%(Fsin(%)F+Fcos(%)F+D0 piE)
e implcitas
>>eAplo%(FxO2 ( yO2 ( 1F)
$ambin permite dibu#ar superficies' %a forma ms sencilla es mediante el comando eAs "9+
>>eAs "9(Fsin(x*y)F+D(2 2 (2 2E)
6olver al ndice )eneral 8ara escribir un pro)rama con MA$%A& +abr (ue crear un fic+ero (ue ten)a e4tensi,n .& y conten)a las instrucciones' Esto se puede +acer con cual(uier editor de te4tos, pero tiene al)unas venta#as usar el editor propio de MA$%A& llamado &e$i%' MA$%A& traba#a con memoria dinmica, por lo (ue no es necesario declarar las variables (ue se van a usar' 8or esta misma ra",n, +abr (ue tener especial cuidado y cerciorarse de (ue entre las variables del espacio de traba#o no +ay nin)una (ue se llame i)ual (ue las de nuestro pro)rama *proveniente, por e#emplo, de un pro)rama previamente e#ecutado en la misma sesi,n-, por(ue esto podra provocar conflictos' A menudo, es conveniente reservar memoria para las variables *por e#emplo, si se van a utili"ar matrices muy )randes-3 para ello, basta con asi)narles cual(uier valor' Del mismo modo, si se est usando muc+a memoria, puede ser conveniente liberar parte de ella borrando *clea"- variables (ue no se vayan a usar ms' n pro)rama escrito en MA$%A& admite la mayora de las estructuras de
pro)ramaci,n al uso y su sinta4is es bastante estndar' En los si)uientes e#emplos se muestra la sinta4is de al)unas de estas estructuras * i9, 9o", <hile,'''-' Ejemplo 1: !alcular la suma de los n primeros trminos de la sucesi,n =, <4, >4A<, B4A>, '''
n=inp %(FTB /n%os %2"&inos 0 ie"es s &a"N x=inp %(FJa&e el !alo" $el n &e"o x F); s &a=1; 9o" i=2>n s &a=s &a+i*xO(i(1); en$ $isp(FGl !alo" pe$i$o esF) $isp(s &a) F);
Ejemplo 3: Escribir un n0mero natural en una base dada *menor (ue die"-'
n=inp %(FJa&e el n,&e"o 0 e 0 ie"es ca&#ia" $e #ase F); #ase=inp %(FTGn 0 2 #ase 0 ie"es exp"esa"loN F); i=1; <hile n>0 c(i)="e&(n+#ase); n=9ix(n/#ase); % La"%e en%e"a $e n/#ase i=i+1; en$ $isp(F6a exp"esi*n en la #ase $a$a es>F) i=i(1;
$isp(c(i>(1>1))
8or 0ltimo, tambin pueden pro)ramarse funciones' %a primera instrucci,n de un fic+ero (ue conten)a una funci,n de nombre 9 n debe ser/
9 nc%ion Da": &en%os $e sali$aE=9 n(a": &en%os $e en%"a$a)
Es conveniente (ue el fic+ero (ue conten)a la funci,n se llame como ella3 as, la funci,n anterior debera )uardarse en el fic+ero 9 n.&3 por e#emplo, si se desea pro)ramar una funci,n (ue calcule, mediante el al)oritmo de Euclides, el m4imo com0n divisor de dos n0meros naturales, basta escribir un fic+ero e cli$es.& cuyo contenido sea/
9 nc%ion &=e cli$es(a+#) % B/lc lo $el &/xi&o co&,n $i!iso" $e $os n,&e"os na% "ales % &e$ian%e el al:o"i%&o $e G cli$es i9 aU# c=#; #=a; a=c; en$ <hile #>0 c="e&(a+#); a=#; #=c; en$ &=a;
9i, una ve" escrito el fic+ero anterior, en el espacio de traba#o o en un pro)rama se escribe la instrucci,n
&c$=e cli$es(33+121)
en la variable &c$ se almacenar el valor ==' %as variables de una funci,n son siempre locales' 8or tanto, aun(ue en el seno de la funci,n se modifi(uen los ar)umentos de entrada, el valor de las variables correspondientes (ueda inalterado' 8or e#emplo, en la funci,n e cli$es.& se modifica el valor de los ar)umentos de entrada, pero, sin embar)o/
>>x=15; >>&c$=e cli$es(x+3); >>x
x = 15