Logo Studenta

Programação em MATLAB

¡Este material tiene más páginas!

Vista previa del material en texto

Ing. Pedro Romero y Otiniano 
PROGRAMACION EN MATLAB: UNMSM – FQIQ Mayo de 2017 
1. Programación de MATLAB 
Como ya se ha dicho varias veces incluso con algún ejemplo MATLAB es una aplicación que se puede 
programar muy fácilmente. Se comenzará viendo las bifurcaciones y bucles, y la lectura y escritura 
interactiva de variables, que son los elementos básicos de cualquier programa de una cierta 
complejidad. 
1.1. Bifurcaciones y bucles 
Se van a introducir aquí los primeros conceptos de programación. MATLAB posee un lenguaje de 
programación que como cualquier otro lenguaje dispone de sentencias para realizar bifurcaciones y bucles. 
Las bifurcaciones permiten realizar una u otra operación según se cumpla o no una determinada condición. 
La figura 17 muestra dos posibles formas de bifurcación. Los bucles permiten repetir las mismas o análogas 
operaciones sobre datos distintos. Mientras que en C el "cuerpo" de estas sentencias se determinaba 
mediante llaves {...}, en MATLAB se utiliza la palabra end con análoga finalidad. Existen también algunas 
otras diferencias de sintaxis. Hay que señalar que en MATLAB no existe las construcción análoga a do ... 
while. 
 
Figura 17. Ejemplos gráficos de bifurcaciones. 
Las bifurcaciones y bucles no sólo son útiles en la preparación de programas o de ficheros *.m. También 
se aplican con frecuencia en el uso interactivo de MATLAB, como se verá más adelante en algunos 
ejemplos. 
1.2. SENTENCIA IF 
En su forma más simple, la sentencia if se escribe en la forma siguiente (obsérvese que a diferencia de C, 
la condición no va entre paréntesis, aunque se pueden poner si se desea)11 
if condición (x>2) 
sentencias1 
else 
sentencias2 
end 
11
 En los ejemplos siguientes las sentencias aparecen desplazadas hacia la derecha respecto al if, else o 
end. Esto se hace así para que el programa resulte más legible, resultando más fácil ver dónde empieza y 
termina la bifurcación o el bucle. Es muy recomendable seguir esta práctica de programación. 
Existe también la bifurcación múltiple, en la que pueden concatenarse tantas condiciones como se desee, 
y que tiene la forma: 
if <condicion1> 
bloque1 
elseif <condicion2> 
bloque2 
elseif <condicion3> 
bloque3 
else % opción por defecto 
Ing. Pedro Romero y Otiniano 
bloque4 
end 
Una observación muy importante: la condición del if puede ser una condición matricial, del tipo 
A==B, donde A y B son matrices del mismo tamaño. Para que se considere que la condición se cumple, 
es necesario que sean iguales dos a dos todos los elementos de las matrices A y B. Basta que haya dos 
elementos diferentes para que las matrices no sean iguales, y por tanto las sentencias del if no se 
ejecuten. Por ejemplo: 
if A==B exige que todos los elementos sean iguales dos a dos 
if A=B exige que todos los elementos sean diferentes dos a dos 
Como se ha dicho, MATLAB dispone de funciones especiales para ayudar en el chequeo de condiciones 
matriciales. Por ejemplo, la función isequal(A, B) devuelve un uno si las dos matrices son idénticas y 
un cero en caso de que difieran en algo. 
1.3. SENTENCIA SWITCH 
La sentencia switch realiza una función análoga a un conjunto de if...elseif concatenados. Su forma 
general es la siguiente: 
switch <switch_expresion> 
case <case_expr1>, 
bloque1 
case {case_expr2, case_expr3, case_expr4,...} 
bloque2 
... 
otherwise, % opción por defecto 
bloque3 
end 
Al principio se evalúa la <switch_expresion>, cuyo resultado debe ser un número escalar o una cadena de 
caracteres. Este resultado se compara con las <case_expr>, y se ejecuta el bloque de sentencias que 
corresponda con ese resultado. Si ninguno es igual a <switch_expresion> se ejecutan las sentencias 
correspondientes a otherwise. Según puede verse en el ejemplo anterior, es posible agrupar varias 
condiciones dentro de unas llaves (constituyendo lo que se llama un cell array o vector de celdas); basta 
la igualdad con cualquier elemento del cell array para que se ejecute ese bloque de sentencias. La 
“igualdad” debe entenderse en el sentido del operador de igualdad (==) para escalares y la función 
strcmp( ) para cadenas de caracteres). A diferencia de C12, sólo se ejecuta uno de los bloques relacionado 
con un case. 
12
 En C se ejecuta el caso seleccionado y todos los siguientes, salvo que se utilice la sentencia break. 
