Sales Básicas Quimica, conocer como se forman las sales basicas
Referencias MATLAB
1. Referencias para utilizar Matlab
Temas: Números complejos, Funciones y operaciones, Funciones de usuario, Inversa de una matriz,
Ecuaciones lineales, Bucles y decisiones, Interpolar, Ajuste de curvas y polinomios, Tiempo, Gráficos,
Entrada-salida, Conversión de base, Arrays, Puesta a punto, MuPAD, Integral, Derivada, ODE
Números Complejos
>> sqrt(-1)
ans = 0 + 1.0000i % No utilizar i o j para otras variables
Algunas operaciones:
>> c=2+3i
c = 2.0000 + 3.0000i
>> c=complex(2,3)
c = 2.0000 + 3.0000i
>> conj(c)
ans = 2.0000 - 3.0000i
>> real(c)
ans = 2
>> imag(c)
ans = 3
>> abs(c) % sqrt(real(c).^2 + imag(c).^2)
ans = 3.6056
Forma polar o exponencial responde a:
Diagrama de Argand
Rectangular a Polar:
>> r=abs(c)
r = 3.6056
>> tetha=angle(c)
tetha = 0.9828
Exponencial a Rectangular:
>> c=r*exp(i*tetha)
c = 2.0000 + 3.0000i
Polar a Rectangular:
>> c=r*cos(tetha)+i*r*sin(tetha)
c = 2.0000 + 3.0000i
Dibujar un círculo en forma polar:
>> circle = exp( 2*i*[1:360]*pi/360 );
>>plot(circle)
>>axis('equal')
Gráfica Polar:
>> theta = 0:2*pi/100:2*pi;
>>r = theta/(2*pi);
>>polar(theta,r),title('Gráfica polar con radio creciente')
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0.2
0.4
0.6
0.8
1
30
210
60
240
90
270
120
300
150
330
180 0
Gráfica polar con radio creciente
𝑟
𝜃
𝑐 𝑥 + 𝑖𝑦
𝑥 𝑟𝑐𝑜𝑠( 𝜃)
𝑦 𝑟𝑠𝑖𝑛( 𝜃)
Eje real
Eje imaginario
2. Conversión de coordenadas cartesianas a polares o cilíndricas:
[THETA,RHO] = cart2pol(X,Y)
Conversión de coordenadas polares a cartesianas:
[X,Y] = pol2cart(THETA,RHO)
Funciones y operaciones matemáticas comunes
Funciones matriciales:
’ Traspuesta
[f, c]=size(x)
rand(n) Matriz de números aleatorios
eye(n) Matriz identidad
zeros(n) Matriz de ceros
ones(n) Matriz de unos
diag(n) Crea o extrae diagonales
det(x) Determinante
eig(x) Autovalores
Funciones vectoriales:
max(x) % Cuando matriz, máximo de cada columna. Máximo de matriz: max(max(x))
min(x)
sum(x)
prod(x)
median(x) Mediana % Más funciones estadísticas: plot(x,y) y activar Tools Data Statistics
mean(x) Promedio o media
any(x) Si al menos un valor es desigual a cero
all(x) Si todos los valores son desiguales a cero
Funciones elementales:
abs(x) Módulo
sqrt(x) Raíz cuadrada
sign(x) El signo de x, (0 si x = 0, −1 si x < 0, y +1 si x > 0)
round(x) Se redondea al entero más cercano
fix(x) Se redondea al entero más cercano a cero
floor(x) Se redondea al entero más cercano a -∞
ceil(x) Se redondea al entero más cercano a +∞
rem(x,y) Devuelve el residuo de x/y
find(x) Indices a valores desiguales a cero
norm(x) % Norma Euclídea
Funciones Trigonométricas (Suponen ángulos en radianes):
Conversión de ángulos:
ang_grados=ang_radianes*(180/pi)
ang_radianes= ang_grados*(pi/180)
sin(x)
cos(x)
tan(x)
cot(x)
sec(x)
csc(x)
Funciones Trigonométricas Inversas:
asin(x)
acos(x)
.
Funciones exponenciales y logarítmicas:
exp(x)
log(x) ( )
log10(x) ( )
Funciones Hiperbólicas:
sinh(x)
.
Funciones Hiperbólicas Inversas:
asinh(x)
.
Precedencia de los operadores (de mayor a menor):
Operadores aritméticos:
.’ .^ ’ ^ ~(Not) .* ./ . * / + -
Producto/división elemento por elemento (matrices de igual tamaño):
x.*y=[x(1)*y(1), x(2)*y(2),…,x(n)*y(n)]
x./y=[x(1)/y(1), x(2)/y(2),…,x(n)/y(n)]
Ejemplo1: Evitar división por cero
>> x=[-1:.5:1]
>> sin(x)./x
ans =
0.8415 0.9589 NaN 0.9589 0.8415
>> x = x + (x==0)*eps % eps es una constante ≈ 2.2e-16, representa la precisión de operaciones en MATLAB
>> sin(x)./x
ans =
0.8415 0.9589 1.0000 0.9589 0.8415
3. Ejemplo2: Evitar infinito
x = -3/2*pi : pi/200 : 3/2*pi;
y = tan(x);
plot(x, y)
figure;
y = y .* (abs(y) < 1e10); %Devuelve cero sólo en las asíntotas
plot(x, y)
Operadores relacionales:
< <= > >= == ~=
Operadores lógicos:
~ (NOT) & (And) | (Or) && (And, escalar) || (Or, escalar)
Ejemplo:
La magnitud de un vector:
[ ]
es
| | √ + + +
S:
>>magnitud=sqrt(sum(v.*v))
>>magnitud_otra=norm(v) % Norma euclídea
Ver problema 28
Funciones de usuario
function z=euclidea(x,y)
z=sqrt(x.^2+y.^2);
end
Se ejecuta:
>> z=euclidea(2,3)
z = 3.6056
Inversa de una matriz
La matriz por la matriz identidad es la matriz original: A=A*I=I*A
Dos escalares son inversas si su producto es 1 (Ej.: .5 y 2)
Dos matrices son inversas si su producto es la matriz identidad:
Para que exista la inversa: La matriz debe ser cuadrada y su rango (número de filas o columnas linealmente
independientes) igual al número de filas (ver ejemplo bucle If).
Ejemplo:
Matriz cuya tercera columna es 3 veces la primera (no es linealmente independiente):
a =
1 2 3
4 5 12
7 8 21
>> rank(a)
ans = 2
>> inv(a)
Warning: Matrix is singular to working precision.
ans =
Inf Inf Inf
Inf Inf Inf
Inf Inf Inf
-5 -4 -3 -2 -1 0 1 2 3 4 5
-80
-60
-40
-20
0
20
40
60
80
-5 -4 -3 -2 -1 0 1 2 3 4 5
-6
-4
-2
0
2
4
6
x 10
15
4. Ecuaciones lineales
Solución de un producto vectorial:
+ +
>>a=[1 -2 -3]
>>x=[2 3 4]
>> dot(a,x)
ans = -16
>> a*b'
ans = -16
Ecuaciones básicas:
>> solve('3*x-2=0')
ans = 2/3
Solución de un sistema de ecuaciones lineales:
Forma: Ax=b
+
+ +
+
>> A=[3 2 -1; 2 5 2; 4 -2 5]
A =
3 2 -1
2 5 2
4 -2 5
>> b=[15 1 7]'
b =
15
1
7
>> x=inv(A)*b % Utilizando la inversa (ver Jacobiano, Filtro lineal y ejemplo de If)
x =
4.5794
-0.6262
-2.5140
>> x=Ab % Utilizando la división
x = linsolve(A,b) % Otra opción
Forma: xA=b
x y b deben ser vectores filas
>> bp=b'
bp =
15 1 7
>> xp=bp*inv(A)
xp =
2.4766 -0.0280 1.9065
>> bp=xp*A
bp =
15.0000 1.0000 7.0000
Bucles y Decisiones
Bucles:
for indice = j:m:k
sentencias
end
Ejemplo
while expresión
sentencias
end
Ejemplo:
x=-1;
while x<=1
if x==0
disp('Se encontró cero');
break, % Sale del bucle (utilizado con for y while) continue sigue el lazo
end
y=sin(x)/x
x=x+.5
end
% Salta aquí cuando se ejecuta break
Decisiones:
if expresión1
sentencia1
elseif expresión2
sentencia2
elseif expresión3
sentencia3
.
.
else
sentencian
end
5. Ejemplo:
[nf,nc] = size(A);
if nf ~= nc
disp(‘No existe la inversa, la matriz no es cuadrada’)
elseif rank(A) ~= nf
disp(‘No existe la inversa, el rango no es igual al número de filas’)
else
disp(‘Inversa de la Matriz:’)
disp(inv(A))
end
switch expresión
case valor1
sentencias1
case valor2
sentencias2
·
·
otherwise
sentenciasn
end
Ejemplo:
x = 3.2; % x en metros
unidades ='pulgadas';
switch unidades
case {'pulgadas'}
y = x*0.0254;
case{'pies'}
y = x*0.3048;
case{'metros'}
y = x;
case{'centímetros'}
y = x/100;
case{'milímetros'}
y = x/1000;
otherwise
disp(['Unidad desconocida: ' unidades])
y = NaN;
end
Interpolar, Ajuste de curvas y polinomios
t=linspace(n1, n2, n) n valores de n1 a n2
t=inicio:incremento:final
Interpolación lineal:
A partir de la ecuación que se deduce de los triángulos similares, supone que la función entre dos puntos se puede
estimar con una línea recta.
Ejemplo:
x = 0:1:10;
y = sin(x);
xi = 0:.1:10;
ylin = interp1(x,y,xi); % Interpolación lineal
ycub = spline(x,y,xi); % Comparación con Spline (ver Ejemplo)
plot(x,y,'o',xi,ylin,'r',xi,ycub,'g')
0 1 2 3 4 5 6 7 8 9 10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
𝑓(𝑎) 𝑓(𝑏)
𝑏 𝑎
𝑓(𝑎) 𝑓(𝑐)
𝑐 𝑎
y
x
𝑓(𝑎)
a b c
𝑓(𝑏)
𝑓(𝑐)𝑓(𝑏) 𝑓(𝑎) +
𝑏 𝑎
𝑐 𝑎
(𝑓(𝑐) 𝑓(𝑎))
6. Regresión o ajuste de curvas:
Ejemplo1:
x = 0:0.1:1;
y = [-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
a = polyfit(x,y,3) % Devuelve a = 16.0758 -33.9245 29.3246 -0.6104
yhat = polyval(a,x); % Polinomio solución: ̂ +
err = yhat - y
MSE = mean(err.^2)
RMSE = sqrt(MSE)
plot(x,y,'o',x,yhat),title('Regresión lineal'),...
xlabel('x'),ylabel('y'),...
grid,axis([-.1,1.1,-.5,11.5]),legend('medida','estimada',4)
% Realizar la interpolación directamente en gráfico: plot(x,y) y activar Tools Basic Fitting
% Obtener datos estadísticos directamente en gráfico: plot(x,y) y activar Tools Data Statistics
Ejemplo2, Ejemplo3
Polinomios:
( ) + % a=[1 4 -7 -10] ; A = x.^3+ 4*x.^2 - 7*x - 10;
( ) + % b=[0 1 0 1] ; B = s.^2 + 1;
polyval(a,x) Evalúa el polinomio
c=a+b Suma polinomios
c=a-b Resta polinomios
c=conv(a,b) Multiplica polinomios
[q r]=dconv(a,b) División de polinomios % q=Cociente, r=Resto;
polyder(a) Derivada del polinomio
polyint(a,C) Integral del polinomio
r=roots(a) Raíces del polinomio % Valores de x para los cuales A(X)=0;
a=poly(r) Coeficientes del polinomio % Coeficientes del polinomio cuya raíz es r;
Ejemplo:
a=[1 5 11 13]
b=[1 2 4]
>> [q r] = deconv(a,b) % a/b = q + r/b
q = 1 3
r = 0 0 1 1
+ + +
+ +
+ +
+
+ +
Tiempo
tic;
for t=1:5000
y(t)=sin(2*pi*t/10);
end
ttranscurrido = toc % Tiempo transcurrido
Gráficos
Funciones básicas:
plot(x, y, ’g*-’)
stairs(x, y) % Gráfico discreto
fplot(@(x) 200*sin(x(:))./x(:), [-20 20]) % Ajuste automático de número de puntos
title(’Título del gráfico’)
xlabel(’…’)
ylabel(’…’)
axis([xmin, xmax, ymin, ymax, …])
axis square
figure
subplot
% Colocar texto en gráfico con gtext, a través del cursor
>> x=0:.01:2;
>> y=exp(x);
>> z=4*sin(3*x);
>> plot(x,y,x,z), xlabel('x'), gtext('y'), gtext('z');
[x, y]=ginput(n) % Lectura de n puntos directamente de un gráfico
Ejemplos de gráficos en 3D
0 0.2 0.4 0.6 0.8 1
0
2
4
6
8
10
Regresión lineal
x
y
medida
estimada
7. Entrada-salida
>>disp(‘Hola’)
Hola
>> fprintf( 'Errores son: %5.1f %12.2en', 1.256, 0.1256 )
Errores son: 1.3 1.26e-001
>>x = input( ’Entre el valor de x: ’ ) % Entrada de valores por teclado
>> K = menu('Seleccione un color','Rojo','Azul','Verde') % Entrada a través de un cuadro de diálogo
>> a=5.123456789 % Cambia formato en que se ven los datos (no confundir con eps, precisión de cálculo)
a = 5.1235
>> format long
>> a
a = 5.123456789000000
De archivos:
uiimport % Importar datos
save salida.dat A –ASCII % Salvar datos
Conversión de base
dec2bin(d)
bin2dec(b)
dec2hex(d)
hex2dec(h)
dec2base(d,b) % A cualquier base
Arrays % Se atiende un conjunto de elementos como una sola entidad
Arrays o clases en MATLAB: numéricos, caracteres, lógicos, célula, estructura, referencia de funciones, Java.
Ejemplo de Estructura: Nombre, email, DNI, edad, calificaciones
Alumno.nombre='Juan Pérez' % Datos del primer alumno
Alumno.email='juan@yahoo.com'
Alumno.DNI='43033342'
Alumno.edad=34
Alumno.calificaciones=[3 5 2 8]
Alumno(2).nombre='Carlos Sánchez' % Datos del segundo alumno
Alumno(2).email='carlos@yahoo.com'
Alumno(2).DNI='36355542'
Alumno(2).edad=30
Alumno(2).calificaciones=[2 7 3 7]
>> Alumno % Estructura creada
Alumno =
1x2 struct array with fields:
nombre
email
DNI
edad
calificaciones
>> max(Alumno(1).calificaciones) % Máxima calificación del primer alumno
ans = 8
>> Alumno(2).email % email del segundo alumno
ans = carlos@yahoo.com
>> mean(Alumno(1).calificaciones) % Promedio de calificaciones del primer alumno
ans = 4.5000
struct(‘nombre’,……) % Otra forma de crear estructuras
8. Ejemplo de Células:
AlumnoC=struct2cell(Alumno) % Convierte la anterior estructura a células
cellplot(AlumnoC) % Visualiza la estructura de las células
>> AlumnoC{2,1,2}
ans = carlos@yahoo.com
>>AlumnoC{2,1,2}='carloss@yahoo.com' % Altera el email del segundo alumno
Ejemplo 2 de Células:
Definir la siguiente tabla
Jamaica [1995, 1996, 1997]
[70 73 65 79;
69 68 81 82;
72 77 78 81]
3 de Setiembre de 2011
D(1,1)={'Jamaica'};
D(1,2)={[1995, 1996, 1997]};
D(2,1)={[70 73 65 79; 69 68 81 82; 72 77 78 81]};
D(2,2)={'3 de Septiembre de 2011'};
celldisp(D) % Muestra el contenido de los elementos del arreglo
cellplot(D) % Muestra visual
Pais=D{1,1} % Muestra el contenido de una celda
Maxhum1996=max(D{2,1}(2,:)) % Máxima humedad de 1996 (segunda fila de D)
cell(n) % Crea celda de tamaño nxn
Puesta a punto (Debugging)
A continuación se muestra una captura de un programa dividido en células (no confundir con células de arrays), para
facilitar su puesta a punto
Cada célula se identifica a través de %%, lo que permite ejecutar secciones de programa de forma separada,
facilitando la puesta a punto.
La utilización de puntos de ruptura (Breakpoints) permite ejecutar el programa hasta determinada línea de código,
utilizando Set/Clear Breakpoints desde el menú Debug.
9. MuPAD
Es la herramienta (a través de Notebooks) que permite obtener la solución de problemas utilizando matemática
simbólica.
>> mupadwelcome
Integral
Numérica:
x=linspace(0,4,200);
y=2*ones(1,200);
z=trapz(x,y) % Integral de un rectángulo
z = 8
% Posición a partir de velocidad
( ) ∫ ( ) + ( ) % Ecuación base
t=0:10; % Tiempo
v=[0 3 5 7 8 10 25 45 55 60 76]; % Velocidad
% Se calcula posición
p(1)=0;
for k=1:10
p(k+1)=trapz(t(k:k+1), v(k:k+1)) + p(k);
end
Analítica:
Derivada
Numérica:
x=[x(1), x(2),…x(n)];
dx=[x(2)-x(1), x(3)-x(2),…,x(n)-x(n-1)]; % Diferencia de valores sucesivos
>> x=[5 9 10 13];
>> y=diff(x)
y = 4 1 3
10. Analítica:
ODE
Ecuaciones diferenciales ordinarias: ̇( ) ; ̈( ) ; (Conceptos básicos).
Consideraciones para obtener la solución:
Tipo:
-Paso fijo: Período de muestreo constante para la solución, requerido para generar código
-Paso variable: Período de muestreo variable, este es menor mientras mayor es la tasa de cambio de las variables.
Discreto o continuo:
-Discreto: Presencia de variables de estado discretas
-Continuo: Presencia de variables de estado continuas
Algoritmo:
-ode1: Método de Euler , Simulink
-ode45: Cuarto o quinto orden del método de Runge-Kutta
-ode15s: Ecuaciones con mayor dificultad (stiff equations)
Simulink: Simulation Configuration Parameters…
Ejemplos:
-Sistemas de primer orden
-Sistemas de segundo orden
Sistemas lineales:
initial(ss)
dt=0.01 % Período muestreo
t=[0:dt:10];
% Se definen las matrices
A=[0, 1;-3, -2];
B=[0; 1];
C=[1 0];
D=0;
% Se crea el modelo
ejemp=ss(A,B,C,D);
% Solución utilizando initial
yt=initial(ejemp, [y0, dy0], t);
Comparación de initial con ode45