El arte de programar vs 6 (2).pdf

2019 EL ARTE DE PROGRAMAR Autor Ing. Máximo Obregón Ramos Profesor UNI [email protected] 951629294 Matlab MATLAB (MA

Views 127 Downloads 14 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

2019

EL ARTE DE PROGRAMAR

Autor Ing. Máximo Obregón Ramos Profesor UNI [email protected] 951629294

Matlab MATLAB (MATrix LABoratory, "laboratorio de matrices") es un software matemático que dispone de un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio llamado lenguaje M, ha sido desarrollado en diferentes plataformas como: Windows, Mac OS X y Unix/GNU/Linux. Entre sus prestaciones básicas se hallan: La manipulación de matrices, la representación de datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario (GUI) y la comunicación con programas en otros lenguajes y con otros dispositivos hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones, estas son: Simulink (plataforma de simulación multidominio) y GUIDE (editor de interfaces de usuario - GUI). Además, se pueden ampliar las capacidades de MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes de bloques (blocksets). Las aplicaciones de MATLAB se desarrollan en un lenguaje de programación propio. Este lenguaje es interpretado, y puede ejecutarse tanto en el entorno interactivo, como a través de un archivo de script (archivos *.m). Este lenguaje permite operaciones de vectores y matrices, funciones, cálculo lambda, y programación orientada a objetos. Debido a la gran cantidad de herramientas matemáticas, este software es muy usado en el campo del desarrollo de investigación en los diferentes campos de la ingeniería, así como el modelado matemático y simulación numérica de procesos que están incrustados en las diversas líneas del desarrollo tecnológico. Así mismo, Matlab cuenta con cientos de módulos que exploran las diferentes ramas de la ingeniería como: robótica, redes neuronales, lógica difusa, algoritmos genéticos, adquisición de datos,

MANEJO BASICO DEL ENTORNO DE Matlab

MATLAB está compuesto por un conjunto de funciones, agrupadas por: elfun, elmat, matfun, polyfun, etc. Matlab tiene cientos de grupos, y en cada grupo tiene varias decenas de funciones. Para ver todas las funciones básicas de Matlab, digite: help elfun. Ingrese las siguientes ordenes de cálculo en la ventana de comandos: 4+5 Manejo de matrices A^2 (2+3^2)^(1/7) A=[3 2 2;4 5 7;2 4 1] A.^2 cos(pi/3) B=[4 5 1;3 4 1;6 7 3] A^B exp(1) A.^B 12/3*4 C=A+B*A-B format long D=sin(A) help elmat format short E=sin(A)*cos(A) help matfun a=3 b=4 c=(a^2+b^2)^0.5 a+b c=c+1 a clear a a+b clear all b

operador traspuesta ' A A' Operador punto A=[1 2;3 4] B=[5 6;7 8] A*B (matricial) A.*B (elemento) . => * / ^

Autor: Ing. Máximo Obregón R. (+51) 951629294

zeros ones rand eye A=[3 2 2;4 5 7;2 4 1] sum det inv diag rank

/ [email protected]

1

Mas operaciones de matrices: Algunas combinaciones Generación de vectores sum(A') x=1:7 sum(sum(A)) x=(1:99)' diag(diag(A)) x=1:3:20 round(rand(8,4)*9) Manipuleo de los valores de matrices A=[1 2;3 4] A=[A;A] A=[A A]

A(4,1:end) A(4,:) A(:,end:-1:1) A(4,5)=9 A(:,4)=0 A(4,:)=1:6 A(:,3)=A(:,1) A(4,:)=A(4,:)-2*A(1,:)

Ejercicios: Evaluar las siguientes expresiones y verifique los resultados: 3

1) √ 3) √

𝑒5 𝜋4

3

3+ √7

𝑒 arccos⁡(𝜋)

5)

2) 𝑎𝑟𝑐𝑠𝑒𝑛(𝐿𝑜𝑔𝑒 500) = 1.5708 - 2.5135i

=1.1507 = 3.0587

⟦𝐿𝑜𝑔3 500⟧+𝐿𝑛(105 ) cos⁡(𝐿𝑜𝑔2 100)

=17.6484

4) √5 + tan⁡(7) ∗ 𝑒 6)

⟦𝐿𝑜𝑔3 500⟧+𝜋 arctan⁡(25)

1 𝜋

arctan⁡( )

= 3.2977

=5.3185

PROGRAMAS SECUENCIALES Códigos especiales para fprintf() %d es para enteros %f es para flotantes (número con decimales) %s es para texto \n Significa enter \t Significa tab Ejemplos resueltos E1: Lee 2 números y muestra la suma y la resta Solución clc a=input('Ingrese a:'); %Lee la variable a b=input('Ingrese b:'); %Lee la variable b m=a+b; n=a-b; fprintf('La suma es %d\n',m) fprintf('La resta es %d\n',n) Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

2

