Otras funciones

Funciones definidas por intervalos

Definimos la función escalón H(x) o función de Heaviside

H(x)={ 1x0 0x<0

La función H(x-a), es una traslación a de la función escalón, se define de forma análoga.

Esta función es importante para definir funciones por intervalos, como el pulso rectangular

f(x)=H(xa)H(xb)={ 0x<a 1axb 0x>b

Sea la función

f(x)={ 1+x,1x0 1x,0<x1 0,1>x>1

Expresamos la función f(x) en términos de la función escalón H(x-a)

f(x)=( H(x+1)H(x) )(1+x)+( H(x)H(x1) )(1x)

f=@(x) (heaviside(x+1)-heaviside(x)).*(1+x)+(heaviside(x)-heaviside(x-1)).*(1-x);
fplot(f,[-1.5,1.5])
grid on
xlabel('x')
ylabel('y')
title('Función escalón')

Extensión periódica de una función

Consideremos la función f(x) definida en el intervalo (-1,1) en color rojo, la hacemos periódica de periodo P=2 repitiendo esta función a la derecha y a la izquierda, tal como se muestra en la figura

Una función periódica cumple que f(x)=f(x+P), siendo P el periodo

El problema que se presenta ahora, es la de representar una función periódica con MATLAB

f=@(x) (heaviside(x+1)-heaviside(x)).*(1+x)+(heaviside(x)-heaviside(x-1)).*(1-x);
P=2; %periodo
pf=@(x) f(x-P*round(x/P)); %función periódica
fplot(pf,[-3,5])
grid on
xlabel('x')
ylabel('y')
title('Función periódica')

Sea la función f(x)=1-x2 definida en el intervalo (-2,2). La hacemos función periódica de perido P=4

f=@(x) 1-x.^2; %función
P=4; %periodo
pf=@(x) f(x-P*round(x/P)); %función periódica
fplot(pf,[-8,8])
grid on
xlabel('x')
ylabel('y')
title('Función periódica')

Consideramos ahora la función f(x) definida en el intervalo (0,2) en color rojo. La hacemos periódica de periodo P=2. La fórmula para hacerla periódica es distinta.

Por ejemplo, f(0.2), tiene el mismo valor que las abscisas f(2.2), f(4.2),... (puntos de color azul)

El código que convierte 2.2, 4.2, 6.2... en 0.2, es el resto de la división de dichos números entre 2, x-2*floor(x/2). Por ejemplo, 6.2-2*floor(6.2/2)=6.2-2*3=0.2

f=@(x) (heaviside(x)-heaviside(x-1)).*x+(heaviside(x-1)-heaviside(x-2)).*(2-x);
P=2; %periodo
pf=@(x) f(x-floor(x/P)*P); %función periódica
fplot(pf,[-4,6])
grid on
xlabel('x')
ylabel('y')
title('Función periódica')

En la página titulada Oscilaciones de una columna de líquido definimos la función

z=τ( 2 τ 4 ),0τ4 2

Representamos la función periódica hasta el instante τ=20

f=@(t) t.*(sqrt(2)-t/4);
P=4*sqrt(2); %periodo
pf=@(t) f(t-P*floor(t/P)); %función periódica
fplot(pf,[0,20])
grid on
ylim([0,2.1])
xlabel('\tau')
ylabel('z')
title('Oscilaciones de una columna de líquido')

Funciones recursivas

Números de Fibonacci

Es la sucesión de números

f0=0, f1=1, f2=1, f3=2, f4=3, f5=5, f6=8, f7=13, f8=21...

Los dos primeros números son el 0 y el 1. El tercero f2, se obtiene sumando el primero y segundo. El cuarto f3, se obtiene sumando el segundo y tercero y así, sucesivamente.

fn=fn-1+fn-2, n=2,3,4,...

Creamos un función fibonacci recursiva del siguiente modo

function y=fibonacci(n)
    if n==0
        y=0;
    elseif n==1
        y=1
    else
        y=fibonacci(n-1)+fibonacci(n-2);
    end
end

Probamos la función fibonacci en la ventana de comandos para calcular el término 8 de la sucesión

>> fibonacci(8)
ans = 21

Creamos una versión que devuelve la serie de números de Fibonacci f0, f1, ...fn

function Y=fibonacci_1(n)
    Y=[0,ones(1,n)];
    for i=3:n+1
        Y(i)=Y(i-1)+Y(i-2);
    end
end
>> fibonacci_1(8)
ans =     0     1     1     2     3     5     8    13    21

Factorial de un número

Definiremos una nueva versión de la función que calcula el factorial de un número n, n!, que denominaremos, factorial_r.

n!=n·(n-1)·(n-2)...3·2·1

function res=factorial_r(n)
    if n==0
        res=1;
    else
        res=n*factorial_r(n-1);
    end
end

Probamos la función factorial_r en la ventana de comandos para calcular el factorial de 4, 4!, será

>> factorial_r(4)
ans = 24 

Polinomios de Hermite

Los primeros seis polinomios de Hermite son los siguientes.

H0(x)=1
H1(x)=2x
H2(x)=4x2-2
H3(x)=8x3-12x
H4(x)=16x4-48x2+12
H5(x)=32x5-160x3+120x

Todos los polinomios de Hermite de orden n>2 se pueden expresar en términos de los dos primeros polinomios H0(x) y H1(x), de orden cero y uno respectivamente, mediante la siguiente relación de recurrencia.

H n (x)=2x· H n1 (x)2(n1) H n2 (x)

El código de la función recursiva hermite que calcula los valores del polinomio Hn(x) es muy simple. A dicha función se le pasa el orden n del polinomio de Hermite y la abscisa x y devuelve el resultado del cálculo.

function res=hermite(n, x)
    if n==0
        res=1;
    elseif n==1
        res=2*x;
    else
        res=2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x);
    end
end

Probamos la función hermite en la ventana de comandos para calcular H5(2)

>> hermite(5,2)
ans = -16

Triángulo de Pascal

El triángulo de Pascal es una disposición de números tales que cada fila corresponde a los coeficientes del binomio (a+b)m. Por ejemplo la fila 3 es (a+b)3=1a3+3a2b+3ab2+1b3

Como podemos apreciar la fila m, se puede obtener a partir de la fila m-1, observando que Rm(i)=Rm-1(i-1)+Rm-1(i), para i=2,....m. Con Rm(1)=1 y Rm(m+1)=1

function Y =pascal(m)
    if m==1
        Y=[1,1];
    else
        Y=pascal(m-1);
        A=zeros(1,m-1);
        for i=1:m-1
            A(i)=Y(i)+Y(i+1);
        end
        Y=[1,A,1];
    end
end
>> pascal(5)
ans =     1     5    10    10     5     1

El número π

Para calcular la longitud de una circunferencia, comenzamos con el perímetro de un cuadrado, después con un octógono, un polígono regular de 16 lados y así, sucesivamente

En la figura se muestra un polígono regular de ocho lados

n=2^3; %ocho lados
x0=cos(pi/n);
y0=sin(pi/n);
for i=1:n
    x1=cos(pi/n+2*i*pi/n);
    y1=sin(pi/n+2*i*pi/n);
    line([x0,x1],[y0,y1])
    x0=x1; y0=y1;
end
axis equal
grid on
ylim([-1.1,1.1])

Calculamos la longitud del lado an un polígono regular de n lados inscrito en la circunferencia de radio R, (en color rojo).

a n =2Rsin( π n )

Del mismo modo, obtenemos la longitud del lado de un polígono regular inscrito de 2n lados (en color azul)

a 2n =2Rsin( π 2n )

Teniendo en cuenta la relación trogonométrica

sin( α 2 )= 1cosα 2 = 1 1 sin 2 α 2

Establecemos la relación entre an y a2n y por tanto, entre el perímetro Pn del polígono regular de n lados y el perímetro P2n del polígono regular de 2n lados.

P 2n =2nR 2 4 P n 2 R 2 n 2

Tomando R=1, empezamos con el cuadrado

P 4 =4 2 P 8 =2·4 2 4 4 2 ( 2 ) 2 4 2 = 2 3 2 2 P 16 =2·8 2 4 8 2 ( 2 2 ) 2 8 2 = 2 4 2 2+ 2 P 32 =2·16 2 4 16 2 ( 2 2+ 2 ) 2 16 2 = 2 5 2 2+ 2+ 2 ....

Definimos la función auxiliar recursiva calculo_pi que calcula la parte

2+ 2+ 2+...

function z = calculo_pi(n)
    if n>0
        z=sqrt(2+calculo_pi(n-1));
    else
        z=0;
    end
end

En el script, calculamos el resto del perímetro dividido entre dos y lo comparamos con el número π

format long
for n=1:10
    z=2^n*sqrt(2-calculo_pi(n-1));
end
disp([z; pi])
3.141591421504635
3.141592653589793