Matrices y funciones

Anuncio
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
Descargar