E2: Leer los tres lados de un triángulo y mostrar los 3 ángulos en sexagesimal. Solución clc a=input('Ingrese a:');%lee variable a b=input('Ingrese b:');%lee variable b c=input('Ingrese c:');%lee variable c m=acosd(abs((a^2-b^2-c^2)/(2*b*c))) n=acosd(abs((c^2-a^2-b^2)/(2*a*b))) p=acosd(abs((b^2-a^2-c^2)/(2*a*c))) fprintf('el angulo es%.2f\n',m); fprintf('el angulo es %.2f\n',n); fprintf('el angulo es %.2f\n',p); E3: Leer el valor de un monto en soles y calcular cuantas monedas de 5 soles y cuantas de 1 sol forman dicho monto, considerando la mínima cantidad de 1 sol. Solución clc m=input('Ingrese monto:'); res=mod(m,5); div=(m-res)/5; fprintf('Monedas de 5 soles: %d\nMonedas de 1 sol: %d\n',div,res) E4: Desarrolle un programa que a partir del ángulo y velocidad de partida del misil que lanza un cañón, indique la altura máxima, distancia máxima y tiempo total del recorrido.

Solución vi=input('Ingrese velocidad inicial(m/s):'); ai=input('Ingrese ángulo inicial(sex):'); g=9.81; hmax=vi^2*sind(ai); t=2*vi*(sind(ai))^2/(2*g); dmax=vi*cosd(ai)*t; fprintf('La altura maxima es %.4f\n',hmax); fprintf('La distancia maxima es %.4f\n',dmax); fprintf('El tiempo transcurrido es %.4f\n',t); Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

3

PROBLEMAS RETO 1. Leer las coordenadas polares de un punto en el plano cartesiano, con el ángulo en sexagesimal y mostrar la coordenada cartesiana de dicho punto 𝑥 = 𝑟𝑐𝑜𝑠(𝜃) 2. Leer las coordenadas cartesianas de un punto y 𝑦 = 𝑟𝑠𝑒𝑛(𝜃) mostrar la coordenada polar de dicho punto, donde el ángulo sea expresada en sexagesimal, considerar los puntos solo en el primer cuadrante. 3. Desarrolle un programa medidor de altura de edificios, que a partir del tiempo que se demora en caer un objeto hasta el suelo, calcule la altura de cualquier edificio.

4. Leer las coordenadas cartesianas de un punto en el espacio tridimensional y determinar las coordenadas esféricas y cilíndricas del mismo punto. 5. Leer el valor de un monto en soles y calcular cuántos billetes de 50, billetes de 20, monedas de 5 soles y cuantas de 1 sol forman dicho monto, considerando la máxima cantidad de billetes o monedas de más valor. 6. Leer un número de 4 cifras e invertir el número. 7. Leer las coordenadas cartesianas de un punto en el espacio tridimensional y determinar las coordenadas esféricas y cilíndricas del mismo punto. 8. Leer las coordenadas cartesianas de 3 puntos en el espacio tridimensional para formar un triángulo y calcular su perímetro y área. 9. Leer las coordenadas cartesianas de 3 puntos en el espacio tridimensional para formar un triángulo y calcular su perímetro y área. 10. Leer las coordenadas de los centros de 2 circunferencias y el radio de uno de ellos, luego calcular el radio del segundo, de tal manera que estas sean tangentes, así mismo calcule también el punto de tangencia.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

4

SENTENCIAS SELECTIVAS (If , switch)

También llamado estructura condicional. ESTRUCTURA IF Ejemplo inicial: Hallar el mayor de 2 números Solución: a=input('Ingrese a:'); b=input('Ingrese b:'); if a>b m=a; else m=b; end fprintf('El mayor es %d\n',m);

Operadores y conectores lógicos Sentencia inválida (alt 124) 3=

(alt 62) == Iguales ~= Diferente

Sentencia válida 3f(x2)=1.44 … Observa que el número se va aproximando a √2 = 1.4142 … Desarrolle un programa que lea como dato de entrada x0 y n, y muestre la √2 después de n iteraciones y compare este resultado con el valor exacto. Problema 11: Usando el procedimiento anterior, considerando n iteraciones y partiendo de un x0 cualquiera: 2𝑥 1 Calcule √3, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = 3 + 𝑥 2 Calcule √4, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) =

3𝑥

Calcule √5, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) =

4𝑥

Calcule √𝑎 por deducción de las fórmulas anteriores.

4

5

1

+ 𝑥3 1

+ 𝑥4

Problema 12: En todos los problemas anteriores que usan una serie o una fórmula de recurrencia, se ha usado como criterio de parada la cantidad de iteraciones. Intente ahora usar el error aparente como criterio de parada, la cual está definido por: 𝐄𝐫𝐫𝐨𝐫⁡𝐚𝐩𝐚𝐫𝐞𝐧𝐭𝐞 = ⁡ |𝐮𝐥𝐭𝐢𝐦𝐚⁡𝐚𝐩𝐫𝐨𝐱𝐢𝐦𝐚𝐜𝐢ó𝐧 − ⁡𝐩𝐞𝐧ú𝐥𝐭𝐢𝐦𝐚⁡𝐚𝐩𝐫𝐨𝐱𝐢𝐦𝐚𝐜𝐢ó𝐧| Entonces las iteraciones se deben realizar hasta que este error sea menor que un error máximo, que previamente se ha tenido que leer como dato de entrada.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