1.4. SENTENCIA FOR 
La sentencia for repite un conjunto de sentencias un número predeterminado de veces. La sentencia for de 
MATLAB es muy diferente y no tiene la generalidad de la sentencia for de C. La siguiente construcción 
ejecuta sentencias con valores de i de 1 a n, variando de uno en uno. 
for i=1:0.5:n 
sentencias 
end 
En el siguiente ejemplo se presenta el caso más general para la variable del bucle (valor_inicial: 
incremento: valor_final); el bucle se ejecuta por primera vez con i=n, y luego i se va reduciendo de 0.2 
en 0.2 hasta que llega a ser menor que 1, en cuyo caso el bucle se termina: 
for i=n:-0.2:1 
sentencias 
end 
En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La variable j es 
la que varía más rápidamente (por cada valor de i, j toma todos sus posibles valores): 
for i=1:m 
for j=1:n 
Ing. Pedro Romero y Otiniano 
sentencias 
end 
end 
Una última forma de interés del bucle for es la siguiente (A es una matriz): 
for i=A 
sentencias 
end 
En la que la variable i es un vector que va tomando en cada iteración el valor de una de las columnas de 
A. 
 
1.5. SENTENCIA WHILE 
La estructura del bucle while es muy similar a la de C. Su sintaxis es la siguiente: 
while <condición> 
sentencias 
end 
Donde condición puede ser una expresión vectorial o matricial. Las sentencias se siguen ejecutando 
mientras haya elementos distintos de cero en condición, es decir, mientras haya algún o algunos 
elementos true. El bucle se termina cuando todos los elementos de condición son false (es decir, cero). 
 
1.6. SENTENCIA BREAK 
Al igual que en C, la sentencia break hace que se termine la ejecución del bucle más interno de los que 
comprenden a dicha sentencia. 
 
2. Lectura y escritura interactiva de variables 
Se verá a continuación una forma sencilla de leer variables desde teclado y escribir mensajes en la 
pantalla del PC. Más adelante se considerarán otros modos más generales –y complejos– de hacerlo. 
 
2.1 FUNCIÓN INPUT 
La función input permite imprimir un mensaje en la línea de comandos de MATLAB y recuperar como 
valor de retorno un valor numérico o el resultado de una expresión tecleada por el usuario. 
Después de imprimir el mensaje, el programa espera que el usuario teclee el valor numérico o la 
expresión. Cualquier expresión válida de MATLAB es aceptada por este comando. El usuario puede 
teclear simplemente un vector o una matriz. En cualquier caso, la expresión introducida es evaluada con 
los valores actuales de las variables de MATLAB y el resultado se devuelve como valor de retorno. Véase 
un ejemplo de uso de esta función: 
» n = input('Teclee el número de ecuaciones') 
Otra posible forma de esta función es la siguiente (obsérvese el parámetro ’s’): 
» Nombre = input('¿Cómo te llamas?','s') 
En este caso el texto tecleado como respuesta se lee y se devuelve sin evaluar, con lo que se almacena 
en la cadena Nombre. Así pues, en este caso, si se teclea una fórmula, se almacena como texto sin 
evaluarse. 
 
2.2. FUNCIÓN DISP 
La función disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero sin 
imprimir su nombre. En realidad, disp siempre imprime vectores y/o matrices: las cadenas de caracteres 
son un caso particular de vectores. Considérense los siguientes ejemplos de cómo se utiliza: 
» disp('El programa ha terminado') 
» A=rand(4,4) 
» disp(A) 
Obsérvese la diferencia entre las dos formas de imprimir la matriz A. 
 
3. Ficheros *.m 
Los ficheros con extensión (.m) son ficheros de texto (ASCII) que constituyenel centro de la 
programación en MATLAB. Ya se han utilizado en varias ocasiones. Estos ficheros se crean y 
Ing. Pedro Romero y Otiniano 
modifican con un editor de textos cualquiera. En el caso de MATLAB ejecutado en un PC bajo 
Windows, lo más sencillo es utilizar su propio editor de textos. 
Existen dos tipos de ficheros *.m, los ficheros de comandos (llamados scripts en inglés) y las funciones. 
Los primeros contienen simplemente una sucesión de comandos que se ejecutan sucesivamente cuando 
se teclea el nombre del fichero en la línea de comandos de MATLAB. 
Un fichero de comandos puede llamar a otros ficheros de comandos. Si un fichero de comandos se llama 
desde de la línea de comandos de MATLAB, las variables que crea pertenecen al espacio de trabajo base 
de MATLAB, y permanecen en él cuando se termina la ejecución de dicho fichero. 
Las funciones permiten definir funciones enteramente análogas a las de MATLAB, con su nombre, sus 
argumentos [variables de entrada] y sus valores de retorno [variables de salida]. Los ficheros *.m que 
definen funciones permiten extender las posibilidades de MATLAB; de hecho existen bibliotecas de 
ficheros *.m que se venden (toolkits) o se distribuyen gratuitamente (a través de la Internet). Las funciones 
definidas en ficheros *.m se caracterizan porque la primera línea (que no sea un comentario) comienza por 
la palabra function, seguida por los valores de retorno, el signo igual (=) y el nombre de la función, 
seguido de los argumentos, entre paréntesis y separados por comas. 
 
Recuérdese que un fichero *.m puede llamar a otros ficheros *.m, e incluso puede llamarse a sí mismo de 
forma recursiva. Los ficheros de comandos se pueden llamar también desde funciones, en cuyo caso las 
variables que se crean pertenecen a espacio de trabajo de la función. 
A continuación se verá con un poco más de detalle ambos tipos de ficheros. 
 
