Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Tabla en matlab, GNU OCTAVE, Apuntes de Métodos Matemáticos

Ayuda para cursos realizados en matlab

Tipo: Apuntes

2019/2020
En oferta
30 Puntos
Discount

Oferta a tiempo limitado


Subido el 17/06/2020

armando-banquitos
armando-banquitos 🇵🇪

5

(1)

2 documentos

1 / 12

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
2Programación con MATLAB
Los condicionales y los bucles o repeticiones son la base de la programación estructurada. Sin ellas,
las instrucciones de un programa sólo podrían ejecutarse en el orden en que están escritas (orden
secuencial). Las estructuras de control permiten modificar este orden y, en consecuencia, desarrollar
estrategias y algoritmos para resolver los problemas.
Los condicionales permiten que se ejecuten conjuntos distintos de instrucciones, en función de que
se verifique o no determinada condición.
Los bucles permiten que se ejecute repetidamente un conjunto de instrucciones, ya sea un número
pre-determinado de veces, o bien mientras que se verifique una determinada condición.
2.1 Estructuras condicionales: if
Son los mecanismos de programación que permiten “romper” el flujo secuencial en un programa: es
decir, permiten hacer una tarea si se verifica una determinada condición y otra distinta si no se
verifica.
Evaluar si se verifica o no una condición se traduce, en programación, en averiguar si una determinada
expresión con valor lógico da como resultado verdadero ofalso
Las estructuras condicionales básicas son las representadas en los diagramas de flujo siguientes:
!"#$!%&'() &(%*$+,,&-(!%)
*$+!)
./0%!)
Figura 2.1: Estructura condicional simple: Si
expresión toma el valor lógico true, se ejecu-
tan las instrucciones del bloque instrucciones
y, después, el programa se continúa ejecutando
por la instrucción siguiente. Si, por el contrario,
la expresión toma el valor lógico false, no se
ejecutan las instrucciones, y el programa con-
tinúa directamente por la instrucción siguiente.
!"#$!%&'() &(%*$+,,&-(!%./)
*$+!)012%!)
&(%*$+,,&-(!%.3)
Figura 2.2: Estructura condicional doble: Si
expresión toma el valor lógico true, se ejecutan
las instrucciones del bloque instrucciones 1.
Si, por el contrario, la expresión toma el
valor lógico false, se ejecuta el bloque de
instrucciones 2. En ambos casos, el programa
continúa ejecutándose por la instrucción siguien-
te.
En casi todos los lenguajes de programación, este tipo de estructuras se implementan mediante una ins-
trucción (o super-instrucción) denominada if, cuya sintaxis puede variar ligeramente de unos lenguajes
a otros. En MATLAB, concretamente, su forma es la siguiente:
25
pf3
pf4
pf5
pf8
pf9
pfa
Discount

En oferta

Vista previa parcial del texto

¡Descarga Tabla en matlab, GNU OCTAVE y más Apuntes en PDF de Métodos Matemáticos solo en Docsity!

Programación con MATLAB

Los condicionales y los bucles o repeticiones son la base de la programación estructurada. Sin ellas, las instrucciones de un programa sólo podrían ejecutarse en el orden en que están escritas (orden secuencial). Las estructuras de control permiten modificar este orden y, en consecuencia, desarrollar estrategias y algoritmos para resolver los problemas.

Los condicionales permiten que se ejecuten conjuntos distintos de instrucciones, en función de que se verifique o no determinada condición.

Los bucles permiten que se ejecute repetidamente un conjunto de instrucciones, ya sea un número pre-determinado de veces, o bien mientras que se verifique una determinada condición.

2.1 Estructuras condicionales: if

Son los mecanismos de programación que permiten “romper” el flujo secuencial en un programa: es decir, permiten hacer una tarea si se verifica una determinada condición y otra distinta si no se verifica.

Evaluar si se verifica o no una condición se traduce, en programación, en averiguar si una determinada expresión con valor lógico da como resultado verdadero o falso

Las estructuras condicionales básicas son las representadas en los diagramas de flujo siguientes:

!"#$!%&'() &(%*$+,,&-(!%) *$+!)

./0%!)

