Programación para ingeniería.
Reinel Tabares Soto.
Maestría en Ingeniería.
Cel: 3103475798
Correo: rtabares@autonoma.edu.co
Universidad Autónoma de Manizales.
Manizales 2023.
1
2
CONTENIDO.
Maestría en Ingeniería – Programación para ingeniería
Introducción.
3
Maestría en Ingeniería – Programación para ingeniería
Lenguajes de programación:
Introducción.
4
Maestría en Ingeniería – Programación para ingeniería
Introducción.
5
Maestría en Ingeniería – Programación para ingeniería
Elementos básicos del escritorio de Matlab
Introducción.
6
Maestría en Ingeniería – Programación para ingeniería
Elementos básicos del escritorio de Matlab
Introducción.
7
Maestría en Ingeniería – Programación para ingeniería
Algunos comentarios sobre la ventana de comandos
Introducción.
8
Maestría en Ingeniería – Programación para ingeniería
Tipos de datos:
Data Type | Description |
int8 | 8-bit signed integer |
uint8 | 8-bit unsigned integer |
int16 | 16-bit signed integer |
uint16 | 16-bit unsigned integer |
int32 | 32-bit signed integer |
uint32 | 32-bit unsigned integer |
int64 | 64-bit signed integer |
uint64 | 64-bit unsigned integer |
single | single precision numerical data |
double | double precision numerical data |
logical | logical values of 1 or 0, represent true and false respectively |
char | character data (strings are stored as vector of characters) |
cell array | array of indexed cells, each capable of storing an array of a different dimension and data type |
structure | C-like structures, each structure having named fields capable of storing an array of a different dimension and data type |
Introducción.
9
Maestría en Ingeniería – Programación para ingeniería
Ejemplo:
>> en8=int8(10);
>> en8s=uint8(10);
>> en16=int16(10);
>> en16s=uint16(10);
>> en32=int32(10);
>> en32s=uint32(10);
>> en64=int64(10);
>> en64s=uint64(10);
>> ps=single(3.2);
>> ps=double(3.2);
>> ch='s';
>> str='hola’;
>> strcat=('hola’, ‘rey’) %concatenar Strings
>> vect=[1 2 3];
>> persona=struct('nombre',{'rey','juan','cris'},'edad',{15,17,18});
>> myCell = {1, 2, 3;'text', rand(5,10,2), {11; 22; 33}};
>> realmin(‘double’) %valor más pequeño en double
>> realmax(‘simple’) %valor más grande en simple
>> intmin('int32')% valor más pequeño en int32
>> intmax('int32')% valor más grande en int32
>> ischar(ch)% Determina si el valor es char
>> isfloat(ps)% Determina si el valor es flotante
>> isinteger(en8)%Determina si el valor es entero
Introducción.
10
Maestría en Ingeniería – Programación para ingeniería
Conversión de tipos de datos:
Function | Purpose |
char | Convert to character array (string) |
int2str | Convert integer data to string |
mat2str | Convert matrix to string |
num2str | Convert number to string |
str2double | Convert string to double-precision value |
str2num | Convert string to number |
native2unicode | Convert numeric bytes to Unicode characters |
unicode2native | Convert Unicode characters to numeric bytes |
base2dec | Convert base N number string to decimal number |
bin2dec | Convert binary number string to decimal number |
dec2base | Convert decimal to base N number in string |
dec2bin | Convert decimal to binary number in string |
dec2hex | Convert decimal to hexadecimal number in string |
hex2dec | Convert hexadecimal number string to decimal number |
hex2num | Convert hexadecimal number string to double-precision number |
num2hex | Convert singles and doubles to IEEE hexadecimal strings |
cell2mat | Convert cell array to numeric array |
cell2struct | Convert cell array to structure array |
cellstr | Create cell array of strings from character array |
mat2cell | Convert array to cell array with potentially different sized cells |
num2cell | Convert array to cell array with consistently sized cells |
struct2cell | Convert structure to cell array |
Introducción.
11
en la línea en que está colocado el cursor.
Maestría en Ingeniería – Programación para ingeniería
Debugger
Números y operaciones.
12
No hace falta definir variables enteras, reales, entre otras. Como en otros lenguajes.
Máximo 19 cifras significativas
Maestría en Ingeniería – Programación para ingeniería
Datos numéricos:
Precisión y formatos: Por defecto tiene un formato corto, pero
se pueden usar otros.
>> format long (14 cifras significativas)
>> format short (5 cifras significativas)
>> format short e (notación exponencial)
>> format long e (notación exponencial)
>>format rat (aproximación racional ‘fracción’)
>> fomat bank (redondea a dos decimales)
Números y operaciones.
13
Maestría en Ingeniería – Programación para ingeniería
Datos numéricos:
Números y operaciones.
14
Maestría en Ingeniería – Programación para ingeniería
Operaciones aritméticas elementales:
Números y operaciones.
15
Maestría en Ingeniería – Programación para ingeniería
Funciones de Matlab:
Vectores.
16
>> v =[2 3 4]
>> w =[2;3;4;7;9;8]
Generación de vectores fila:
Maestría en Ingeniería – Programación para ingeniería
Definición de vector:
Vectores.
17
v: vector, k: escalar:
Maestría en Ingeniería – Programación para ingeniería
Operaciones de un vector por un escalar:
Vectores.
18
v y w: vectores
Aplicadas algunas de estas funciones a matrices, realizan dichas operaciones por columnas.
Maestría en Ingeniería – Programación para ingeniería
Operaciones entre vectores:
Matrices.
19
>>M=[3 4 5; 6 7 8; 1 -1 0]
Maestría en Ingeniería – Programación para ingeniería
Definición de matriz:
Matrices.
20
Maestría en Ingeniería – Programación para ingeniería
Generación de matrices
Matrices.
21
Maestría en Ingeniería – Programación para ingeniería
Operaciones entre matrices:
Matrices.
22
Maestría en Ingeniería – Programación para ingeniería
Funciones de Matlab para matrices:
Matrices.
23
Maestría en Ingeniería – Programación para ingeniería
Solución de sistemas de ecuaciones lineales:
Manejo de archivos.
24
Maestría en Ingeniería – Programación para ingeniería
Guardar en ficheros y recuperar datos:
Manejo de archivos.
25
Maestría en Ingeniería – Programación para ingeniería
Lectura de archivos:
Manejo de archivos.
26
Maestría en Ingeniería – Programación para ingeniería
Lectura de archivos alto nivel:
clc
clear all
close all
filename = 'prueba.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);
% View data
for k = [1:7]
disp(A.colheaders{1, k})
disp(A.data(:, k))
disp(' ')
end
Manejo de archivos.
27
Maestría en Ingeniería – Programación para ingeniería
Lectura de archivos bajo nivel:
clc
clear all
close all
%FORMA 1
z=fopen('prueba.txt'); % abrir archivo
while(~feof(z))% hacer lectura mientras no llegue al final
line= fgets(z)% Lectura de toda la linea
end
fclose(z); % cerrar archivo
%FORMA 2
z=fopen('prueba.txt'); % abrir archivo
M1=fscanf(z,'%s') % Lectura de todo el archivo
fclose(z); % cerrar archivo
Manejo de archivos.
28
Maestría en Ingeniería – Programación para ingeniería
Escritura de archivos:
% create a matrix y, with two rows
x = 0:10:100;
y = [x; log(x)];
% open a file for writing
fid = fopen('logtable.txt', 'w');
% Table Header
fprintf(fid, 'Log Function\n\n');
% print values in column order
% two values appear on each row of the file
fprintf(fid, '%f %f\n', y);
fclose(fid);
% display the file created
type logtable.txt
Polinomios.
29
Maestría en Ingeniería – Programación para ingeniería
Definición y funciones de polinomios:
Polinomios.
30
Maestría en Ingeniería – Programación para ingeniería
>>y=polyval(p,x)
Variables simbólicas.
31
Maestría en Ingeniería – Programación para ingeniería
Matlab es una herramienta que trabaja con dos tipos de datos en general: vectorial y simbólica.
Vectorial: solo sirve para polinomios
Simbólica: sirve para cualquier tipo de función
Nota: las funciones que sirven para variables simbólicas no sirven para variables vectoriales y viceversa.
Tipos de variables en Matlab:
Variables simbólicas.
32
Maestría en Ingeniería – Programación para ingeniería
>>syms x y z %definición de variables simbólicas
>>y=x^2+5*x+6 %un ejemplo de función
>>diff(y) %deriva
>>diff(y,2) %segunda derivada
>>int(y) %integra
>>z=(x - 1)*(x - 2)*(x + 3)%polinomio literal
>>expand(z) %expande el polinomio
>>factor(y) %factoriza
>>pretty(y) %vuelve bonito los polinomios
>>simplify(z) %simplifica las expresiones
>>ezplot(z) %grafica
>>limit(log(x)/(sqrt(x)), x, inf) %calcular un limite
>>int(y,x,0,pi/2) %integrar con limites
>>solve(y==0) %resuelve una ecuación
>>eval(y) %evalúa la función definiendo su valor previo
>>solve('x-5+y=0','x’) %despeja x
>>subs(y,x,0) %substitución simbólica
Funciones para variables simbólicas:
Cálculo vectorial.
33
Maestría en Ingeniería – Programación para ingeniería
>>syms x y z % Definición de variables simbólicas
>>z=x^2+5*x*y^4+6*log(x*y^5) % Función escalar
>>diff(z,y) %deriva z con respecto a y
>>diff(z,x,2) %segunda deriva z con respecto a x
>>int(z,x) %integra
>>gradient(z) % vector gradiente
>>hessian(z) %matriz hessiana
>>f=[x*y*z, y^2, x+z]%Función vectorial
>>jacobian(f) %Matriz Jacobian
>>jacobian(gradient(z))%Otra forma de calcular Hessiana
Funciones:
Solución de sistemas de ecuaciones�No lineales.
34
Maestría en Ingeniería – Programación para ingeniería
%Sistema de ecuaciones no lineales
function [f]=noLineal(x)
f(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
f(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
end
%Principal
clc
clear all
close all
x0=[1000 1000];
[x,fval,exitflag,output,jacobian] = fsolve('noLineal',x0);
Utilizando la función “fsolve”:
Solución de sistemas de ecuaciones�No lineales.
35
Maestría en Ingeniería – Programación para ingeniería
Utilizando la función “solve”:
clc
clear all
close all
syms x1 x2
f(1) = exp(-exp(-(x1+x2))) - x2*(1+x1^2);
f(2) = x1*cos(x2) + x2*sin(x1) - 0.5;
z=solve(f(1),f(2))
Nota: La función fsolve genera mejores criterios de convergencia que el solve .
Algunas funciones para �optimización.
36
Maestría en Ingeniería – Programación para ingeniería
Gráficos en 2D y 3D.
37
Maestría en Ingeniería – Programación para ingeniería
>> plot(X,Y,’opción’) (opción: permite elegir color y trazo de la curva).
Gráficos en 2D:
Gráficos en 2D y 3D.
38
Maestría en Ingeniería – Programación para ingeniería
Elección de la escala de los ejes:
set(gca, ‘XTick’,-pi:pi/2:pi)
set(gca, ‘XTicklabel’,({‘-pi’,’-pi/2’,0,’pi/2’,’pi’})
Gráficos en 2D y 3D.
39
Maestría en Ingeniería – Programación para ingeniería
Funciones para añadir títulos:
int2str(n) convierte el valor de la variable entera n en carácter
num2str(x) convierte el valor de la variable real o compleja x en carácter. Ejemplo: title(num2str(x)).
Gráficos en 2D y 3D.
40
Maestría en Ingeniería – Programación para ingeniería
Funciones Matlab para gráficos 2D y 3D :
>> plot3(X,Y,Z, ’opción’).
Gráficos en 2D y 3D.
41
Maestría en Ingeniería – Programación para ingeniería
Ejemplos:
y1= sin(3πx)/e^x
y2=cos(3πx)/e^x
con x variando entre 0 y 3 π,obteniendo una única figura de la forma:
x=sin(t)
y=cos(t)
z=t con t=0:pi/50:10*pi;
Gráficos en 2D y 3D.
42
Maestría en Ingeniería – Programación para ingeniería
Representación grafica de superficies:
Gráficos en 2D y 3D.
43
Maestría en Ingeniería – Programación para ingeniería
Ejemplo de una grafica de una superficie:
f(x,y)=16-x^2-y^2
>>x=-100:0.1:100 %vector de tabulación en el eje x
>>y=-100:0.1:100 %vector de tabulación en el eje y
>>[X Y]=meshgrid(x,y)%creación de la malla
>>Z=16-X.^2-Y.^2 %tabulación
>>meshc(X,Y,Z) % Grafica de la superficie
Gráficos en 2D y 3D.
44
Maestría en Ingeniería – Programación para ingeniería
Representación grafica de superficies:
Diferentes formas de representar los polígonos coloreados:
Manipulación de gráficos
Gráficos en 2D y 3D.
45
Maestría en Ingeniería – Programación para ingeniería
Transformación de coordenadas :
Ejemplo: Tabular una circunferencia en coordenadas cartesianas, posteriormente pasarla a coordenadas polares y graficar.
Gráficos en 2D y 3D.
46
Maestría en Ingeniería – Programación para ingeniería
Creación de películas:
x=0:0.01:2*pi; %vector de tabulación
for j=1:10
plot(x,sin(j*x)/2); %frame simple
M(j)=getframe; %almacenamiento de todos los frames
end
movie(M,4,6) %reproducir películas
Estructuras de control condicionadas.
47
Maestría en Ingeniería – Programación para ingeniería
Operaciones lógicas:
Condicionales:
sentencia
end
------------------------
sentencia
else
sentencia
end
------------------------
sentencia
elseif operación lógica
sentencia
else
sentencia
end
Estructuras cíclicas:
sentencia
end
-------------------------
sentencia
end
-------------------------
sentencia
end
Datos de entrada y salida, �ficheros y funciones.
48
Maestría en Ingeniería – Programación para ingeniería
Ficheros de Matlab:
La primera línea es ejecutable y empieza por la palabra function de la forma:
function arg_salida=funcion_nombre(arg_entrada, parametros)
El fichero se debe guardar como funcion_nombre.m
input: permite introducir datos: x=input(‘Teclee valor de a’);
disp: muestra un texto por pantalla: disp(‘El algoritmo no ha convergido’)
fprintf: muestra datos con texto: fprintf(‘texto %f’,dato)
Análisis numérico.
49
Maestría en Ingeniería – Programación para ingeniería
Interpolación
1D:
X = 0:10; V = sin(X); Xq = 0:.25:10;
Vq = interp1(X,V,Xq,'linear’); plot(X,V,'o',Xq,Vq,':.')
2D:
Métodos: ’bilinear’ (interpolación lineal), ’bicubic’ (cúbica)
[X,Y,V] = peaks(10); [Xq,Yq] = meshgrid(-3:.1:3,-3:.1:3);
Vq = interp2(X,Y,V,Xq,Yq); mesh(Xq,Yq,Vq)
Análisis numérico.
50
Maestría en Ingeniería – Programación para ingeniería
Integración:
quad(‘funcion’,a,b)
dblquad('y*sin(x)+x*cos(y)',xmin,xmax,ymin,ymax)
Optimización irrestricta de N-Variables.
51
Maestría en Ingeniería – Programación para ingeniería
Optimización en 1 variable
Pasos para calcular Max o Min en 1 variable
Sea f(x) una función continua y derivable
f’’(xi)<0 (Max) f’’(xi)>0 (Min) f’’(xi)=0 (P.I)
Optimización irrestricta de N-Variables.
52
Maestría en Ingeniería – Programación para ingeniería
Optimización en N- Variables
Optimización irrestricta de N-Variables.
53
Maestría en Ingeniería – Programación para ingeniería
Optimización en N- Variables
Optimización irrestricta de N-Variables.
54
Maestría en Ingeniería – Programación para ingeniería
Optimización en N- Variables
Método de búsqueda directa.
55
Maestría en Ingeniería – Programación para ingeniería
Método de la Bisección.(Raíz)
Método de búsqueda directa.
56
Maestría en Ingeniería – Programación para ingeniería
Método de la Falsa Posición.(Raíz)
Método de búsqueda directa.
57
Maestría en Ingeniería – Programación para ingeniería
Método de Newton Raphson.(Raíz)
Método de búsqueda directa.
58
Maestría en Ingeniería – Programación para ingeniería
Método de la Secante.(Raíz)
Método de búsqueda directa.
59
Maestría en Ingeniería – Programación para ingeniería
Método de la Sección dorada.(Optimo)
Método de búsqueda directa.
60
Maestría en Ingeniería – Programación para ingeniería
Método de la Interpolación Cuadrática.(Optimo)
Métodos de descenso.
61
Maestría en Ingeniería – Programación para ingeniería
Método del descenso.
Métodos de Newton Multivariado.
62
Maestría en Ingeniería – Programación para ingeniería
Método de Newton multivariado
Integración.
63
Maestría en Ingeniería – Programación para ingeniería
Regla Trapezoidal
Error:
Integración.
64
Maestría en Ingeniería – Programación para ingeniería
Regla Trapezoidal múltiple
Mejora la regla trapezoidal simple con el fin de partir el intervalo de integración en varios segmentos y aplicar la regla trapezoidal varias veces para dar mayor precisión. Tarea: Programar el método de Simpson 1/3 simple y multiple
Error:
h=ancho del segmento
n=numero de segmentos
Ecuaciones diferenciales.
65
Maestría en Ingeniería – Programación para ingeniería
Método de Euler
es un procedimiento de integración numérica para resolver ecuaciones diferenciales ordinarias (EDO) a partir de un valor inicial dado.
Pasos
Ecuaciones diferenciales.
66
Maestría en Ingeniería – Programación para ingeniería
Método de Rujen Kutta
diferenciales ordinarias (ODEs)
clc
clear all
close all
global R L C Vi
R=1;L=1;C=1;Vi=1;
tspan=[0 20];
x0=[0.1 0.1];
[t,x]=ode45(@fun1,tspan,x0)
plot(t,x(:,1))
figure
plot(t,x(:,2))
function dx=fun1(t,x)
global R L C Vi
dx=zeros(2,1);
dx(1)=-R/L*x(1)-1/L*x(2)+1/L*Vi;
dx(2)=1/C*x(1);
end
Ecuaciones diferenciales.
67
Maestría en Ingeniería – Programación para ingeniería
Forma analítica “dsolve”
diferenciales ordinarias (ODEs) .
clc
clear all
close all
syms x(t)
D2x=diff(x,t,2);
Dx=diff(x,t);
equ=D2x+Dx+x==1;
con=[x(0)==0.1 Dx(0)==0.1];
w=dsolve(equ,con)
Ajuste de curvas.
68
Maestría en Ingeniería – Programación para ingeniería
Regresión lineal
Aproximación lineal
Optimizando
Tarea
69
Maestría en Ingeniería – Programación para ingeniería
Transformadas
70
Maestría en Ingeniería – Programación para ingeniería
Consiste en pasar del dominio del tiempo al dominio de la frecuencia.
Transformada de Laplace
syms a s t w x F(t)
laplace(t^5) returns 120/s^6
laplace(exp(a*s)) returns -1/(a-z)
laplace(sin(w*x),t) returns w/(t^2+w^2)
laplace(cos(x*w),w,t) returns t/(t^2+x^2)
laplace(x^(3/2),t) returns (3*pi^(1/2))/(4*t^(5/2))
laplace(diff(F(t))) returns s*laplace(F(t),t,s) - F(0)
Transformada inversa de Laplace
Examples:
syms s t w x y f(x)
ilaplace(1/(s-1)) returns exp(t)
ilaplace(1/(t^2+1)) returns sin(x)
ilaplace(t^(-5/2),x) returns (4*x^(3/2))/(3*pi^(1/2))
ilaplace(y/(y^2 + w^2),y,x) returns cos(w*x)
ilaplace(laplace(f(x),x,s),s,x) returns f(x)
Simulink
71
Maestría en Ingeniería – Programación para ingeniería
Simulink es un entorno de diagrama de bloques para Model-Based Design. Soporta simulación, generación automática de código y pruebas continuas de sistemas embebidos.
Es un entorno de programación visual, que funciona sobre el entorno de programación Matlab. Es un entorno de programación de más alto nivel de abstracción que el lenguaje interpretado Matlab (archivos con extensión .m).
>>simulink
Simulink
72
Maestría en Ingeniería – Programación para ingeniería
Guide.
73
Maestría en Ingeniería – Programación para ingeniería
Guide.
74
Maestría en Ingeniería – Programación para ingeniería
Algunos comandos:
Gracias por su atención.
75
Maestría en Ingeniería – Programación para ingeniería