3.1 FICHEROS DE COMANDOS 
Como ya se ha dicho, los ficheros de comandos o scripts son ficheros con un nombre tal como file1.m que 
contienen una sucesión de comandos análoga a la que se teclearía en el uso interactivo del programa. Dichos 
comandos se ejecutan cuando se teclea el nombre del fichero que los contiene (sin la extensión), es decir 
cuando se teclea file1 con el ejemplo considerado. Cuando se ejecuta desde la línea de comandos, las 
variables creadas por file1 pertenecen al espacio de trabajo base de MATLAB. Por el contrario, si se ejecuta 
desde una función, las variables que crea pertenecen al espacio de trabajo de la función. 
En los ficheros de comandos conviene poner los (;) al final de cada sentencia, para evitar una salida de 
resultados No deseada. Un fichero *.m puede llamar a otros ficheros *.m, e incluso se puede llamar a sí 
mismo de modo recursivo. Sin embargo, no se puede hacer profile de un fichero de comandos: solo se 
puede hacer de las funciones. 
Las variables definidas por los ficheros de comandos son variables del espacio de trabajo desde el que se 
ejecuta el fichero, esto es variables con el mismo carácter que las que se crean interactivamente en 
MATLAB si el fichero se ha ejecutado desde la línea de comandos. Al terminar la ejecución del script, 
dichas variables permanecen en memoria. 
El comando echo hace que se impriman los comandos que están en un script a medida que van siendo 
ejecutados. Este comando tiene varias formas: 
echo on activa el echo en todos los ficheros script 
echo off desactiva el echo 
echo file on donde 'file' es el nombre de un fichero de función, activa el echo en esa función 
echo file off desactiva el echo en la función 
echo file pasa de on a off y viceversa 
echo on all activa el echo en todas las funciones 
echo off all desactiva el echo de todas las funciones 
Mención especial merece el fichero de comandos startup.m. Este fichero se ejecuta cada vez que se entra 
en MATLAB. En él puede introducir todos aquellos comandos que le interesa se ejecuten siempre al 
iniciar la sesión, por ejemplo format compact y los comandos necesarios para modificar el path. 
 
3.2 DEFINICIÓN DE FUNCIONES 
La primera línea de un fichero llamado name.m que define una función tiene la forma: 
function [lista de valores de retorno] = name(lista de argumentos) 
Ing. Pedro Romero y Otiniano 
Donde name es el nombre de la función. Entre corchetes y separados por comas van los valores de 
retorno, y entre paréntesis también separados por comas los argumentos. Recuérdese que los 
argumentos son los datos de la función y los valores de retorno sus resultados. 
Una diferencia importante con C es que en MATLAB los argumentos de una función no 
se modifican nunca, y los resultados se obtienen siempre a través de los valores de retorno, 
que pueden ser múltiples y matriciales. Tanto el número de argumentos como el de 
valores de retorno no son fijos, dependiendo de cómo el usuario llama a la función. 
Las variables definidas dentro de una función son variables locales, en el sentido de que son 
inaccesibles desde otras partes del programa y en el de que no interfieren con variables del mismo 
nombre definidas en otras funciones o partes del programa. Para que la función tenga acceso a 
variables que no han sido pasadas como argumentos es necesario declarar dichas variables como 
variables globales, tanto en el programa principal como en las distintas funciones que deben 
acceder a su valor. Es frecuente utilizar el convenio de usar para las variables globales nombres 
largos (más de 5 letras) y con mayúsculas. 
Por razones de eficiencia, los argumentos de una función no se copian si no son modificados por la función 
(en términos de C diríamos que se pasan por referencia). Esto tiene importantes consecuencias en términos 
de eficiencia y ahorro de tiempo de cálculo. Sin embargo, si dentro de la función se realiza modificaciones 
sobre ellos, se sacan copias y se modifican las copias (diríase que en este caso se pasan por valor). 
Dentro de la función, los valores de retorno deben ser calculados en algún momento (no hay sentencia 
return, como en C). De todas formas, no hace falta calcular siempre todos los posibles valores de retorno 
de la función, sino sólo los que el usuario espera obtener. Existen dos variables definidas de modo 
automático, llamadas nargin y nargout, que representan respectivamente el número de argumentos y el 
número de valores de retorno actuales, con los que la función ha sido llamada. Dentro de la función, 
estas variables pueden ser utilizadas como el usuario desee. 
MATLAB dispone de una nueva forma de pasar a una función un número variable de argumentos por 
medio de la variable varargin, que es un array de celdas que contienen tantos elementos como sean 
necesarios para recoger en sus elementos todos los argumentos que se hayan pasado en la llamada. No es 
necesario que varargin sea el único argumento, pero si debe ser el último, pues recoge todos los 
argumentos a partir de una determinada posición. A los elementos de un cell array se accede utilizando 
llaves {}, en lugar de paréntesis. 
De forma análoga, una función puede tener un número indeterminado de valores de retorno utilizando 
varargout, que es también un cell array que agrupa los últimos valores de retorno de la función. Puede 
haber otros valores de retorno, pero varargout debe ser el último. El cell array varargout se debe crear 
dentro de la función y hay que dar valor a sus elementos antes de salir de la función. Las variables nargin 
y nargout indican el número de argumentos y de valores de retorno con que ha sido llamada la función. 
 
