Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ADE/DADE/TADE/ECO
2010-11
os bajar un fichero llamado launch.ica, lo abrs, le permits Full Acces y ya estis dentro de MatLab. Os aparecer una pantalla del siguiente estilo:
Professor: Josep E. Peris Ferrando
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
No hagis caso de los Warnings (avisos). Esta operacin podemos hacerla en cualquier aula de libre acceso de la universidad, o desde casa, o en ambos sitios. Lo que sea ms cmodo y/o conveniente.
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
3 7+5 1 + 48 + 4 2
escribiremos lo siguiente: >> (((7+(3/5))/2)+4)*(8+(1/4)) y al pulsar el Intro obtendremos: ans = 64.3500 NOTA: la expresin anterior se podra escribir con menos parntesis, pero ms vale que os sobren a que os falten. Ejercicio: Calcula usando MatLab
7 3 1 3 1 4 2+ 3
Te da el siguiente resultado? Si no es as, revisa las operaciones que has introducido. ans = -0.2500 Tambin se pueden usar letras para guardar un valor numrico, o una expresin como las anteriores, que ser utilizado con posterioridad. Por ejemplo, si escribimos: >> a = 2 al pulsar Intro nos dar como respuesta: a= 2 y ahora cada vez que escribamos a tomar el valor de 2 (hasta que cambiemos, si queremos, el valor de a). Si despus de escribir a = 2 ponemos un punto y coma (;), guardar igualmente dicho valor, pero no nos dar respuesta al pulsar Intro y esperar a que le demos la siguiente instruccin. Por ejemplo: >> b = 36/15; >>
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
ha guardado el valor de b. Si queremos saber cunto vale, basta que escribamos b y pulsemos el Intro. Obtendremos lo siguiente: >> b b= 2.4000 Si ahora queremos, podemos usar el valor de b, y el de a, para calcular otras expresiones. Podemos, por ejemplo, multiplicar a*b (que valdr 4.8, recuerda que a = 2, b = 2.4) escribiendo >> a*b y, al pulsar Intro obtenemos: ans = 4.8000 Se puede usar cualquier letra para guardar un dato, pero es conveniente ser ordenado (para no borrar un dato anterior). Una buena idea puede ser seguir el orden del abecedario (no uses ll, ). Cuando lleguemos a las variables (siguiente seccin) all tenderemos a usar t, u, v, x, y, z, Tambin se pueden usar combinaciones de letras, o palabras, para guardar valores. Pero intentad buscar lo ms sencillo. Si, por ejemplo, guardamos el 3 en la palabra armario: >> armario = 3; cada vez que lo necesite tendr que teclear toda la palabra armario (lo cual es incomodo): >> 2*armario ans = 6 Hay algunas letras (o combinaciones de letras) que estn reservadas, pero normalmente no las usaremos. Hay una que puede ser til: mirad que pasa si escribs pi y pulsis Intro: >> pi ans = 3.1416 Una buena opcin, para ser ordenado, es llamar a los nmeros que introducimos (o a las variables) con una letra y nmeros consecutivos para no borrar los anteriores. Por ejemplo: a1, a2, a3, a4, ; x1, x2, x3, ; y1, y2,
Professor: Josep E. Peris Ferrando
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
La siguiente operacin es la potencia (por ejemplo, para calcular 38 ). Esta operacin viene representada por el acento circunflejo (^) : si escribimos >> 3^8 (NOTA: no vers el ^ en pantalla hasta que no pulses el 8)
al dar al Intro obtenemos la respuesta: ans = 6561 luego ya sabemos que 38 = 6561 . De esta manera podemos calcular el valor de cualquier nmero elevado a cualquier otro. En particular, nos permite calcular races ya que, como sabemos, escribimos: >> 28^(1/2) ans = 5.2915 Con la misma tcnica podemos calcular races cbicas, cuartas, etc. Para la raz cuadrada tambin podemos usar directamente sqrt: >> sqrt(28) ans = 5.2915 Si queremos calcular >> 8^(3/5) y, al pulsar Intro nos dar: ans = 3.4822 Otras funciones que pueden ser interesantes (por orden alfabtico):
o abs o atan o cos o exp
5 3
1 2
28 = (28)
1 2
83 = 8 5 escribiremos
calcula el valor absoluto calcula el arco-tangente calcula el coseno (el arco hay que darlo en radianes, no grados) calcula la exponencial exp(3) = e3 si ponemos exp(1) nos da el valor del nmero e >> exp(1) ans =
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
2.7183
o factorial calcula el factorial de un nmero natural: factorial(5) = 5! o log o max o min o sin o tan
calcula el logaritmo neperiano calcula el mximo de los nmeros que pongamos calcula el mnimo de los nmeros que pongamos calcula el seno calcula la tangente
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
>> roots([1,0,-1]) y al pulsar el Intro obtenemos la respuesta (que ya conocemos): ans = -1.0000 1.0000 Otro ejemplo: clculo de las races del polinomio x3 + 4x 2 + x 6 : >> roots([1,4,1,-6]) ans = -3.0000 -2.0000 1.0000 Calculad aplicando Ruffini las races de este polinomio para comprobar que MatLab lo ha hecho bien (seguro que s).
NOTA: en vez de comas se pueden dejar espacios en blanco. Por ejemplo
>> roots([1 10 32 38 15]) ans = -5.0000 -3.0000 -1.0000 -1.0000 que nos dice que las races del polinomio x 4 + 10x3 + 32x2 + 38x + 15 son -5, -3, -1, -1.
(instrucciones) que hemos ido introduciendo: desde la ltima, hasta la primera de todas, en este orden, pulsando sucesivas veces. Esto nos permite recordar nmeros (o variables) guardados, operaciones que hemos hecho (al pulsar Intro volver a hacerlas), etc. Si hemos guardado nuestras constantes con los nombres a1, a2, a3, si ahora escribimos >> a
Professor: Josep E. Peris Ferrando
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
y pulsamos al cursor , nos recuperar todas las sentencias que empiecen con la letra a, tambin en orden inverso a como las hemos introducido (desde la ltima a la primera). Una vez llegados a la que nos interesa (por ejemplo a7) ahora podemos modificarla antes de darle al Intro (por si nos hemos equivocado, o queremos cambiar el valor de un dato y variable). Por ejemplo, tenamos: >> a7= 4^(1/3) a7 = 1.59 (y hemos calculado la raz cbica de 4). Si ahora queremos calcular la raz cbica de -20, en vez de volver a teclear todos los datos, le damos al cursor y recuperamos la sentencia: >> a7= 4^(1/3) ahora, antes de darle al Intro la modificamos (movindonos con el cursor o
) y la cambiamos a:
>> a8= -20^(1/3) Al pulsar Intro obtenemos la respuesta: a8 = -2.71 Si queris borrar todos los datos (para empezar de nuevo, porque os habis equivocado, ) basta que seleccionis Edit en el men superior y pulsis en Clear Command History (os pedir confirmacin; si no es necesario no borris los datos)
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
cifras decimales. Por ejemplo, podemos acordar en trabajar con 4 cifras decimales. Para ello, escribiremos >> format('short') y pulsaremos Intro. Ahora obtenemos >> 2/3 ans = 0.6667 Si queremos trabajar con ms cifras decimales, escribiremos >> format('long') y obtenemos 15 decimales >> 2/3 ans = 0.666666666666667 Otra opcin es trabajar con fracciones (til para la solucin de sistemas de ecuaciones que veremos ms adelante). Por ejemplo, para calcular las races de un polinomio, si escribimos >> roots([1 -3 -6]) si estamos trabajando con format('short') nos devuelve la respuesta: ans = 4.3723 -1.3723 Si introducimos la siguiente sentencia, trabajar con fracciones y al volver a pedir lo mismo nos dar el resultado en fracciones: >> format('rat') >> roots([1 -3 -6]) ans = 1609/368 -505/368
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
2. Variables. Funciones.
Antes de poder calcular y representar una funcin, debemos aprender a introducir las variables. Para ello, elegimos el nombre de la variable (x, por ejemplo), decidimos un rango, o intervalo, de valores (entre -5 y 5, por ejemplo) y decidimos un incremento de x, es decir de cuanto en cuanto contamos desde -5 hasta 5. Normalmente ser un nmero pequeo (0.1, 0.01), pero podemos elegir incrementos ms grandes. Si, por ejemplo, elegimos un incremento de 1, lo que decimos es que vamos a contar de 1 en 1 desde -5 hasta 5. Esto lo escribiremos separando los datos por dos puntos (:) del siguiente modo: >> x=-5:1:5 x= -5 escribiremos >> x=-5:1:5; Si ahora elegimos un incremento menor, >> x=-5:0.1:5; contamos de 0.1 en 0.1; es decir, tendramos los valores de x: -5, -4.9, -4.8, -4.7, -4.6, (si no ponemos el punto y coma (;), se nos llenar la pantalla de nmeros: haced la prueba) Fijmonos que lo que estamos haciendo es coger unos determinados valores de la variable (no todos, pero al hacer el incremento muy pequeo estamos eligiendo valores muy cercanos unos de otros). Pregunta: cuntos valores de x consideramos al definir la variable del siguiente modo? >> x=-5:0.01:5; Ahora que ya tenemos la variable, definimos la funcin de manera parecida a como antes calculbamos con los nmeros. Por ejemplo (importante poner siempre el punto y coma): >> z=sin(x); >> y=exp(x); >> u=log(x+10); para que sea positivo el nmero y poder calcular el logaritmo sumo 10
Professor: Josep E. Peris Ferrando
10
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
En realidad, MatLab guarda los datos como vectores. Si escribimos >> x=-5:0.1:5; >> y=exp(x); tenemos guardados dos vectores x, y con 101 nmeros (componentes) cada uno de ellos.
CUIDADO:
Cuando ahora vayamos a definir funciones, hay que llevar cuidado con las operaciones bsicas producto (*), cociente (/) y potencia (^): estas ahora se pondrn con un punto previo: .* ./ .^ Para la suma y la resta no hay que poner el punto delante. Por ejemplo, para la funcin (polinomio) x3 + 4x 2 + x 6 escribimos: >> y=x.^3+4.*x.^2+x-6; (un fallo muy comn es escribir 4x, sin poner el smbolo de multiplicacin: nos dar un error) Para la funcin x+3 x2 1 escribiremos >> y=(x+3)./(x.^2-1); Si todava estamos en el intervalo desde -5 a 5, al pulsar Intro MatLab nos indicar la siguiente advertencia: Warning: Divide by zero. >> ya que cuando x = 1, x = -1, el denominador vale 0.
NOTA: en algunas versiones de MatLab no sale este aviso.
3. Representacin grfica.
Para representar grficamente una funcin (una vez la hemos definido) la instruccin es plot (dibujar, en ingls). Vamos a ir vindolo con un ejemplo que conocemos: la parbola y = x 2 .
Professor: Josep E. Peris Ferrando
11
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
1) definimos un intervalo de x, y los incrementos >> x=-5:0.1:5; 2) definimos la funcin >> parabola=x.^2; 3) ahora le decimos que dibuje los datos calculados >> plot(x,parabola); y nos aparece (en otra ventana) la siguiente figura:
En la parte superior izquierda tenemos el men que nos va a permitir mejorar y guardar la figura actual. Aqu est una ampliacin de dicho men:
NOTAS:
1. El llamar a la funcin parabola (no se ponen acentos) resulta incmodo ya que hay que teclear ms letras. Hubiera sido mejor poner >> y=x.^2; >> plot(x,y); 2. Ya podemos guardar esta figura, entrando en el desplegable File, seleccionando en Save As una carpeta donde guardarla, un Nombre (ahora s que podemos llamarla parbola, para luego saber cul es la grfica que tenemos guardada) y el Tipo: JPEG image es una buena eleccin. Si hacemos
Professor: Josep E. Peris Ferrando
12
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
3. Si ahora definimos otra funcin en MatLab y le pedimos que la dibuje, borrar esta y har la nueva (aunque le hayamos puesto un nombre distinto: z, exponencial, tortuga, ) Si queremos que nos dibuje dos funciones (o ms) juntas, debemos escribir: hold on. As dibujar tantas como le digamos sin borrar las anteriores. Para desactivar esta opcin, escribiremos hold off. Por ejemplo: >> hold on >> z=sqrt(abs(x)); >> plot(x,z) Nos habr dibujado, junto a la parbola, la funcin que calcula la raz cuadrada del valor absoluto de x (entre -5, 5 ya que no hemos modificado el intervalo). Una vez guardada (con otro nombre) tendremos
13
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Si queremos que ya no dibuje ms encima, escribiremos >> hold off Si tenemos una grfica y queremos ahora que nos dibuje otra en una nueva ventana, sin perder la que tenamos, escribiremos en MatLab la sentencia figure: >> figure y esto podemos hacerlo tantas veces como queramos, abriendo sucesivas ventanas. Vamos ahora a pedirle que dibuje la grfica del polinomio que habamos introducido antes: >> y=x.^3+4.*x.^2+x-6; >> plot(x,y) Si lo guardamos en un fichero, tendremos la siguiente grfica:
Vamos ahora a mejorar el aspecto de nuestra grfica, para lo que nos fijaremos de nuevo en la tabla de herramientas:
Pulsando con el ratn en la flecha, ahora el cursor nos permite situarnos encima de la curva, encima de los ejes, seleccionando lo que nos interese pulsando sobre ello. Por ejemplo, si hacemos doble-clic sobre la curva veremos:
Professor: Josep E. Peris Ferrando
14
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Ampliando la parte inferior, vemos que nos permite cambiar la lnea (Line), poniendo puntos, ; permite cambiar el grosor de la lnea (en vez de 0.5, probad a poner 3); y el color (cambiamos a rojo)
15
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Tambin permite cambiar el tipo de dibujo (Plot Type): si seleccionamos Area tendremos la siguiente grfica:
En Plot Type volvemos a seleccionar lnea (Line) para regresar a la versin anterior. Si ahora hacemos clic sobre el fondo, estamos seleccionando los ejes (en el cuadro aparecern unos pequeos cuadrados siguiente men en la parte inferior: ) y nos va a dar el
16
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Marcando el Grid, en X y en Y, nos saldr una cuadrcula. En los lmites de X podemos quedarnos slo con un trozo del intervalo (lo que nos dar una ampliacin de ese trozo). Con el grid queda bastante ms claro por donde pasa la grfica. Tambin podemos ponerle un ttulo a esta grfica; por ejemplo se puede llamar polinomio1. Para eso, escribimos polinomio1 en la ventana donde pone Title.
la versin de MatLab con la que trabajemos) se puede acceder a l desde Edit (men en la parte superior), eligiendo Figure Properties o Axes Properties. Por ltimo (se pueden hacer muchas ms cosas, pero nos vamos a quedar aqu) tambin se pueden dibujar puntos sueltos que nos interesen. Para ello se usa la funcin scatter. Vamos a poner varios puntos en la grfica anterior. Por ejemplo el (-4,50), el (0,100) y el (3,0). Para que no se borre la curva que ya tenemos, primero se pone hold on (si no recordamos si lo hemos puesto, no pasa nada por volver a ponerlo) y escribiramos: >> hold on >> scatter(-4,50) >> scatter(0,100) >> scatter(3,0) Ponindonos sobre cada punto, le podemos cambiar la forma (crculo, cuadrado, estrella, ) darle color de fondo, etc. Nos podra quedar esta grfica:
Professor: Josep E. Peris Ferrando
17
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
NOTA: Los puntos pueden ponerse todos a la vez, separando las primeras
coordenadas de las segundas: >> scatter([-4 0 3],[50 100 0]) Si nos fijamos en la ltima grfica, entre -3 y -2 parece que la funcin es constante (vale siempre cero) Vamos a ampliar un trozo, y para ello nos quedaremos con el intervalo desde -4 hasta 1. Eso lo haremos seleccionando los ejes (clic en el fondo) y en la pestaa de X Axis, ponemos en X Limits: -4 en un extremo y 1 en el otro. El cambio no se ver directamente, slo ser efectivo cuando vayamos a otro sitio. Seleccionamos la pestaa Y Axis, y ponemos -10 a 5 (mirando la grfica vemos entre qu valores est la Y, elegimos dos para que no se salga) La grfica que nos queda es la siguiente, que vemos claramente que no es constante:
es fcil de manejar.
Professor: Josep E. Peris Ferrando
18
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
f(x)dx
MatLab calcula este valor de forma aproximada (para calcular una primitiva y aplicar la regla de Barrow, ver la pgina http://www.wolframalpha.com/input/?
(hay que poner integrate y, entre parntesis la funcin que se quiere integrar; tambin se puede usar para derivar).
El proceso para obtener el valor de una integral definida (que, en su caso, representar un rea) es el siguiente:
o primero hay que definir la variable en el intervalo de integracin, o uno
quad(f,a,b)
o al pulsar Intro nos devuelve el valor de esta integral (un nmero)
Ejemplo: >> x=-10:0.001:10; >> f=@(x)(x.^2); >> quad(f,0,2) ans = 2.6667 Ha calculado:
2
x3 8 x dx = = 0 = 2.6667 0 3 0 3
2 2
2x dx = x +4
2
te da el siguiente resultado? (fjate que le he puesto la instruccin para que d el resultado con muchas cifras decimales) ans = 0.693147129539388
19
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
5. Matrices. Operaciones.
El primer paso para trabajar con matrices es introducir la matriz como dato. Para ello se usan los corchetes. La forma es: [primera fila ; segunda fila; tercera fila ; ; ltima fila] Por ejemplo, para introducir la matriz 1 2 0 A = 1 1 3 5 0 8 escribiremos: >> A=[1 2 0;-1 1 3;5 0 8] A= 1 -1 5 2 1 0 0 3 8
(Los elementos de cada fila tambin se pueden poner separados por comas) Para sumar, restar o multiplicar matrices (cuando se puedan hacer estas operaciones) basta poner los smbolos, respectivamente, +, -, * (NOTA: ahora sin el punto previo) Por ejemplo, si ponemos >> B=[2 1 1;0 2 5]; y escribimos >> A+B ya sabemos que no se pueden sumar. La respuesta (de error) que nos da es: ??? Error using ==> plus Matrix dimensions must agree Sin embargo, >> B*A ans = 6 23 >> A*B ??? Error using ==> mtimes Inner matrix dimensions must agree
Professor: Josep E. Peris Ferrando
5 2
11 46
20
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Cuando tenemos matrices cuadradas (como A) podemos calcular la traza, el determinante y la inversa (si existe). Estas funciones son:
o trace(A) o det(A) o inv(A)
En el ejemplo: >> trace(A) ans = 10 >> det(A) ans = 54 >> inv(A) ans = 0.1481 -0.2963 0.4259 -0.0926 0.1852 0.1111 0.0556 0.1481 -0.0556
Si pretendemos que calcule la inversa de una matriz que no tiene inversa, nos da los siguientes mensajes de error: >> det(B) ??? Error using ==> det Matrix must be square O, si una matriz cuadrada tiene determinante igual a cero (y, por tanto, no posee inversa), nos dice lo siguiente: >> C=[1 1 1;1 1 1;1 1 1] C= 1 1 1 >> inv(C) Warning: Matrix is singular to working precision
Professor: Josep E. Peris Ferrando
1 1 1
1 1 1
21
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
ans = Inf Inf Inf Inf Inf Inf Inf Inf Inf
NOTA: para la inversa, en vez de la funcin inv(A), podemos escribir tambin
>> A^-1 Otro clculo que podemos hacer con MatLab es el de la transpuesta de una matriz. Para ello, se utiliza la coma superior (). Por ejemplo: >> A' ans = 1 2 0 >> B' ans = 2 1 1 0 2 5 -1 1 3 5 0 8
Finalmente, tambin podemos multiplicar una matriz por un nmero, elevar una matriz cuadrada a una potencia, y combinar varias de estas operaciones: >> A^3-5*C+8*A ans = 28 136 390 13 55 28 232 95 601
pusiramos, o lo pusiramos en el producto, MatLab no nos dara un error, pero estara calculando una cosa totalmente distinta a lo que hemos definido como producto de matrices: estara multiplicando componente a componente. Por ejemplo, si tenemos las matrices:
Professor: Josep E. Peris Ferrando
22
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Estas operaciones (.*, .^) aunque vlidas en MatLab no nos interesarn. Cuidado con no confundirse y usarlas para hacer un producto y potencia. Con matrices, el concepto de cuadrado de la matriz a1 sera el siguiente: >> a1^2 ans = 7 15 10 22
y, como se observa, el resultado es totalmente distinto. Lo mismo pasa con el producto de las matrices a1 y a2: >> a1*a2 ans = 3 7 3 7
23
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
En MatLab hay algunas matrices predefinidas que pueden ser de utilidad. Una de ellas es la matriz identidad. sta se obtiene con la sentencia eye(n), donde n es el nmero de filas y columnas (el orden) que se quiere. Por ejemplo: >> eye(2) ans = 1 0 >> eye(4) ans = 1 0 0 0 1 0 0 0 1 0 0 0 0 1
Otra matriz es la que tiene unos en todas sus componentes. sta se obtiene con ones(n). As, >> ones(3) ans = 1 1 1 Si ponemos >> ones(3,1) ans = 1 1 1 Y podemos definir una matriz de unos del orden que queramos. Por ejemplo ones(3,6) nos dar una matriz toda de unos con 3 filas y 6 columnas. Si la matriz que queremos es cuadrada, slo es necesario dar el nmero de filas, aunque no pasa nada si ponemos ones(3,3). Totalmente anloga es la sentencia zeros: nos dar una matriz toda de ceros del orden que se le indique. Por ejemplo >> zeros(3);
Professor: Josep E. Peris Ferrando
1 1 1
1 1 1
>> zeros(3,1);
>> zeros(2,4);
24
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
6. Sistemas de ecuaciones.
Dado un sistema de ecuaciones Ax = b , con igual nmero de ecuaciones que de incgnitas, compatible determinado, la instruccin en MatLab para que lo resuelva es: >> x=pinv(A)*b Primero introduciremos la matriz A (en el ejemplo que hay a continuacin es la misma que tenamos) y luego el vector b. Un vector no es ms que una matriz con n filas y una columna (en este caso tres filas y una columna). Lo podemos introducir de dos maneras alternativas. Por ejemplo con el vector b todo de unos: >> b=[1;1;1]; (hemos introducido tres filas, separadas por (;) punto y coma); pero tambin podramos introducir el vector en fila y luego transponerlo: >> b=[1 1 1]'; Nos ahorramos los (;). Tambin podramos haber escrito >> b=ones(3,1); En cualquier caso, ahora escribimos >> x=pinv(A)*b y, al pulsar Intro nos da la solucin (nica) en forma del vector x x= -1/27 14/27 4/27
NOTA: Estamos con format(rat) y por eso la solucin nos la da en forma de
fracciones. Con los otros formatos que hemos visto, nos dara decimales. Es ms exacto darlo en forma de fracciones, as no usamos aproximaciones decimales. Para comprobar que lo hemos hecho bien, comprobamos si se cumple el sistema, esto es si Ax = b . Escribimos >> A*x y nos da la respuesta
25
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
ans = 1 1 1 Luego tenemos bien resuelto este sistema. Pero esto slo nos sirve para sistemas de este tipo. As que previamente lo que tenemos que ver es el tipo de sistema que tenemos. Antes de pasar al caso general, veamos ahora otro ejemplo muy sencillo que podemos resolver previamente: x1 + x 2 = 3 x1 x 2 = 1 SOLUCIN : x1 = 2; x2 = 1
Con MatLab hacemos lo siguiente: >> A=[1 1;1 -1]; >> b=[3 1]'; >> x=pinv(A)*b >> x=pinv(a)*b x= 2 1
CASO GENERAL: 1. Estudio del sistema
Dado el sistema Mx = b de m ecuaciones con n incgnitas (da igual si la matriz es cuadrada o no, o si tiene ms incnitas que ecuaciones que menos), sabemos que es compatible si Rango(M) = rango([M,b]) Pues esto mismo es lo primero que hemos de hacer con MatLab, usando la funcin rank. Una vez introducidas una matriz A y un vector b, escribiremos >> rank(M) >> rank([M,b]) y compararemos los resultados. Si:
26
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Por ejemplo, si ponemos >> M = [1 4;2 5;3 6] M= 1 2 3 >> b = [1 2 4] b= 1 2 4 >> rank(M) ans = 2 >> rank([M,b]) ans = 3 Luego el sistema es incompatible: no tiene solucin.
2. Resolucin de sistemas compatibles
4 5 6
Una vez averiguado cmo es el sistema, ahora pasamos a resolverlo (cuando tiene solucin):
o si el sistema es compatible determinado, la solucin nica la obtenemos
27
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
y obtenemos el resto de soluciones calculando el subespacio nulo de M con la sentencia >> z=null(M,'r') Esta sentencia nos dar una serie de vectores columna z1, z2, Entonces la solucin general (las infinitas soluciones) vendrn dadas por la expresin: x = xp + 1 z1 + 2 z2 + ... Con algunos ejemplos nos quedar ms claro. Ejemplo 1:
x1 3x2 = 1 2x1 + x 2 = 3 3x1 2x2 = 4 Introducimos en MatLab la matriz y el vector: >> M=[1 -3;2 1;3 -2]; >> b=[1 3 4]'; >> rank(M) ans = 2 >> rank([M b]) ans = 2 (luego el sistema es compatible determinado) >> x=pinv(M)*b x= 10/7 1/7 Por tanto, la solucin nica es:
x1 =
10 7
x2 =
1 7
28
MATEMTIQUES I
ADE/DADE/TADE/ECO
2010-11
Ejemplo 2: x1 + x 2 + x 3 = 1 2x1 x2 + x3 = 2 Introducimos datos en MatLab: >> M=[1 1 1;2 -1 1]; >> b=[1 -2]'; >> rank(M) ans = 2 >> rank([M b]) ans = 2 Luego el sistema es compatible indeterminado (infinitas soluciones): >> xp=pinv(M)*b xp = -3/7 9/7 1/7 >> z=null(M,'r') z= -2/3 -1/3 1 Solucin:
x1 3 / 7 2 / 3 + 1 / 3 x2 = 9 / 7 1 x 1/7 3
29