Funcións en Matlab/Octave

O xeito máis sinxelo de introducir as nosas funcións en Matlab e Octave é mediante as funcións anónimas:
>> f = @(x) x.^2.*sin(x) %función dunha variable
>> h = @(x,y) x.^2 + y.^2 %función de dúas variables

As funcións anónimas deben escribirse nunha sóa sentencia e desaparecen ao pechar a sesión. Para evitar calquera destas desvantaxes, podemos definir un ficheiro función. A primeira liña dun ficheiro función é do tipo:
function [y1, y2,...] = nome_funcion(x1, x2,...)

onde

  • o nome nome_funcion debe coincidir co nome do ficheiro;
  • as variables de entrada x1, x2,… pásanse por copia (logo, un cambio no seu valor só é coñecido dentro da función);
  • as variables de saída y1, y2,… son as únicas que se envían ao espazo de traballo de Matlab/Octave (logo, para exteriorizar un cambio nunha variable de entrada, esta debe ser tamén de saída)

Para poder ser executado na ventá de comandos, a carpeta do ficheiro función debe,

  • ou ben, escollerse como carpeta por defecto,
  • ou ben, engadirse á ruta de busca con addpath.

Debemos evitar ter na carpeta por defecto unha función anónima e un ficheiro función co mesmo nome.

Como exemplo, vexamos unha función que, dados os coeficientes dunha ecuación de segundo grao, devolve como vector as súas raíces:
function x=fgrao2(a,b,c)
D=b^2-4*a*c;
x(1)=(-b+sqrt(D))/(2*a);
x(2)=(-b-sqrt(D))/(2*a);

Nas funcións é común rematar cada sentencia con “;” para evitar ver os resultados intermedios. Agora, para executar esta función, basta con gardala nun ficheiro de nome fgrao2.m na carpeta de traballo e, escribir na ventá de comandos:
>> r = fgrado2(3,5,2) %raíces de 3x²+5x+2

Funcións como argumento

Para usar un ficheiro función como argumento doutra función, hai que poñer “@” antes do nome. Consideremos a función que calcula a integral definida de f no intervalo [a,b] pola regra dos trapecios:
function y=int_def(f,a,b)
t=linspace(a,b,100);
y = trapz(t, f(t));

Para integrar o seno, hai que ter en conta que sin é un fichero función. Logo, debemos escribir na ventá de comandos:
>> int_def(@sin, 0, 1)

Se tivesemos definido unha función anónima, non sería necesario usar “@”:
>> f =@(x) tan(exp(x))
>> int_def(f, 0, 0.1)

Scripts

Podemos crear ficheiros de sentencias sen que sexan funcións. Por exemplo, se gardamos no ficheiro debuxo.m o seguinte:
x = 0:0.01:1;
plot(x, sin(x))

Execútase dende a ventá de comandos como unha función sen argumentos:
>> proba

Porén, hai que ter coidado con estes scripts xa que usa a propias variables do espazo de traballo.

Veremos na entrada seguinte algunhas estruturas de control de fluxo.

Exercicios

  • Crea un ficheiro función para resolver ecuacións do tipo \displaystyle ae^{-x}+b=0.
  • Crea unha función anónima para \displaystyle y=x^3\,\mathrm{atan}\left(\frac{1+x}{x^2}\right).
  • Debuxa a gráfica entre -1 e 1 da función anónima anterior.
  • Calcula con int_def.m a integral definida da función anterior en [-1,1].
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