3.3. HELP PARA LAS FUNCIONES DE USUARIO 
También las funciones creadas por el usuario pueden tener su help, análogo al que tienen las propias 
funciones de MATLAB. Esto se consigue de la siguiente forma: las primeras líneas de comentarios de 
cada fichero de función son muy importantes, pues permiten construir un help sobre esa función. 
En otras palabras, cuando seteclea en la ventana de comandos de MATLAB: 
» help mi_func 
El programa responde escribiendo las primeras líneas del fichero mi_func.m que comienzan por el carácter 
(%), es decir, que son comentarios. 
De estas líneas, tiene una importancia particular la primera línea de comentarios (llamada en ocasiones 
línea H1). En ella hay que intentar poner la información más relevante sobre esa función. 
La razón es que existe una función, llamada lookfor que busca una determinada palabra en cada primera 
línea de comentario de todas las funciones *.m. 
 
3.4. HELP DE DIRECTORIOS 
MATLAB permite que los usuarios creen una ayuda general para todas las funciones que están en un 
determinado directorio. Para ello se debe crear en dicho directorio un fichero llamado contents.m. Si este 
Ing. Pedro Romero y Otiniano 
fichero no existe se listas las primeras líneas de comentarios (líneas H1) de todas las funciones que haya 
en ese directorio. Para que el Help de directorios funcione correctamente hace falta que ese directorio esté 
en el search path de MATLAB o que sea el directorio actual. 
 
clear all; close all; 
N= input ('Ingrese N° de Alumnos: N= '); 
SP=0; % Suma de Promedios 
Nmax = 0; Nmin = 20; 
fprintf('\n\n N°\t\t P. Final\n'); 
for i=1:N 
PP = input ('Ingrese PP = '); 
EP = input ('Ingrese EP = '); 
EF = input ('Ingrese EF = '); 
PF = (PP+EP+2*EF)/4; 
fprintf ('\n %i\t\t %2.2f', i, PF); 
fprintf('\n'); 
if PF>Nmax 
Nmax = PF; 
NaU = i; 
end 
if PF<Nmin 
Nmin = PF; 
NaL = i; 
end 
SP = SP + PF; 
end 
PA = SP/N; 
fprintf('\n Promedio del Aula= %2.2f', PA); 
fprintf('\n Nota Máxima= %2.2f\t\t N° Orden= %2.0f', Nmax, NaU); 
fprintf('\n Nota Mínima= %2.2f\t\t N° Orden= %2.0f', Nmin, NaL); 
fprintf('\n'); 
>> PromIF 
Ingrese N° de Alumnos: N= 4 
 
 N° P. Final 
Ingrese PP = 11 
Ingrese EP = 10 
Ingrese EF = 12 
 1 11.25 
 
Ingrese PP = 9 
Ingrese EP = 10 
Ingrese EF = 11 
 2 10.25 
 
Ingrese PP = 13 
Ingrese EP = 12 
Ingrese EF = 14 
 3 13.25 
 
Ingrese PP = 10 
Ingrese EP = 9 
Ingrese EF = 12 
 4 10.75 
 
Ing. Pedro Romero y Otiniano 
 Promedio del Aula = 11.38 
 Nota Máxima= 13.25 N° Orden = 3 
 Nota Mínima= 10.25 N° Orden = 2 
 
 
Ing. Pedro Romero y Otiniano 
INTRODUCCION A MATLAB (PRACTICAS): Métodos Numéricos Avanzados 
Damián Ginestar Peiró 
4.4. Ejercicios 
1. Los problemas relacionados con la cantidad de dinero requerida para pagar una hipoteca en un periodo 
fijo de tiempo involucran una fórmula de la forma, 
, conocida como ecuación de anualidad ordinaria. En esta ecuación, A es la 
cantidad de la hipoteca, P es la cantidad de cada pago, e i es la tasa de interés por periodo para los n 
periodos de pago. 
Suponer que se necesita una hipoteca de 120.000 euros de una casa sobre un periodo de 30 años, y que la 
persona que pide el préstamo no puede hacer pagos de más de 1500 euros al mes. ¿Cuál es la tasa 
máxima de interés que esta persona puede pagar? 
5. Un objeto de masa M se deja caer verticalmente desde una altura S. Se sabe que al cabo de t segundos 
la altura del objeto es: 
 
Donde g = −9,8 m/s2 y k representa el coeficiente de rozamiento con el aire. Si M = 0,1kg, So =9,2 m y 
k = 0,15 kg s/m. Calcular con una precisión de 10−2s en qué momento el objeto estará a 2.3 m de tierra. 
6. El volumen V de un gas en función de la presión P ejercida por un pistón viene dada en la tabla 
siguiente: 
 
