%Nociones del uso de Matlab

%Las primeras cosas y cuentas 
%Se pueden armar archivos .m con los códigos y se llaman desde:  run script 
... En la solapa archivo.

%Se puede controlar el número de decimales con que aparece en pantalla el valor de las variables, 
%sin olvidar que ello no está relacionado con la precisión con la que se hacen los cálculos,
%solo el aspecto con que éstos se muestran:

1/3
%ans = 0.3333

format long
1/3
%ans = 0.33333333333333

pi
%ans =    3.141592653589793

format % Vuelve al formato estándar que es el de 4 cifras decimales
%Para conocer las variables que se han usado hasta el momento:
x=pi
who
% x = 3.1415
%Your variables are: x

whos
%Name Size Bytes Class
%ans 1x1 8 double array

%Borrar una variable
y=3
whos y
%y = 3

 % Name      Size            Bytes  Class     Attributes

 % y         1x1                 8  double   
clear y
who
%Your variables are:
%ans 

%Los cálculos que no se asignan a una variable en concreto se asignan 
%a la variable de respuesta por defecto que es ans (del inglés, answer):
2+3
%ans = 5
% Si el cálculo se asigna a una variable, el resultado queda guardado en ella:
x=2+3
%queda x = 5
%Para conocer el valor de una variable, basta teclear su nombre:
x
%x = 5
%Si se añade un punto y coma (;) al final de la instrucción, la máquina no muestra la respuesta...
y=5*4;
... pero no por ello deja de realizarse el cálculo.
y
%y = 20
...........Las operaciones se evalúan por orden de prioridad:
%primero las potencias, después las multiplicaciones y divisiones y, finalmente, las sumas y restas. 
%Las operaciones de igual prioridad se evalúan de izquierda a derecha:
2/4*3
%ans = 1.5000
2/(4*3)
%ans = 0.1667
%Se pueden utilizar las funciones matemáticas habituales. Así, por ejemplo, la función coseno,
cos(pi) % pi es una variable con valor fijo 3.14159...
%ans = -1
% La función exponencial y e
exp(1) % Función exponencial evaluada en 1, es decir, el número e
%ans = 2.7183
%Además de la variable pi , MATLAB tiene otras variables con valor predeterminado; el cual se pierde
% si se les asigna otro valor distinto. Por ejemplo:
eps % Épsilon de la máquina. Obsérvese que MATLAB trabaja en doble precisión
%ans = 2.2204e-016
%pero si
eps=1
eps
%eps = 1

%Caso la raíz cuadrada se trabaja con complejos. La unidad imaginaria se representa en MATLAB 
% como i o j, variables con dicho valor como predeterminado:
sqrt(-9)
%ans = 0+ 3.0000i

..............Bucles y condicionales
    
clear %limiar
fprintf('Producto escalar\n') %muestra por pantalla
n=input('Ingrese el tamaño de los vectores : ');%ingreso de datos
for i = 1:n %bucle fijo
  fprintf('x%d = ',i)
  x(i)= input(' '); % Ingreso por pantalla de los valores x(i)
  fprintf('y(%d) = ',i)
  y(i)= input(' '); % ingreso por pantalla de los valores y(i)
end
k=1;%matlab inicia en 1
while k<=n %bucle controlado
    p(k)= x(k)*y(k); % La función prod calcula el producto de los elementos
    k=k+1; 
end
s=sum(p); % La función sum calcula la suma de los elementos del vector p
q=prod(p);% La función sum calcula el producto de los elementos del vector p
if p==0 %condicional
    fprintf('los vectores son ortogonales')
else %alternativa
    fprintf('x.y = %f y el producto de todo = %d' ,s,q)
end

    
..............Vectores y matrices
%Para definir un vector fila, basta introducir sus coordenadas entre corchetes:
v=[1 2 3] % Vector de 3 coordenadas
v
%v= 1 2 3
w=[4 5 6];
wi=[4 5 1+6i]';
%con el operador ' es el de trasposición (en realidad trasposición y conjugación):
w'
% ans =
...4
...5
...6
wi'
% ans =
...4.0000
...5.0000
...1.0000-6.0000i