Figura 2.1: Estructura condicional simple: Si expresión toma el valor lógico true, se ejecu- tan las instrucciones del bloque instrucciones y, después, el programa se continúa ejecutando por la instrucción siguiente. Si, por el contrario, la expresión toma el valor lógico false, no se ejecutan las instrucciones, y el programa con- tinúa directamente por la instrucción siguiente.

!"#$!%&'() &(%*$+,,&-(!%./) 012%!) $+!) &(%$+,,&-(!%.3)

Figura 2.2: Estructura condicional doble: Si expresión toma el valor lógico true, se ejecutan las instrucciones del bloque instrucciones 1. Si, por el contrario, la expresión toma el valor lógico false, se ejecuta el bloque de instrucciones 2. En ambos casos, el programa continúa ejecutándose por la instrucción siguien- te.

En casi todos los lenguajes de programación, este tipo de estructuras se implementan mediante una ins- trucción (o super-instrucción) denominada if, cuya sintaxis puede variar ligeramente de unos lenguajes a otros. En MATLAB, concretamente, su forma es la siguiente:

25

instruccion-anterior if expresion bloque-de-instrucciones end instruccion-siguiente

Esta super-instrucción tiene el funciona- miento siguiente: Se evalúa expresion. Si el resultado es true, se ejecuta el bloque-de-instrucciones y, cuando se termi- na, se continúa por instruccion-siguiente. Si el resultado no es true, se va directamente a instruccion-siguiente.

instruccion-anterior if expresion bloque-de-instrucciones- else bloque-de-instrucciones- end instruccion-siguiente

Su funcionamiento es el siguiente: Se evalúa expresion. Si el resultado es true, se ejecuta el bloque-de-instrucciones-1 y, cuando se ter- mina, se continúa por instruccion-siguiente. Si el resultado no es true, se ejecuta el bloque-de-instrucciones-2 y cuando se ter- mina se va a la instruccion-siguiente.

Ejemplo 2.1 (Uso de un condicional simple) Escribir una M-función que, dado x ∈ R, devuelva el valor en x de la función definida a trozos

f (x) =

x + 1 si x < − 1 , 1 − x^2 si x ≥ − 1.

function [fx] = mifun(x) % % v = mifun(x) devuelve el valor en x de la función % f(x) = x+1 si x < - % f(x) = 1-x^2 si no % fx = x + 1; if x > - fx = 1 - x^2; end

Ejemplo 2.2 (Uso de un condicional doble) Escribir una M-función que, dados dos números x, y ∈ R, devuelva un vector cuyas componentes sean los dos números ordenados en orden ascendente.

function [v] = Ordena(x, y) % % v = Ordena(x, y) es un vector que contiene los dos % numeros x e y ordenados en orden creciente % if x <= y v = [x, y]; else v = [y, x]; end

Se pueden construir estructuras condicionales más complejas (con más casos). En MATLAB, estas estructuras se implementan mediante la versión más completa de la instrucción if:

expresión-1 true instrucciones- false expresión-2 true^ instrucciones-

instrucciones-

false

instruccion-anterior if expresion- bloque-de-instrucciones- elseif expresion- bloque-de-instrucciones- else bloque-de-instrucciones- end instruccion-siguiente

Esta estructura tiene el funcionamiento siguiente: Se evalúa expresion-1. Si el resultado es true, se ejecuta el bloque-de-instrucciones-1 y, cuando se termina, se continúa por instruccion-siguiente. Si el resultado de expresion-1 no es true, se evalúa expresion-2. Si el resultado es true, se ejecuta el bloque-de-instrucciones-2 y, cuando se termina, se continúa por instruccion-siguiente. Si el resultado de expresion-2 no es true, se ejecuta el bloque-de-instrucciones-3 y luego se va a instruccion-siguiente.

Es muy importante darse cuenta de que, en cualquier caso, se ejecutará sólo uno de los bloques de instrucciones. La cláusula else (junto con su correspondiente bloque-de-instrucciones) puede no existir. En este caso es posible que no se ejecute ninguno de los bloques de instrucciones.

2.2 Estructuras de repetición o bucles: while