Calcula el trabajo necesario para disminuir V de 80 a 32.5. 
7. Se tiene que construir una hoja de techo corrugado usando una máquina que comprime una hoja plana 
de aluminio convirtiéndola en una cuya sección transversal tiene la forma de una onda senoidal. 
Supongamos que se necesita una hoja corrugada de 50 cm de longitud y que cada ondulación tiene una 
altura de un cm respecto de la línea horizontal y un periodo de 2π cm. El problema de encontrar la 
longitud de la hoja inicial viene dado por la integral: 
 . Estimar esta longitud. 
9. Sea z(t) (t en minutos) la temperatura de un objeto que está en una habitación que se mantiene a una 
temperatura de 25°C. Según la ley de enfriamiento de Newton, z verifica la siguiente ecuación 
diferencial z(t) = −0,02(z(t) − 25). 
Si al principio el objeto tenía una temperatura de 55°C, se pide: a) ¿Qué temperatura tendría el objeto 
transcurridos 50 minutos?, b) ¿Cuándo alcanza el objeto la temperatura de 46°C? 
4.2. Integración aproximada 
Para el cálculo aproximado de integrales definidas el Matlab tiene implementadas las funciones 
trapz, quad y quad8. Si queremos calcular. 
Ing. Pedro Romero y Otiniano 
Podemos escribir x= 0:pi/10:pi/2; y=sin(x); integral = trapz(x,y). 
La función trapz( ) utiliza el método de los trapecios basado en la división utilizada para definir el vector 
x. Otras posibilidades son: integral= quad(’sin’, 0, pi/2); o bien, integral = quad8(’sin’,0, pi/2). 
UNI-FIQT-AACB CICLO 2003-I 13/12/03 
6ta PRACTICA PROGRAMACION DIGITAL (MA-713) 
---------------------------------------------------------------------------------------------------------- 
1. La serie f(x) = 
!
)1......(
432
1
432
N
xxxx
x
N
N , es la representación de Mclaurin de Ln(x+1) y 
esta converge para -1 < x < 1. Hacer un programa que nos pida el valor de x y N por teclado, y calcule 
la sumatoria. Nota: N debe ser entero y positivo. 
2. Escriba un programa para calcular la siguiente serie: 
 
NNx
N
xxxx
S
2
!
......
2
!4
2
!3
2
!2!1
443322
 
 Donde N y x son datos. 
3. Elaborar un programa que permita calcular el combinatorio de dos números. Recordar que el 
combinatorio de dos números se calcula de la siguiente manera: 
 
)!(!
!
rnr
nn
r
C

 
4. Tenemos la densidad del Sodio para 4 temperaturas: 
T ( °C) 94 205 371 400 
 ( kg. / m3) 929 902 860 760 
Mediante un programa, que permita ingresar los datos de temperatura y densidad (como vectores), 
hallar las temperaturas a la cual la densidad es 875 y 800 kg./m3. 
Nota: Los programas en Matlab. 
SOLUCIONARIO: 6ta PRÁCTICA CALIFICADA 2009.II 
 
1) Escriba un programa que lea a y b, para calcular por Integración numérica mediante el método del 
Trapecio la expresión indicada, donde el intervalo [a, b] se divide en n segmentos, siendo h el ancho de 
cada segmento: h = (Xi+1 – Xi ), (i = 1…..n+1) 
∫𝑓(𝑥) =
ℎ
2
[𝑦0 + (2∑𝑦𝑖
𝑛−1
𝑖=1
) + 𝑦𝑛]
𝑎
𝑏
 
Además: h = (b–a)/n. Donde: Xo=a y Xn =b. y1 = f(a), yn+1 = f(b), yi = f(xi). 
2) Hacer un programa para determinar cuántos múltiplos de 7 con su último dígito par, hay en el 
rango desde A hasta B inclusive. (A y B son datos enteros y A≥B). 
 
3) (5 puntos) Escriba un programa que calcule S, luego de leer n: 
nn
n
S
*)1(*....*4*3*2
)1(
....
5*4*3*2
4
4*3*2
3
3*2
2
2
1


 
1) 
clear all; close all; 
f = input ('Ingrese f(x): '); 
a = input ('Ingrese el límite inferior a: '); 
Ing. Pedro Romero y Otiniano 
b = input ('Ingrese el límite superior b: '); 
n = input ('Ingrese el Número de segmentos n: '); 
h = (b – a)/n; 
n = n+1; 
y = zeros(n, 1); 
x = zeros(n, 1); 
s = 0; 
for i=1:n 
x(i) = a + h*(i-1); 
y(i) = feval(f, x(i)); 
end 
for i=2:n-1 
s = s + y(i); 
end 
p = 0.5*h*(y(1) + 2* s + y(n)); 
fprintf ('\n\n La Integral es: %5.9f\n\n', p); 
 
2) 
function mult72(A, B) 
 k=0; 
 for i= A : B 
 u=i rem 10; 
 if ((i rem 7) = 0) & ((u rem 2) = 0) % Nota: (rem= mod) es residuo entero. 
 k=k+1; 
 end 
 end 
 mult72=k; 
 
4) 
clear all; 
close all; 
n = input ('Ingrese el N° de Elementos (N)'); 
S=0; 
den=1; 
for i =1:(n-1) 
 k=i+1; 
 num = i; 
 den = den.*k; 
 S = S + (num./den); 