%Si queremos declarar un vector de coordenadas equiespaciadas entre dos dadas, por ejemplo, que la
% primera valga 0, la última 20 y la distancia entre coordenadas sea 2, basta poner:
vect1=0:2:20
%vect1 = 0 2 4 6 8 10 12 14 16 18 20

%Equivalentemente, si lo que conocemos del vector es que la primera coordenada vale 0, la última 20 y que tiene 11
% en total, escribiremos:
vect2=linspace(0,20,11)
%vect2 = 0 2 4 6 8 10 12 14 16 18 20

%A las coordenadas de un vector se accede sin más que escribir el nombre
%del vector y, entre paréntesis, su índice:
vect2(3)
%ans = 4
%se pueden extraer subvectores, por ejemplo:
vect2(2:5)
%ans= 2 4 6 8
% o,
vect1(:)
%ans=
...0
...2
...4
...6
...8
...10
...12
...14
...16
...18
...20
%Las matrices se escriben como los vectores, pero separando las filas mediante un punto y coma;
%ejemplo una matriz 3x3:
M=[1 2 3;4 5 6;7 8 9]
...M =
...1 2 3
...4 5 6
...7 8 9
M' % Su traspuesta (su adjunta)
...ans =
...1 4 7
...2 5 8
...3 6 9
mat=[v;w;0 0 1] % También es una matriz 3x3
...mat =
...1 2 3
...4 5 6
...0 0 1
%A los elementos de una matriz se accede sin más que escribir el nombre de la matriz y entre paréntesis, los
%respectivos índices:
mat(1,3) % Elemento en la primera fila y tercera columna de la matriz mat
%ans = 3
%se puede acceder a un fila o columna completas,
mat(:,2) % Segunda columna de mat
...ans =
...2
...5
...0
mat(2,:) % Su segunda fila
...ans = 4 5 6
% se puede acceder a la matriz como si fuera una columna,
M(2:7) % Los elementos segundo a séptimo de la matriz como columna
...ans =
...4
...7
...2
...5
...8
...3
%otra acceder a cualquiera de sus submatrices
mat(2:3,[1 3]) 
% Submatriz formada por los elementos que están en "todas" las filas que hay entre la segunda 
%y la tercera y en las columnas primera y tercera
...ans =
...4 6
...0 1
%Existen algunas matrices definidas previamente por ejemplo, la matriz identidad,
eye(5) % eye se pronuncia en inglés como I
...ans =
...1 0 0 0 0
...0 1 0 0 0
...0 0 1 0 0
...0 0 0 1 0
...0 0 0 0 1
%la matriz nula,
zeros(3)
...ans =
...0 0 0
...0 0 0
...0 0 0
%la matriz cuyos elementos valen todos 1:
ones(4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
%Se puede conocer el tamaño de una matriz y la longitud de un vector:
size(mat) % Dimensiones de la matriz mat (número de filas y de columnas)
...ans =
...3 3
size(v)
...ans =
...1 3
length(v) % Longitud del vector (número de coordenadas)
...ans = 3
%Existen comandos que permiten crear de forma sencilla matrices. Por ejemplo:
diag(v) % Matriz diagonal cuya diagonal es el vector v
...ans =
...1 0 0
...0 2 0
...0 0 3
diag(diag(M)) % Matriz diagonal con la diagonal de M. La sentencia diag(M) da el vector 
%formado por la diagonal de la matriz M
...ans =
...1 0 0
...0 5 0
...0 0 9
diag(ones(1,4),1)+diag(ones(1,4),-1) % Matriz tridiagonal 5x5 con 0 en la diagonal principal y 1 en la sub y superdiagonal
...ans =
...0 1 0 0 0
...1 0 1 0 0
...0 1 0 1 0
...0 0 1 0 1
...0 0 0 1 0
tril(M) % Matriz formada por la parte triangular inferior de M.
...ans =
...1 0 0
...4 5 0
...7 8 9
triu(M) % Matriz formada por la parte triangular superior de M.
...ans =
...1 2 3
...0 5 6
...0 0 9
%Las operaciones habituales entre arrays (suma, resta y producto escalar de vectores; suma, resta,
%producto y potencia de matrices) se representan con los operadores habituales:
v,w % Recordamos los valores de v y w: v = 1 2 3 , w = 4 5 6
z=v*w' % Producto escalar (producto de matrices 1x3 por 3x1)
%divisiones y potencias de arrays, entendiéndolas como elemento a elemento (como, de hecho, se realizan 
%la suma y la resta). El operador utilizado para ellas es el habitual precedido por un punto; es decir:
v.*w % Vector formado por los productos de las respectivas coordenadas:  ans(i)=v(i)*w(i)
...ans =
...4 10 18
w./v % Vector formado por el cociente de cada coordenada de w entre la coordenada correspondiente de v: ans(i)=w(i)/v(i)
...ans = 4.0000 2.5000 2.0000
Z=w'*v % Producto de matrices 3x1 por 1x3 = Matriz 3x3
...Z =
...4 8 12
...5 10 15
...6 12 18
v*w % que pasa si los vectores v y w no se pueden multiplicar
...??? Error using ==> *
...Inner matrix dimensions must agree.
mat % Recordamos el valor de la matriz mat
...mat =
...1 2 3
...4 5 6
...0 0 1
mat^2 % Matriz mat elevada al cuadrado
...ans =
...9 12 18
...24 33 48
...0 0 1
mat.^2 % Matriz cuyos elementos son los de mat elevados al cuadrado: ans(i,j)=mat(i,j)^2
...ans =
...1 4 9
...16 25 36
...0 0 1
%pueden calcularse determinantes:
det(mat)
...ans = -3
%resolverse sistemas de ecuaciones lineales con el comando \:
mat\v'
...ans =
...2.6667
...-5.3333
...3.000

% Caso al definir una matriz ejemplo: 

A=[13 7 4 0; -1 18 5 2; 9 2 31 4;9 2 11 40];

%Hallar la descomposicion L U:

[L,U] = lu(A)

%Producto:

 L*U

%Autovalores:

d = eig(A)

%Autovectores da la diagonal y los autovectores correspondientes en una matriz:

[V,D] = eig(A)

%Caso no diagonalizable da la matriz de Jordan:

[V,J] = jordan(A) %va a dar lo mismo que el anterior

B=[1 0 0 0; 1 1 0 0; 0 0 31 4; 0 0 11 40];

[V,J] = jordan(B) %caso no diagonalizable cada bloque da al primer vector como autovector del bloque

%Inversa:

B^-1

%Valores Singulares:

S=svd(A)

%Vectores ortogonales:

[U,S,V] = svd(A); %si se tipea U S y V se dan los vectores correspondientes

...........NORMAS Y CONDICIONAMIENTOS p=1,2 o inf:

Cond(B,2)

norm(v,1)

norm(A,inf)

.......Funciones y gráficos
%Las funciones matemáticas elementales están definidas de forma que 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í:
log(v)
...ans = 0 0.6931 1.0986
p=(0:0.1:1)*pi % Vector definido como el producto de un vector por un escalar
...p = Columns 1 through 7
...0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
...Columns 8 through 11
...2.1991 2.5133 2.8274 3.1416
x=sin(p)
...x = Columns 1 through 7
...0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
...Columns 8 through 11
...0.8090 0.5878 0.3090 0.0000
......Existen variables lógicas que toman los valores 0 (falso) o 1 (verdadero)
abs(v)>=2 % Vector lógico cuyas coordenadas valen 1 si la coordenada correspondiente de v es >= 2 y 0 si no lo es
...ans = 0 1 1
vector=v(abs(v)>=2) % Vector formado por la coordenadas de v que verifican la desigualdad
...vector = 2 3
v2=[3 2 1]
...v2 = 3 2 1
logica=v==v2 % Asignación de un valor lógico (el doble signo igual es el  igual lógico)
...logica = 0 1 0
logic2=v~=v2 % Distinto (~ es el operador de negación)
...logic2 = 1 0 1
.....Polinomios
%Un polinomio no es más que un vector. El orden de los coeficientes es de mayor a menor grado, por ejemplo:
p=[1 0 2 0 3] % Polinomio x^4+2*x^2+3
...p = 1 0 2 0 3
q=[2 1 0] % Polinomio 2*x^2+x
...q = 2 1 0
...Funciones específicas para polinomios:
polyval(p,-1) % Evaluación del polinomio x^4+2x^2+3 en x=-1
....ans = 6
pro=conv(p,q) % Producto de los polinomios p y q
...pro = 2 1 4 2 6 3 0
deconv(pro,p) % Cociente entre pro y p; obviamente el resultado es q
...ans = 2 1 0
roots(pro) % Raíces del polinomio pro
...ans =
...0
...0.6050+1.1688i
...0.6050-1.1688i
...-0.6050+1.1688i
...-0.6050-1.1688i
...-0.5000
poly([i -i 1/2 pi]) % Polinomio mónico que tiene por raíces a los % números i, -i, 0.5 y pi
...ans = 1.0000 -3.6416 2.5708 -3.6416 1.5708

.......Uso de la matemática simbólica, se utiliza el programa de cálculo simbólico MAPLE. 
    ...Con estas herramientas, se puede trabajar con funciones dadas
    
f='sin(x)' % Función sin(x) definida mediante una cadena de caracteres
f = sin(x)
%calcular derivadas,
diff(f)
...ans = cos(x)
diff(f,2) % Derivada segunda de f
...ans = -sin(x)
%encontrar primitivas.
int('log(x)') % Primitiva de la función logaritmo
...ans = x*log(x)-x
diff('x*log(x)-x') % Comprobación
...ans = log(x)

%graficar funcion dada integrar y derivar
syms x;
Fx=input('\nDigite la Función: ','s');
ezplot(Fx)
Fx=int(Fx)%integracion indefinida
n=1;%derivacion sucesiva
while(n<=a)
Fxx=diff(Fx,n)
n=n+1;
end
%graficos partidos
x=linspace(-2,3,3000);
y=(x+2).*(x<-1)-x.*((-1<=x)&(x<1))+(x-2).*(1<=x);
f=x.^3 -x;
plot(x,f,'.')
plot(x,y,'.')

%funcion simbolica evaluada
    syms x;
    x=x_0;
    Fx_0 = eval(Fx)
    
 %polinomio de taylor herramienta
 taylortool('sin(tan(x)) - tan(sin(x))')
  
 %polinomio taylor
syms x
g = 2.71^-(x*sin(x))^2
t = taylor(g, 12, 2)
xd = 1:0.05:3; yd = subs(g,x,xd);
ezplot(t, [1, 3]); hold on;
plot(xd, yd, 'r-.')
title('Taylor approximation vs. actual function');
legend('Taylor','Function')

%codigo latex
syms x
f = taylor(log(1+x));
latex(f)
...ans = \frac{x^5}{5} - \frac{x^4}{4} + \frac{x^3}{3} - \frac{x^2}{2} + x
    
%grafico con codigo latex
syms x
f = taylor(log(1+x));
ezplot(f)
hold on
title(['$' latex(f) '$'],'interpreter','latex')
hold off

%exprecion evaluada
syms x
f = 1/(5 + 4*cos(x));
Tx = taylor(f, 8)
x=1
T1=eval(Tx)
...Tx = (49*x^6)/131220 + (5*x^4)/1458 + (2*x^2)/81 + 1/9
...x = 1
...T1 = 0.1396

%superpuestos
x = 0:0.01:20;   
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot')

%interpolacion
x = [1 2 3 4 5]; y = [5.5 43.1 128 290.7 498.4];
p = polyfit(x,y,4)
x2 = 1:.1:5;
y2 = polyval(p,x2);
plot(x,y,'o',x2,y2)
grid on

%parametricas en 3D
t = 0:pi/50:10*pi;
plot3(sin(0.5*t),cos(2*t),t)
axis square; grid on

%Campos escalares
[X,Y] = meshgrid([-2:0.1:2]);
Z = X^2.*exp(-X.^2-Y.^2);
plot3(X,Y,Z)
grid on

%mallas
[X,Y] = meshgrid([-2:0.1:2]);
Z = X^2.*exp(-X.^2-Y.^2);
mesh(X,Y,Z)

%mallas con surf
[X,Y] = meshgrid([-2:0.1:2]);
Z = X.*exp(-X.^2-Y.^2);
surf(X,Y,Z,'FaceColor','interp',...
	'EdgeColor','none',...
	'FaceLighting','phong')
axis tight
camlight left

...........................Recopilado y elaborado por Tato