Este mecanismo de programación permite repetir un grupo de instrucciones mientras que se verifique una cierta condición. Su diagrama de flujo y su sintaxis en MATLAB son los siguientes:

false expresión

instrucciones

true

instruccion-anterior while expresion bloque-de-instrucciones end instruccion-siguiente

Esta estructura tiene el funcionamiento siguiente: Al comienzo, se evalúa expresion. Si el resultado no es true, se va directamente a la instruccion-siguiente. En este caso, no se ejecuta el bloque-de-instrucciones. Si, por el contrario, el resultado de expresion es true, se ejecuta el bloque-de-instrucciones. Cuando se termina, se vuelve a evalúar la expresion y se vuelve a decidir. Naturalmente, este mecanismo precisa que, dentro del bloque-de-instrucciones se modifique, en alguna de las repeticiones, el resultado de evaluar expresion. En caso contrario, el programa entraria

en un bucle infinito. Llegado este caso, se puede detener el proceso pulsando la combinación de teclas CTRL + C.

Ejemplo 2.4 (Uso de un while) Escribir una M-función que, dado un número natural n, calcule y devuelva la suma de todos los números naturales entre 1 y n.

function [suma] = SumaNat(n) % % suma = SumaNat(n) es la suma de los n primeros números naturales % suma = 0; k = 1; while k <= n suma = suma + k; k = k + 1; end

false k <= n

suma = suma + k

true

Entrada: n Salida: suma

suma = 0 k = 1

k = k + 1

fin

Observación. La orden de MATLAB sum(1:n) tiene el mismo efecto que SumaNat(n).

Ejercicio. Partiendo de la M-función SumaNat del ejemplo anterior, escribe una M-función que calcule y devuelva la suma de todos los números naturales impares entre 1 y n.

false k <= n

instrucciones

true

k = 1

k = k + 1

instruccion-anterior for k = 1 : n bloque-de-instrucciones end instruccion-siguiente

Estructura de repetición for: Para cada valor de la variable k desde 1 hasta n, se ejecuta una vez el bloque-de-instrucciones. Cuando se termina, el programa se continúa ejecutando por la instrucción-siguiente. Se observa que, con esta instrucción, no hay que ocuparse ni de inicializar ni de incrementar dentro del bucle la variable-índice, k. Basta con indicar, junto a la cláusula for, el conjunto de valores que debe tomar. Puesto que es la propia instrucción for la que gestiona la variable-índice k, está prohibido modificar su valor dentro del bloque de instrucciones.

El conjunto de valores que debe tomar la variable-índice k tiene que ser de números enteros, pero no tiene que ser necesariamente un conjunto de números consecutivos. Son válidos, por ejemplo, los conjuntos siguientes:

for k = 0 : 2 : 20 % números pares de 0 a 20 for ind = 30 : -5 : 0 % números 30, 25, 20, 15, 10, 5, 0 for m = [2, 5, 4, 1, 7, 20] % los números especificados

Observación. Siempre que en un bucle sea posible determinar a priori el número de veces que se va a repetir el bloque de instrucciones, es preferible utilizar la instrucción for, ya que la instrucción while es más lenta.

Ejemplo 2.6 (Uso de for) Escribir una M-función que, dado un vector v, calcule el valor máximo entre todos sus componentes.

function [vmax] = Maximo(v) % % Maximo(v) es el máximo de las componentes del vector v % vmax = v(1); for k = 2:length(v) if v(k) > vmax vmax = v(k); end end

Ejemplo 2.7 (Uso de for) Observación: La orden error(’mensaje’) imprime mensaje en la pantalla y detiene la ejecución del programa.

Escribir una M-función que calcule la traza de una matriz.

function [y] = Traza(A) % % Traza(A) es la suma de los elementos diagonales de la % matriz cuadrada A % [n,m] = size(A); if n ~= m error('La matriz no es cuadrada') end y = 0; for k = 1:n y = y + A(k,k); end

2.4 Ruptura de bucles de repetición: break y continue

En ocasiones es necesario interrumpir la ejecución de un bucle de repetición en algún punto interno del bloque de instrucciones que se repiten. Lógicamente, ello dependerá de que se verifique o no alguna condición. Esta interrupción puede hacerse de dos formas:

