Ing Manuel Tantalean Operaciones con matrices // programa 11_suma de transpuestas a dos columnas // matriz a de 4x4 a=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]; b=a' // b es traspuesta de a disp('matriz a'); disp(a); // muestra matriz a disp('matriz b'); disp(b); // muestra matriz b d=0; for f=1:1:4 e=0; for c=2:2:4 e=e+1; d(f,e)=a(f,c)+b(f,c) // extrae a dos columnas la suma end end disp('matriz d'); disp(d); Resultado matriz a 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. matriz b 1. 2. 3. 4. 5. 6. 7. 8. matriz d 9. 13. 10. 14. 11. 15. 12. 16. 7. 17. 12. 22. 17. 27. 22. 32. Ing Manuel Tantalean // Programa 12_suma de Transpuestas a=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]; b=a' disp('mattriz a'); disp(a); disp('matriz b'); disp(b); clear d for f=1:1:4 for c=2:2:4 d(f,c)=a(f,c)+b(f,c) end end disp('matriz d'); disp(d); Resultado o ejecución mattriz a 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. matriz b 1. 2. 3. 4. 5. 6. 7. 8. 9. 13. 10. 14. 11. 15. 12. 16. matriz d 0. 0. 0. 0. 7. 0. 17. 12. 0. 22. 17. 0. 27. 22. 0. 32. Ing Manuel Tantalean Funciones Scilab zeros(3,5) forma una matriz de ceros de tamaño (3×5) zeros(4) ídem de tamaño (4×4) ones(3) forma una matriz de unos de tamaño (3×3) ones(2,4) idem de tamaño (2×4) [m,n]=size(A) devuelve el número de filas y de columnas de la matriz A. Si la matriz es cuadrada basta recoger el primer valor de retorno n=length(x) calcula el número de elementos de un vector x zeros(size(A)) forma una matriz de ceros del mismo tamaño que una matriz A previamente creada ones(size(A)) ídem con unos A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A Operaciones con matrices b=a([1],:); // extrae a matriz b la fila uno la expresión a([1],:) es la matriz a(m,n) cuyos componentes son m y n; en este caso m es [1] significa esta tomado la fila 1, y el segundo componente es n en este caso : dos puntos significa todas las columnas. c=a(:,[1]); // extrae a matriz c la columna uno la expresión a(:,[1]) es la matriz a(m,n) cuyos componentes son m y n; en este caso m es : significa todas las filas, y el segundo componente es n en este caso [1] significa esta tomando la 1 columna. // Programa_13 Matriz filas o columna ext // Matrices extracción filas o columnas disp('matriz a'); a=[10,5,-1;14,7,2;9,8,-12;]; disp(a); b=a([1],:); // extrae a matriz b la fila uno c=a(:,[1]); // extrae a matriz c la columna uno d=a([1:2:3],:); // extrae a matriz d la fila uno y fila tres e=a(:,[1:2:3]); // extrae a matriz e columna uno y columna tres disp('matriz b a([1],:) extrae a matriz b la fila uno'); disp(b); disp('matriz c a(:,[1]) extrae a matriz c la columna uno'); disp(c); disp('matriz d a([1:2:3],:) extrae a matriz d la fila uno y fila tres'); disp(d); disp('matriz e a(:,[1:2:3] extrae a matriz e columna uno y columna tres'); disp(e); Ing Manuel Tantalean Resultado matriz a 10. 5. - 1. 14. 7. 2. 9. 8. - 12. matriz b a([1],:) extrae a matriz b la fila uno 10. 5. - 1. matriz c a(:,[1]) extrae a matriz c la columna uno 10. 14. 9. matriz d a([1:2:3],:) extrae a matriz d la fila uno y fila tres 10. 5. - 1. 9. 8. - 12. matriz e a(:,[1:2:3] extrae a matriz e columna uno y columna tres 10. - 1. 14. 2. 9. - 12. Ing Manuel Tantalean Sección 9.2 Soluciones de sistemas de ecuaciones lineales 325 9.2.2 Solución con división izquierda de matriz Una mejor forma de resolver un sistema de ecuaciones lineales es usar una técnica llamada eliminación gaussiana. En realidad ésta es la forma en que usted probablemente aprendió a resolver sistemas de ecuaciones en el álgebra de bachillerato. Considere el problema de tres ecuaciones en x, y y z: Para resolver este problema a mano, se considerarían primero las dos primeras ecuaciones en el conjunto y se eliminaría una de las variables, por ejemplo, x. Para hacer esto necesitará multiplicar la segunda ecuación por 3 y luego sumar la ecuación resultante a la primera: Ahora se necesita repetir el proceso para la segunda y tercera ecuaciones: En este punto, se eliminó una variable y el problema se redujo a dos ecuaciones y dos incógnitas: Ahora se puede repetir el proceso de eliminación al multiplicar la fila 3 por -11/2: Finalmente, se puede resolver para z: z=-6 Una vez que se conoce el valor de z, se puede sustituir de vuelta en cualquiera de las dos ecuaciones con sólo z y y, a saber, para encontrar que y=5 Matlab para Ingenieros Holly Moore pag 325-326 Idea clave: la eliminación gaussiana es más eficiente y menos susceptible a error de redondeo que el método de matriz inversa. Ing Manuel Tantalean 326 Capítulo 9 Álgebra matricial El último paso es sustituir de nuevo en una de las cuatro ecuaciones originales, para encontrar que x=-2 eliminación gaussiana: enfoque organizado para eliminar variables y resolver un conjunto de ecuaciones simultáneas La técnica de eliminación gaussiana es un enfoque organizado para eliminar variables hasta que sólo existe una incógnita y luego sustituir de nuevo hasta que se determinan todas las incógnitas. En MATLAB se puede usar división izquierda para resolver el problema por eliminación gaussiana. En consecuencia, regresa Obviamente, éste es el mismo resultado que se obtuvo con la solución a mano y el enfoque de matriz inversa. En un problema simple como éste, el error de redondeo y el tiempo de ejecución no son grandes factores para determinar cuál enfoque usar. Sin embargo, algunas técnicas numéricas requieren la solución de matrices con miles o incluso millones de elementos. Los tiempos de ejecución se miden en horas o días para estos problemas, y el error de redondeo y el tiempo de ejecución se convierten en consideraciones cruciales. No todos los sistemas de ecuaciones lineales tienen una solución única. Si existen menos ecuaciones que variables, el problema está subespecificado. Si hay más ecuaciones que variables, el problema está sobreespecificado. MATLAB incluye funciones que le permitirán resolver cada uno de estos sistemas de ecuaciones al usar enfoques numéricos de mejor ajuste o agregar restricciones. Consulte la función help de MATLAB para más información acerca de estas técnicas. // Programa 14_ecuaciones simultaneas a=[3,2,-1;-1,3,2;1,-1,-1]; b=[10;5;-1]; c=a\b; disp(c); Resultado Scilab - 2. 5. - 6. Matlab para Ingenieros Holly Moore pag 325-326 Ing Manuel Tantalean Funciones Encontar las raices function [x1, x2]=raices(a, b, c) x1=(-b+sqrt(b^2-4*a*c))/(2*a); x2=(-b-sqrt(b^2-4*a*c))/(2*a); endfunction Función parámetros de salida [x1, x2] Nombre de la función parámetros de entrada raices(a, b, c) Nombre de la función el tomará el mismo nombre del archivo raices Los datos se ingresan como sigue [x1, x2]=raices(1,3,1) El programa es el que sigue y al guardar asumirá el nombre de raíces como se muestra en rojo En la consola del Scilab se ingresan lo datos como sigue Los resultados son Ing Manuel Tantalean Otra forma de hacer el mismo programa // Programa funcion function [x1, x2]=raices(a, b, c) x1=(-b+sqrt(b^2-4*a*c))/(2*a); x2=(-b-sqrt(b^2-4*a*c))/(2*a); disp('x1'); disp(x1); disp('x2'); disp(x2); endfunction a=input('a= '); b=input('b= '); c=input('c= '); [x1, x2]=raices(a, b, c) Ejecuciòn o resultado a= 1 b= 3 c= 1 x1 - 0.3819660 x2 - 2.618034 Uso de la función roots Se tiene el siguiente polinomio 3x2+4x+3 // funcion raices o roots 3x^2+4x+3 p=[3,4,3]; r=roots(p); disp(r); Ejercicio o resultado -->exec('D:\scilab2\ejercicio18.sce', -1) - 0.6666667 + 0.7453560i - 0.6666667 - 0.7453560i