end 
disp (S); 
……. 
Ing. Pedro Romero y Otiniano 
UNI-FIQT-AACB 
CICLO 2003-I 
13/12/03 
6ta PRACTICA PROGRAMACION DIGITAL (MA-713) 
----------------------------------------------------------------------------------------------------------INDICACIONES: Sin libros, copias ni apuntes. Duración: 90 minutos. 
EL SOLO INTENTO DE PLAGIO ANULA AUTOMATICAMENTE LA PRUEBA. 
Mantenga orden y claridad en el desarrollo de sus preguntas. Está PROHIBIDO el préstamo de 
calculadoras y apague su teléfono celular. 
---------------------------------------------------------------------------------------------------------- 
 
2. La serie f(x) = 
!
)1......(
432
1
432
N
xxxx
x
N
N , es la representación de Mclaurin de Ln(x+1) y 
esta converge para -1 < x < 1. Hacer un programa que nos pida el valor de x y N por teclado, y calcule 
la sumatoria. 
Nota: N debe ser entero y positivo. 
 
2. Escriba un programa para calcular la siguiente serie: 
 
 
NNx
N
xxxx
S
2
!
......
2
!4
2
!3
2
!2!1
443322
 
 
 Donde N y x son datos. 
 
3. Elaborar un programa que permita calcular el combinatorio de dos números. Recordar que el 
combinatorio de dos números se calcula de la siguiente manera: 
 
)!(!
!
rnr
nn
r
C

 
 
4. Tenemos la densidad del Sodio para 4 temperaturas: 
T ( °C) 94 205 371 400 
 ( kg. / m3) 929 902 860 760 
 
Mediante un programa, que permita ingresar los datos de temperatura y densidad (como vectores), hallar 
las temperaturas a la cual la densidad es 875 y 800 kg./m3. 
Nota: Los programas en Matlab. 
….. 
Ing. Pedro Romero y Otiniano 
PROBLEMAS RESUELTOS DE WHILE 
PROBLEMA N°1: 
Dado el siguiente vector, hacer un programa que indique en que posiciones se encuentran los 
números negativos. V=[1, 2, 25, -12, -8, 32, -4, 88, -7,-21 ] 
SOLUCION: 
% Programa que imprime las posiciones con números negativos en un vector 
clc; 
V = [1, 2, 25, -12, -8, 32, -4, 88, -7,-21]; 
i=1; 
while (i<=length(V)) 
if (V(i)<0) 
fprintf ('En la posición %d hay un número negativo \n: ', i ); 
end 
i = i + 1; 
end 
PROBLEMA N°2: Realizar un programa que calcule el Factorial de un número N. 
SOLUCION: 
N=input ('dame un numero para multiplicar = '); 
k=1; A=1; % Dar un valor para que realice la multiplicación en forma de bucle 
while k<=N 
A=A*k; 
disp (A) 
k=k+1; 
end 
disp ('Fin de programa'); 
 
PROBLEMA N°3: Hacer un programa que recoja números del usuario hasta que se introduzca un 0 y 
después devuelva la media de los números introducidos. 
SOLUCION: 
c=0; 
n = input ('Introduce un numero='); 
S = 0; 
while (n~=0) 
S = S + n; 
c = c+1; 
n=input('Intoduce un numero='); 
end 
med = S/c; 
fprintf('La media vale %f', med); 
 
PROBLEMA N°4: Hacer un programa que pida un número hasta que este número sea mayor que 0 
indicando con un mensaje que el número introducido es mayor que 0. Caso contrario que pida 
reintroducir otro valor. 
SOLUCION: 
n=input('Dame un valor: '); 
if n > 0 
 disp ('El numero introducido es mayor que cero') 
else 
 while n <= 0 
 n = input ('Reintroduce el valor correcto: '); 
 end 
 disp ('El numero introducido es mayor que cero') 
Ing. Pedro Romero y Otiniano 
end 
disp('Fin del programa') 
 
PROBLEMA N°5: 
Realizar un programa que pida un número y que combinado con otros dos números menores o iguales a 
este número, te dé el valor del número que se pidió. 
SOLUCION: 
N=input ('Dame un valor='); 
M=0; 
while M<=N 
 S=0; 
 while S<=N 
 if N==M+S; 
 fprintf ('Combinacion: %d=%d+%d\n', M+S, M, S); 
 %disp(M) 
 %disp(S) 
 end 
 S=S+1; 
 end 
 M=M+1; 
end 
disp ('Fin de programa') 
 
PROBLEMA N°6: 
Realizar un programa que Sume una serie de Números Ingresados por el usuario. Dicha suma se 
realizara cuando el usuario introduzca el número 0. 
SOLUCION: 
% Programa que Suma Números mientras no sean 0 
n=1; 
S=0; 
while (n ~= 0) 
n = input ('Ingrese un número, para terminar digite 0:'); 
S = S + n; 
end 
disp('la suma de los números Ingresados es :') 
disp(S); 
….. 
Ing. Pedro Romero y Otiniano 
EJERCICIOS DEL COMANDO: WHILE 
1. Escribir un programa que descomponga un numero N en todos sus factores correspondientes. 
Ej.: 24= 2*2*2*3 
clear all; close all; 
n = input('Ingrese Numero = '); 
d=2; 
while n>1 
 if rem(n, d)==0 
 fprintf('%d', d); 
 n=n/d; 
 else 
 d=d+1; 
 end 
end 
2. Ingresar 2 números y calcular su mínimo común múltiplo: 
clc; clear all; 
n1 = input('Primer numero='); 
n2 = input('Segundo numero='); 
d=2; 
mcm = 1; 
while n1~=1 | n2~=1 
 if rem(n1,d)==0 | rem(n2,d)==0 
 mcm= mcm*d; 
 if rem (n1, d)==0 
 n1=n1/d; 
 end 
 if rem(n2, d)==0 
 n2=n2/d; 
 end 
 else 
 d=d+1; 
 end 
 
3. Ingresar un número y reportar el número de dígitos que tiene 
clc; 
n=input('Ingrese Numero='); 
x=n; cd=0; 
while x>0 
 dig= rem(x,10); 
 cd= cd+1; 
 x= fix(x/10); 
end 
fprintf ('El numero %d tiene %d digitos', n, cd); 
 
4. Ingresar un número y reportarlo al revés 
clc; 
n = input('Ingrese número = '); 
disp ('El numero al revés es = '); 
while n > 0 
 dig = rem (n, 10); 
 fprintf('%d', dig); 
 n = fix(n/10); 
end 
Ing. Pedro Romero y Otiniano 
5. Ingresar un número y reportar si es capicúa 
clc; 
n=input('Ingrese número='); 
x=n; 
inv=0; 
while x>0 
 dig=rem(x,10); 
 inv=inv*10+dig; 
 x=fix(x/10); 
end 
if n==inv 
 disp('El número Capicúa es'); 
else 
 disp('El número no es Capicúa'); 
end 
 
6. Ingresar un número en base 10 y convertirlo a base 2 
clc; 
n=input('Ingrese Numero='); 
x=n; 
b2=0;p=1; 
while x>0 
 r=rem(x,2); 
 b2=b2+r*p; 
 p=p*10; 
 x=fix(x/2); 
end 
fprintf('El Numero en base 2 es= %d',b2); 
 
7. Ingresar un número en base 2 a base 10 
clc; 
b2=input('Ingrese numero en base 2='); 
x=b2; 
n=0; p=1; 
while x>0 
 r=rem(x,10); 
 n=n+r*p; 
 p=p*2; 
 x=fix(x/10); 
end 
fprintf ('el numero en base 10 es= %d', n); 
 
8. Dado el siguiente vector, hacer un programa que indique en qué posición se encuentran los 
números negativos. 
clc; 
V=[1, 2, 25, -12, -8, 32, -4, 88, -7,-21 ]; 
i=1; 
while (i<=length(V)) 
if (V(i) <0) 
fprintf ('En la posición %d hay un número negativo \n: ', i ); 
end 
i=i+1; 
end 
 
Ing. Pedro Romero y Otiniano 
9. Calcula la suma de las inversas de los factoriales hasta que alguno sea menor a 10-6 
clc; format long; 
i=1; 
t = 1/factorial(i); a = 0; 
while ( t >= 10^-6) 
 a=a+t; 
 i=i+1; 
 t=1/factorial(i) 
end; 
disp('Resultado='); 
disp(a); 
format; 
 
fprintf 
 
Pag. 108 
 
Ing. Pedro Romero y Otiniano 
 
 
[Applied Numerical Methods Using Matlab (Yang 2005 Wiley).pdf] 
>> nm122 % [43: (pag. 32)] 
clear 
f1 = inline (’sqrt(x)*(sqrt(x + 1) - sqrt(x))’, ’x’); 
f2 = inline (’sqrt(x)./(sqrt(x + 1) + sqrt(x))’, ’x’); 
x = 1; format long e; 
for k = 1:15 
fprintf (’At x = %15.0f, f1(x) = %20.18f, f2(x) = %20.18f\n’, x, f1(x), f2(x)); 
x = 10*x; 
end 
sx1 = sqrt(x+1); sx = sqrt(x); d = sx1 - sx; s = sx1 + sx; 
fprintf (’sqrt(x+1) = %25.13f, sqrt(x) = %25.13f ’, sx1, sx); 
fprintf (’ diff = %25.23f, sum = %25.23f \n’, d, s); 
 
 
>> 
 
Ing. Pedro Romero y Otiniano 
La sintaxis de MATLAB asemeja a la de FORTRAN. Para tener una idea de las similitudes, 
comparemos los códigos escritos en los dos idiomas para la solución de ecuaciones simultáneas Ax = b 
por la Eliminación de Gauss. Aquí está la subrutina en FORTRAN 90: 
Subroutine Gauss(A, b, n) 
use prec_mod 
implicit none 
real(DP), dimension(:, :), intent(in out) : : A 
real(DP), dimension(:), intent(in out) : : b 
integer, intent(in) : : n 
real(DP) : : lambda 
integer : : i, k 
! --------------Elimination phase-------------- 
do k = 1,n-1 
do i = k+1,n 
if(A(i, k) /= 0) then 
lambda = A(i, k)/A(k, k) 
A(i, k+1:n) = A(i, k+1:n) - lambda*A(k, k+1:n) 
b(i) = b(i) - lambda*b(k) 
end if 
end do 
end do 
! ------------Back substitution phase----------do k = n,1,-1 
b(k) = (b(k) - sum(A(k, k+1:n)*b(k+1:n)))/A(k, k) 
end do 
return 
end Subroutine Gauss 
El uso comunicado prec-mod indica al compilador para cargar el módulo prec-mod (no mostrado 
aquí), que define la longitud de la palabra DP para los números de punto flotante. También tenga 
en cuenta el uso de las secciones de la matriz, como una (k, k + 1: n), una característica que no 
estaba disponible en las versiones anteriores de FORTRAN. 
La función de MATLAB equivalente es (MATLAB no tiene subrutinas): 
function b = gauss(A, b) 
n = length(b); 
% -----------------Elimination phase------------- 
for k = 1:n-1 
for i = k+1:n 
if A(i, k) ~= 0 
lambda = A(i, k)/A(k, k); 
A(i, k+1:n) = A(i, k+1:n) - lambda*A(k, k+1:n); 
b(i)= b(i) - lambda*b(k); 
end 
end 
end 
%--------------Back substitution phase----------- 
for k = n:-1:1 
b(k) = (b(k) - A(k, k+1:n)*b(k+1:n))/A(k, k); 
end 
Ecuaciones simultáneas también pueden ser resueltas en MATLAB con el comando sencillo A \ b 
(ver más abajo). 
Ing. Pedro Romero y Otiniano 
MATLAB puede ser operado en el modo interactivo a través de su ventana de comandos, 
donde cada comando se ejecuta inmediatamente después de su entrada. En este modo MATLAB 
actúa como una calculadora electrónica. He aquí un ejemplo de una sesión interactiva para la 
solución de ecuaciones simultáneas: 
>> A = [2 1 0; -1 2 2; 0 1 4]; % Input 3 x 3 matrix 
>> b = [1; 2; 3]; % Input column vector 
>> soln = A\b % Solve A*x = b by left division 
soln = 
0.2500 
0.5000 
0.6250 
El símbolo >> es rápido MATLAB para la entrada. El signo de porcentaje (%) marca el a partir de 
un comentario. Un punto y coma (;), tiene dos funciones: suprime la impresión de los resultados 
intermedios y separa las filas de una matriz. Con una terminación punto y coma, se mostrará el 
resultado de un comando. Por ejemplo, la omisión del último punto y coma en la línea que define la 
matriz A se traduciría en: 
>> A = [2 1 0; -1 2 2; 0 1 4] 
A = 
2 1 0 
-1 2 2 
0 1 4 
Funciones y programas se pueden crear con el editor/ depurador de MATLAB y guardado con la 
extensión .m (MATLAB los llama M-files). El nombre de archivo de un salvado función debe ser 
idéntico al nombre de la función. Por ejemplo, si la función de para la eliminación de Gauss 
enumerados anteriormente se guarda como gauss.m, se le puede llamar como cualquier Función de 
MATLAB: 
>> A = [2 1 0; -1 2 2; 0 1 4]; 
>> b = [1; 2; 3]; 
>> soln = gauss(A, b) 
soln = 
0.2500 
0.5000 
0.6250 
TIPOS DE DATOS Y VARIABLES 
Tipos de datos: 
Los tipos más comúnmente utilizados MATLAB datos, o clases, son dobles, char y lógico, todos los 
cuales son considerados por MATLAB como matrices. Objetos numéricos pertenecer a la clase 
doble, que representa las matrices de doble precisión; un escalar es tratada como una matriz 1 × 1. 
Los elementos de un array tipo char son cadenas (secuencias de caracteres), mientras que un 
elemento de tipo de matriz lógica puede contener solamente 1 (verdadero) o 0 (False). 
Otra clase importante es mango función, que es única para MATLAB. Ello contiene la información 
necesaria para encontrar y ejecutar una función. El nombre de una función mango consiste en el 
carácter @, seguido por el nombre de la función; por ejemplo, Sin. Manijas de función se utilizan 
como argumentos de entrada de llamadas a funciones. Por ejemplo, supongamos que tenemos una 
función parcela MATLAB (func, x1, x2) que traza ninguna especifica el usuario función func desde 
x1 a x2. La llamada a la función para trazar sen x de 0 a π habría plot (@ pecado, 0, pi). 
Ing. Pedro Romero y Otiniano 
Hay otros tipos de datos, pero que rara vez se encuentran con el min este texto. Adicional las clases 
pueden ser definidas por el usuario. La clase de un objeto se puede mostrar con el comando de 
clase. Por ejemplo, 
>> x = 1 + 3i % Complex number 
>> class(x) 
ans = double

Otros materiales

Materiales relacionados

189 pag.
Prácticas_de_Cálculo_Numérico_con

UNIASSELVI

User badge image

Junio Dourado

64 pag.
IntroduccionaMatlab

User badge image

Estudiando Ingenieria