17

FUNCIONES EN MATLAB Es una subrutina que permite organizar en módulos el Ejemplo de funciones propias de Matlab, desarrollo de aplicaciones, permitiendo ahorrar ya conocidas hasta el momento: muchas líneas de código, sobre todo, cuando se trate sin, cos, fix, floor,mod, etc… de aplicaciones más complejas. Ejemplo la creación de una función para calcular la hipotenusa de un triángulo rectangular. Función

Entradas

E1: Desarrolle una función llamado mayorde3 que a partir de 3 números escalares ubicado cada uno en un parámetro de entrada, calcule el mayor de ellos, luego verifique que funcione.

function h=calhipo(a,b) h=(a^2+b^2)^0.5; Salidas

¿Cuántas variables de entrada y salida tiene esta función?

Pequeños ejercicios E2: Desarrolle una función que calcule el promedio entre el máximo y mínimo de 3 números. Ejemplo: prombet(2,4,9)=>11.5

E3: Desarrolle una función que calcule la suma de todos los enteros comprendido en un intervalo. Usar iterativas. Ejemplo: sumabet(3,6)=>18

Trabajando con varias funciones y con varias variables de salida E1: Desarrolle una función que halle el mayor entre 2 números y otra que halle el menor de 2 números y una tercera función que ordene 3 valores en 3 variable de salida function m=mayor(a,b) function m=menor(a,b) if a>b if a>b m=a; m=b; else else m=b; m=a; end end function [a,b,c]=ordenar(m,n,p) a=menor(menor(m,n),p); c=mayor(mayor(m,n),p); b=m+n+p-a-c;

Autor: Ing. Máximo Obregón R. (+51) 951629294

Esta es la orden que debes ingresar en la línea de comando para llamar a la función ordenar: [a,b,c]=ordenar(6,7,4)

/ [email protected]

18

Pequeños ejercicios E1: Cree solo una función (no cree funciones E2: Cree una función que calcule el número de adicionales) que convierta una coordenada dígitos. (usar iterativas, no usar logaritmos) polar en coordenada cartesiana en 2 variables Ejemplo: cuenta(34561) =>5 de salidas. Considere los ángulos en sexagesimal y pruebe en la ventana de Cree una función que calcule el dígito de una comandos. posición determinada. (usar la función anterior) x=rcos(teta) Ejemplo: extrae(37456,2) =>7 y=rsin(teta) E3: Cree otra función que calcule la suma y E4: Cree otra función que verifique si un producto de sus dígitos usando las funciones número es capicúa. anteriores.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

19

ARREGLOS (Arrays)

Los arreglos son tipos de datos que permiten almacenar varios valores en una sola variable, estas pueden ser multidimensionales.  Arreglos de una dimensión  Arreglos de 2 dimensiones  Arreglos de 3 dimensiones Ejemplo de dimensión: x(4)=7; x(1)=x(4)-3; x 4 7 1

2

3

4

una Ejemplo de dos dimensiones: m(3,2)=5; m(2,3)=7; m(1,2)=m(3,2)+4;

5

m

1

1

2

4

9 7

2 3

3

5

ARREGLOS DE UNA DIMENSIÓN Ejemplos básicos E1: Cargando valores en un arreglo E4: Genera un arreglo con valores al azar, Solución: que simule el lanzamiento de 2 dados y clc;clear; mostrar el mayor valor y la posición n=5; respectiva de cada uno. for i=1:n Solución: x(i)=5; clc;clear; end %Genera valores al azar de 2 a 12 disp(x) n=10; n=10; E2: Genera un arreglo con valores al azar for i=1:n Solución: A(i)=round(rand()*10)+2; clc;clear all; end n=input('Ingrese la cantidad de números:'); disp(A') for i=1:n %Hallando el mayor A(i)=round(rand()*10)+2; M=A(1); end for i=2:n disp(A) if MA(i) clc;clear; m=A(i); n=input('Ingrese número de alumnos:'); end for i=1:n end fprintf('Ingrese datos alumno %d\n',i); fprintf('El menor es %d\n',m); C(i)=input(' Ingrese código:'); %Hallando el promedio N(i)=input(' Ingrese nota final:'); p=(M+m)/2; end fprintf('El promedio es %.2f\n',p); disp([C' N']) E7: Desarrolle un programa que simule las %Buscar la mayor nota notas de un aula de 80 alumnos y determine la m=N(1); cantidad de alumnos de cada nota de 0 a 20, for i=2:n con la siguiente presentación. if m