Programación en Matlab/Octave

Na entrada anterior vimos como crear funcións e scripts en Matlab/Octave. Normalmente, conteñen máis dunha liña de fluxo. As estructuras de control de fluxo poden ser:

  • repetitivas, permiten a repetición de comandos: for e while;
  • alternativas, permiten decidir según unha condición: if e switch.

Bucle for

O bucle for permite executar unha serie de comandos para tódolos valores posible dunha variable:

for i=v
….comandos que dependen de i
end

Aquí i é a variable que toma os valores indicados no array v. Recoméndase “indentar” os comandos para facilitar a lectura. Os bucles poden anidarse.
Vexamos como exemplo o cálculo de n!:

fac = 1;
for i=2:n
... fac = fac*i;
end

Cando sexa posible, recoméndase usar operacións vectoriais na vez de bucles. Por exemplo, dado un array x de n compoñentes, o cálculo yi=xi+1-xi, i = 1, …, n-1, pódese facer co comando:

y = x(2:n)-x(1:n-1)

Bucle while

O bucle while permite executar unha serie de comandos mentras unha condición sexa válida:

while condición
….comandos
end

Aquí condición é unha relación lóxica. Vexamos, como exemplo, o cálculo de \displaystyle \sum_{n=1}^{\infty}\frac 1{n^4}:

n = 1; sum = 0;
...while 1/n^4 > eps
...sum = sum + 1/n^4;
...n = n+1;
end

Estrutura if

Estas estruturas permiten decidir en función dunha ou varias condicións.

if condición_1
….comandos_1
elseif condición_2
….comandos_2

else
….comandos_n
end

Se condición_1 é certa, execútanse comandos_1; se non, e condición_2 é certa,  execútanse comandos_2. Se ningunha condición é cierta, execútanse comandos_n. Os bloques elseif e else son opcionais. Vexamos como exemplo a definición da función a cachos:

\displaystyle f(x) = \begin{cases} x-1, & x\leq -2\\ 1-x^2, & -2<x<0\\ \displaystyle -\frac{1}{x+1}, & x\geq 0\end{cases}

function y=f(x)
if x<=-2
...y=x-1;
elseif x<0
...y=1-x^2;
else
...y=-1/(x+1);
end

Un exemplo máis elaborado preséntase cando queremos que unha función a cachos admita argumentos vectoriais. Nese é necesario usar un bucle (non chega con usar operaciones elementais, xa que if non é elemental:

function y=f(x)
for i=1:length(x)
...if x(i)<=-2
......y(i)=x(i)-1;
...elseif x(i)<0
......y(i)=1-x(i)^2;
...else
......y(i)=-1/(x(i)+1);
...end
end

Deste xeito, a gráfica de f agora pode obterse con

>> x=-3:0.1:3; plot(x,f(x))

Outros comandos

O comando break, interrompe a execución do bucle máis interno. Véxase, por exemplo, a busca da posicion do derradeiro elemento negativo do array x:

for i=length(x):-1:1
...if x(i)<0
......break
...end
end
disp(['A posición buscada é ' num2str(i)])

O comando return, interrompe a execución dunha función e devolve o control a  quen a teña chamado (outra función ou o propio Matlab/Octave):

if x<=0
...disp('log(x) non é real!')
...return
end

O comado error interrompe completamente a execución do programa:

if x<=0
...error('Error fatal: log(x) non é real!')
end

O comando input permite introducir datos por teclado:

>> x=input('Introduza un número: ')

Na entrada seguinte veremos como depurar programa es Octave.

Exercicios

  1. Calcula a suma das compoñentes dun array; compárao co resultado de sum.
  2. Calcula ex como a suma infinita \sum_{n=0}^{\infty}\frac {x^n}{n!}.
  3. Constrúe unha función en Matlab/Octave que devolva o valor def(x)=\begin{cases}\displaystyle 2\text{sen}^2(2x), & x\leq 0\\ \displaystyle 1-\text{e}^{-x}, & x>0\end{cases}
    Debuxa a súa gráfica.
  4. Escribe unha función que solicite ao usuario, nun bucle, números por teclado; se o número é positivo, debe escribir o seu logaritmo; se é negativo, debe sair do bucle e informar de que non pode calcular o logaritmo.
Advertisements
Esta entrada foi publicada en Matlab/Octave. Ligazón permanente.

Deixar unha resposta

introduce os teu datos ou preme nunha das iconas:

Logotipo de WordPress.com

Estás a comentar desde a túa conta de WordPress.com. Sair / Cambiar )

Twitter picture

Estás a comentar desde a túa conta de Twitter. Sair / Cambiar )

Facebook photo

Estás a comentar desde a túa conta de Facebook. Sair / Cambiar )

Google+ photo

Estás a comentar desde a túa conta de Google+. Sair / Cambiar )

Conectando a %s