Abandonando el bucle de repetición definitivamente.

Abandonando la iteración en curso, pero comenzando la siguiente.

Las órdenes respectivas en MATLAB son (tanto en un bucle while como en un bucle for):

break continue

El funcionamiento de estas órdenes queda reflejado en los diagramas de flujo correspondientes (Figuras 2.3 y 2.4).

2.6 Operaciones de lectura y escritura

2.6.1 Instrucción básica de lectura: input

La instrucción input permite almacenar en una variable un dato que se introduce a través del teclado. La orden

var = input('Mensaje')

imprime Mensaje en la pantalla y se queda esperando hasta que el usuario teclea algo en el teclado, terminado por la tecla return. Lo que se teclea puede ser cualquier expresión que use constantes y/o variables existentes en el Workspace. El resultado de esta expresión se almacenará en la variable var. Si se pulsa la tecla return sin teclear nada se obtendrá una matriz vacía: [ ].

2.6.2 Instrucción básica de impresión en pantalla: disp

La instrucción disp permite imprimir en la pantalla el valor de una (matriz) constante o variable, sin imprimir el nombre de la variable o ans y sin dejar líneas en blanco. Su utilidad es muy limitada.

disp(algo)

Ejemplos 2.8 (Uso de disp) Observaciones: (a) La orden date devuelve una cadena de caracteres con la fecha actual. (b) La orden num2str(num) devuelve el dato numérico num como una cadena de caracteres.

disp(pi)

v = [1, 2, 3, pi]; disp(v) 1.0000 2.0000 3.0000 3.

disp('El metodo no converge') El metodo no converge

disp(['Hoy es ', date]) Hoy es 18-Feb-

x = pi; disp(['El valor de x es: ',num2str(x)]) El valor de x es: 3.

2.6.3 Instrucción de impresión en pantalla con formato: fprintf

Esta orden permite controlar la forma en que se imprimen los datos. Su sintaxis para imprimir en la pantalla es

fprintf( formato, lista_de_datos )

donde:

lista_de_datos son los datos a imprimir. Pueden ser constantes y/o variables, separados por comas.

formato es una cadena de caracteres que describe la forma en que se deben imprimir los datos. Puede contener combibaciones de los siguientes elementos: Códigos de conversión: formados por el símbolo %, una letra (como f, e, i, s) y eventual- mente unos números para indicar el número de espacios que ocupará el dato a imprimir. Texto literal a imprimir Caracteres de escape, como \n.

Normalmente el formato es una combinación de texto literal y códigos para escribir datos numéricos, que se van aplicando a los datos de la lista en el orden en que aparecen.

En los ejemplos siguientes se presentan algunos casos simples de utilización de esta instrucción. Para una comprensión más amplia se debe consultar la ayuda y documentación de MATLAB.

Ejemplos 2.9 (Uso de fprintf )

long = 32. fprintf('La longitud es de %12.6f metros \n',long) La longitud es de 32.067000 metros En este ejemplo, el formato se compone de:

  • el texto literal ’La longitud es de ’ (incluye los espacios en blanco),
  • el código %12.6f que indica que se escriba un número (en este caso el valor de la variable long) ocupando un total de 12 espacios, de los cuales 6 son para las cifras decimales,
  • el texto literal ’ metros ’ (también incluyendo los blancos),
  • el carácter de escape \n que provoca un salto de línea.

x = sin(pi/5); y = cos(pi/5); fprintf('Las coordenadas del punto son x= %10.6f e y=%7.3f \n', x, y) Las coordenadas del punto son x= 0.587785 e y= 0.

Observamos que el primer código %10.6f se aplica al primer dato a imprimir, x, y el segundo código %7.3f al segundo, y.

k = 23; err = 0.00000314; fprintf('En la iteracion k=%3i el error es %15.7e \n', k, err) En la iteracion k= 23 el error es 3.1400000e-

  • el código %3i indica que se escriba un número entero ocupando un total de 3 espacios,
  • el código %15.7e indica que se escriba un número en formato exponencial ocupando un total de 15 espacios, de los cuales 7 son para los dígitos a la derecha del punto decimal.