Está en la página 1de 20

FUNCIONES DE UNA VARIABLE

Las funciones matemáticas son todas aquellas expresiones lineales o no lineales que
incluyen una o más variables. A continuación se tratan las funciones de Matlab que
ejecutan operaciones o procedimientos sobre funciones polinómicas de una variable.

FUNCIONES POLINÓMICAS

Para el manejo de los polinomios, Matlab dispone de un conjunto de funciones cuya


documentación o ilustración se encuentra en el directorio polyfun. Las funciones
permiten la realización de procedimientos matemáticos entre polinomios como su
multiplicación (función conv) o su división (función deconv), la derivada o la
evaluación de un polinomio (función polyder y polyval) y la determinación de las
raíces de una ecuación polinómica (función roots). Para accesar a la lista completa
de dichas funciones con sus respectivas descripciones y vínculos con páginas
relacionadas con ellas se digita en el editor de comandos de Matlab la orden:

help polyfun

Representación de polinomios

MATLAB representa un polinomio como una matriz fila cuyos elementos son los
coeficientes de los términos del polinomio en orden decreciente de potencia. Por
ejemplo, el siguiente polinomio de grado 4:

( )

Para expresarlo en el código de Matlab se escribe la siguiente matriz fila:

p = [4 3 -4 6 -1];
Evaluación de polinomios

La función polyval evalúa a un polinomio en un valor especificado de la variable


independiente. La sintaxis de la escritura de la función polyval es:

polyval(p, xo)

Siendo p el polinomio a evaluar en función de la variable x y xo el valor de la


variable para el cual se quiere evaluar al polinomio. Si el polinomio de grado 4 de la
sección anterior se quiere evaluar para un valor de xo = 3, entonces, después de
escribirse en la plataforma de Matlab el polinomio en la forma matricial, debe
escribirse la función para su evaluación así:

V = polyval(p,3)

Matlab arrojará un resultado que este caso se observará como: ans = 386

Multiplicación y división de polinomios

En Matlab la multiplicación y la división entre dos polinomios corresponden a las


operaciones denominadas convolución y deconvolución. La función conv ejecuta la
multiplicación entre dos polinomios y la función deconv ejecuta la división entre dos
polinomios. La sintaxis de la escritura de estas dos funciones es:

c = conv(a,b)
[q,r] = deconv(a,b)

Siendo a y b los polinomios a multiplicar o a dividir, escritos con el formato de


Matlab ya sea anteriormente o dentro del paréntesis que encierra los argumentos de
la función conv o deconv. La función deconv reporta el cociente q y el residuo r
La multiplicación de los polinomios:

( )

( )

Desarrollada con Matlab requiere de las siguientes declaraciones:

a = [3 4 6 -1];
b = [1 2 -2];
c = conv(a, b);

Matlab arrojará un resultado que este caso se observará como:

c= 3 10 8 3 -14 2

La matriz c representa al polinomio: ( )

La división del polinomio c(x) entre el polinomio b(x), al desarrollarla en Matlab


requiere de la declaración de dichos polinomios y la función deconv de la siguiente
forma:

[q,r] = deconv(c,b);

Matlab arroja el resultado del cociente y el residuo en la siguiente forma:

q= 3 4 6 -1

r= 0 0 0 0 0 0
Derivación de polinomios

En Matlab, la derivación de un polinomio se ejecuta con la función polyder. La


sintaxis de esta función solo requiere como argumento la especificación el
polinomio así:

q = polyder(p)

Siendo p el polinomio a derivar. Para obtener la derivada del polinomio ( )


se requieren las siguientes declaraciones en la
plataforma de Matlab

C = [3 10 8 3 -14 2]

q = polyder(p)

Y se observará el siguiente resultado: q = 15 40 24 6 -14

La función polyder también calcula la derivada del producto o del cociente entre
dos polinomios. La sintaxis de esta función para estos casos es:

Derivada del Producto entre a y b: c = polyder(a,b)


Derivada del Cociente entre a y b. [q,d] = polyder(a,b)

Raíces de una ecuación polinómica

En Matlab, las raíces de una ecuación polinómica se ejecuta con la función roots. La
sintaxis de esta función solo requiere como argumento la especificación del
polinomio así:
q = roots(p)

Siendo q un vector cuyos elementos son las raíces de la ecuación polinómica p = 0.


Para la ecuación polinómica se requiere de las siguientes
en Matlab para obtener las raíces:

p = [8 3 -14 2]
r = roots(p)

Las raíces recogidas como un vector son reportadas por Matlab de la siguiente
forma:

r =

-1.5815

1.0569

0.1496

Al referirse a dichas raíces debe hacer con su correspondiente indexación, es decir


r(1) es la primera, r(2) es la segunda y r(3) es la tercera.

Aproximación polinomial de datos

En trabajos de ingeniería es usual el registro de datos de procesos que muestren la


variación de una variable (dependiente) con respecto al cambio ocasionado en otra
(variable independiente). Para ciertos propósitos, como la estimación para cualquier
valor de la variable independiente el valor de la variable dependiente (interpolar o
extrapolar) suelen ajustarse dichos datos a una relación matemática que de acuerdo a
la tendencia, en muchos casos, es válida una aproximación de tipo polinómica.
En Matlab, la aproximación polinómica de un conjunto de datos se ejecuta con la
función polyfit. La sintaxis de esta función solo requiere como argumentos, los datos
de la variable independiente (x) y dependiente (y) y el valor del grado (n) del
polinomio aproximación así:

p = polyfit(x,y,n)

El resultado arroja una matriz fila p de longitud n + 1 cuyos elementos son los
coeficientes de un polinomio p(x) de grado n que ajusta los datos p(x(i)) a y(i),
mediante un procedimiento de los mínimos cuadrados.

FUNCIONES LÓGICAS - MATLAB

Para la determinación de información relacionada con la naturaleza de datos, Matlab


dispone de un conjunto de funciones lógicas cuya ejecución, simplemente, reporta
que el resultado es verdadero (valor 1) o falso (valor cero). Por ejemplo, si después
de resolver la ecuación polinómica se quiere determinar
si las raíces son reales se puede programar la ejecución de las siguientes órdenes:

p = [8 3 -14 2];
r = roots(p);
N = isreal(r)

La función isreal se encarga de determinar la naturaleza de cada una de las tres


raíces de la ecuación polinómica. En este caso, Matlab reporta que N = 1, es decir
que es verdadero que las raíces son reales. La sintaxis de una función lógica solo
requiere de la declaración de la palabra clave seguido de un paréntesis donde se
especifique como argumento el arreglo de datos. Otras funciones lógicas
importantes encontradas en la biblioteca de funciones de Matlab son:

isnumeric: Determina si la entrada es un arreglo numérico


isinteger: Determina si la entrada es un arreglo de números enteros

isfloat: Determina si la entrada es un arreglo de números de punto flotante

islogical: Determina si la entrada es un arreglo de valores lógicos

ischar: Determina si la entrada es un arreglo de caracteres string

Se recomienda al usuario utilizar la ayuda de Matlab para documentarse a cerca de


otras funciones lógicas importantes dentro de las necesidades de la programación
matemática en la plataforma de Matlab.

PROGRAMACIÓN - MATLAB

En esta sección se incluye la explicación de otro lazo de control, muy útil en códigos
de programación cuando se quiere ejecutar una orden o un grupo de órdenes un
predeterminado número de veces. Se trata del lazo de control for…end.

Lazo de control: for…end

La estructura para el desarrollo de un lazo de control for…end es:

for i = Valor Inicial: Incremento: Valor Final


orden;
orden;
…….
end

Se entiende a i como el índice que simboliza el número de la repetición del grupo de


órdenes, su valor cambia desde un Valor Inicial que se aumenta sucesivamente
según el valor del Incremento hasta alcanzarse el Valor Final. El valor por defecto
del Incremento es 1 y en este caso es opcional su escritura. Se puede especificar un
Incremento con un valor de signo negativo. Para incrementos positivos, la ejecución
del lazo de control termina cuando el valor del índice excede el valor final; para
incrementos negativos la ejecución del lazo de control termina cuando el valor del
índice es menor que el valor final.
En el siguiente segmento de un código de programación:

m = [1:40];
z = length(m); % Número de datos de m

% Evaluación de la aproximación polinómica en cada uno de los valores de m

for i = 1:z
Y2(i) = polyval(p, i);
end

En la primera orden se define un conjunto de valores m desde 1 hasta 40 de 1 en 1.


En la segunda orden se determina el conjunto de valores que contiene la matriz m y
el lazo de control for…end repite la evaluación de un polinomio p para los sucesivos
valores de i y los arregla dentro de una matriz Y2.

Lazos de control anidados

Dentro de un lazo de control cualquiera se pueden a su vez incluir otros lazos de


control. Es decir hay un lazo de control externo y uno o más internos. Se considera,
entonces, que los lazos de control externo e internos están anidados. En el siguiente
segmento de un archivo mostrado al final de esta lección se puede observar un lazo
de control for…end externo anidado con otros dos lazos internos.

clc, clear all

A = [1.0344 1.0281 1.0140 0.9888; 1.1453 1.1335 1.1153 1.0885; 1.3103 1.2953 1.2732 1.2446;
1.6923 1.6014 1.5753 1.5417];
X = [10 30 60 100];
C = [5 20 40 70];
s = size(A);
X1 = [10:100]; % Valores de temperaturas de 1 en 1 desde 10 hasta 100
n = length(X1); % Determinación del número de temperaturas en la matriz X1

for i = 1:s(1)

for j = 1:s(2)
Y1(j) = A(i,j); % Captura de los valores de densidades para una concentración
constante
end
plot(X, Y1, 'xr', 'Linewidth', 4) % Representación de los dados de densidad localizados con
x
grid on
hold on
p = polyfit(X, Y1, 3); % Aproximación polinomial de grado tres de los dados obtenidos
en el lazo de control

for z = 1:n
Y2(z) = polyval(p, X1(z));
end
plot(X1,Y2, '-k')
end

El lazo de control externo repite las orden que hay en su interior las veces dadas por
el valor de s(1), el primer de lazo de control interno repite las órdenes que hay en su
interior las veces dadas por el valor de s(2) y el segundo lazo de control interno
repite las órdenes que hay en su interior las veces dadas por el valor de n

REPRESENTACIÓN GRAFICA DE DATOS - MATLAB


El ambiente de MATLAB ofrece una variedad de funciones para representar datos
gráficamente, además de un conjunto de interfaces para crear y modificar gráficos.

Figure

Una figure es una ventana de MATLAB que contiene el despliegue gráfico de datos
en forma de lugares geométricos y algunos controles para la manipulación o edición
de dichos gráficos. Un usuario de Matlab crea figures en forma explícita con la
función figure, pero también las crea implícitamente cuando ordena la construcción
de un gráfico con la función plot y no existe una figure abierta o activa.

La sintaxis para la creación explícita de una figure solo requiere de la especificación


de un número distintivo, como por ejemplo:

figure(1) ó figure(2)….

Por defecto, las ventanas figure son redimensionables y contienen menús


desplegables y barras de herramientas.
Comando hold on y hold off

El mantenimiento de una figura en forma abierta o activa para desplegar sucesivos


plot en la misma ventana se ordena con el comando hold on y el cierre de la figure o
la inactivación de ella se ordena con el comando hold off.

Plot

Un plot es cualquier despliegue gráfico que un usuario puede construir dentro de una
ventana figure. Un plot puede ser el despliegue de un conjunto de datos en forma
tabular, u objetos geométricos, imágenes o superficies, además de anotaciones como
títulos, leyendas y barras de colores. Una figure puede mostrar uno o varios plot.
Cada plot se crea dentro de un espacio de datos bidimensional o tridimensional
denominados axes. Un usuario puede crear axes en forma explícita haciendo uso de
las funciones axes o subplot.

La sintaxis para la creación de un plot bidimensional requiere la especificación,


como mínimo, del vector de valores correspondiente a la variable independiente y
seguidamente del vector de valores correspondiente a la variable dependiente
separados por una coma, es decir;

plot(x, y)

Las propiedades del plot se pueden editar desde la declaración del comando y se
colocan después del segundo argumento separado por un signo coma. Por ejemplo,
si se quiere editar que el plot sea una línea a trazos y de color negro, entonces, se
agrega a la anterior declaración lo siguiente:

plot(x, y, ‘--k’)

Los dos trazos discontinuos es la convención para un plot lineal por trazos, la letra k
es la convención para el color negro y el valor de la propiedad debe encerrarse entre
comillas simples. Otras convenciones sobre el tipo de línea son: o (solo los puntos),
-. (raya punto), x (solo x), etc. Otras convenciones para el color de la línea son: r
(rojo), b (azul), y (amarillo), g(verde), etc.
Leyendas sobre los ejes y título del gráfico

Las leyendas sobre los ejes y el título del gráfico se ordenan con los siguientes
comandos que exigen como argumento, mínimo, la leyenda a desplegar encerrada
entre comillas simples.

Leyenda sobre el eje x: xlabel(‘Leyenda’)


Leyenda sobre el eje y: ylabel(‘Leyenda’)
Título del gráfico: title(‘Leyenda’)

Las propiedades de la leyenda se pueden editar desde la declaración del comando y


se colocan después del segundo argumento separado por un signo coma. La sintaxis
requiere que se escriba el nombre de la propiedad encerrada entre comillas simples y
a continuación el valor de la propiedad separado por una coma. Por ejemplo, si se
quiere que la leyenda se despliegue con una tamaño de letra 14, se escribe el nombre
de la propiedad correspondiente, en este caso ‘Fontsize’ y a continuación el número
14 sin comillas. La siguiente orden:

ylabel('Temperatura, °C', 'Fontsize', 14)

Desplegará sobre el eje y de un gráfico la leyenda Temperatura, °C con un tamaño


de letra de 14. Si se desea escribir una leyenda, como argumento dentro de los
anteriores, en varios renglones se colocan las escrituras dentro de dos llaves,
encerradas entre comillas simples y separadas por el signo punto y coma. Con la
siguiente orden, en un gráfico aparecerá un título ocupando dos renglones, el
primero con la leyenda Densidad – Temperatura y el segundo con la leyenda
Diferentes Concentraciones

title({'Densidad - Temperatura' ; 'Diferentes Concentraciones'}, 'Fontsize', 16)

Despliegue de textos sobre un gráfico

Para el despliegue de textos sobre los gráficos se utiliza la función text que requiere
como argumentos la localización del texto (primero abscisa y segundo ordenada
separados por una coma) y luego también separado por coma el texto a desplegar
encerrado entre comillas simples. El siguiente ejemplo ilustra el uso de la función
text
text(13, 15, ‘Hola’, 'Fontsize', 13) % Despliegue del valor sobre dicho punto

Al ejecutarse la orden anterior se desplegará el texto Hola en las coordenadas (13,


15) de un gráfico con un tamaño de letra 13.

EJERCICIOS RESUELTOS

1. La siguiente tabla muestra las temperaturas de ebullición de la acetona a


diferentes presiones:

Punto 1 2 3 4 5 6 7

T °C 56.5 78.6 113.0 144.5 181.0 205.0 214.5

P, atm 1 2 5 10 20 30 40

Ajustar dichos datos a un polinomio de grado 2 considerando la presión como


la variable independiente y la temperatura como variable dependiente.

Se define la matriz de temperaturas y la matriz de presiones así:

x = [1 2 5 10 20 30 40]

y = [56.5 78.6 113.0 144.5 181.0 205.0 214.5]

Y a continuación se aplica la función polyfit fijando el valor n del grado del


polinomio elegido para el ajuste polinomial, si no se observa una
aproximación satisfactoria se sigue probando con grados mayores. A
continuación se desarrolla al ajuste para un polinomio de grado 2

p = polyfit(x, y, 2)
Matlab arroja como resultado los coeficientes de un polinomio de grado 2 en
la siguiente forma:

p=

-0.1272 8.8311 60.6867

Entonces, el ajuste polinómico que se obtiene para los datos experimentales


es:

( )

La siguiente tabla muestra los resultados obtenidos para las temperaturas de


ebullición Ya calculadas con la aproximación polinomial y la comparación
gráfica entre los datos originales (X, Y) y los obtenidos con la aproximación
polinomial (X, Ya) se muestra en la Figura 1. Como adición, para mas
comparación, se muestra en la Figura 2 el gráfica que representa los valores
de las temperaturas de ebullición de la acetona para presiones entre 1 y 40
atm incrementadas de 1 en 1
Figura 1. Datos originales – Datos aproximados

Figura 2. Datos originales – Datos estimados con la aproximación polinomial

Los resultados observados permiten considerar que la aproximación


polinómica de segundo grado no es satisfactoria. El código de Matlab
mostrado a continuación desarrolla la aproximación, calcula los datos con el
ajuste obtenido y grafica los resultados. Se deja como asignación para el
estudiante, utilizar dicho programa cambiando el grado del polinomio de
aproximación y observando las diferencias que resultan entre los datos
originales y los calculados con el ajuste sugerir una aproximación
satisfactoria.
Código Matlab
% Programa 21
% Aproximación polinómica de datos

clc, clear all

X = [1 2 5 10 20 30 40]; % Datos variable independiente


Y = [56.5 78.6 113.0 144.5 181.0 205.0 214.5]; % Datos variable dependiente

p = polyfit(X, Y, 2); % Aproximación polinómica de grado 2


n = length(X); % Número de datos de X

% Evaluación de la aproximación polinómica en cada uno de los valores de X

for i = 1:n
Y1(i) = polyval(p, X(i));
end

% Intervalo de valores para evaluar la aproximación polinómica

m = [1:40];
z = length(m); % Número de datos de m

% Evaluación de la aproximación polinómica en cada uno de los valores de m

for i = 1:z
Y2(i) = polyval(p, i);
end

disp(' RESULTADOS ')


disp('=======================================')
disp('Los coeficientes del polinomio de segundo grado son: '); p
disp(' ')

R = [X; Y; Y1; abs(Y1 - Y)];

disp('=======================================')
disp(' X Y Ya Y - Ya ')
disp('=======================================')
fprintf('% 12.0f % 6.1f % 6.1f % 6.1f\n', R);
disp('=======================================')

% Gráficas de datos iniciales y de datos calculados de acuerdo a la


% aproximación polinomial

figure(1)
plot(X,Y, 'or', X, Y1, '-k')
ylabel('Temperatura, °C', 'Fontsize', 14)
xlabel('Presión, atm', 'Fontsize', 14)
title('Temperatura de Ebullición de Acetona versus Presión', 'Fontsize', 14)
legend('Datos originales', 'Datos ajustados', 4)

% Gráficas de datos iniciales y de datos calculados para el intervalo de 1


% a 40 de uno de uno

figure(2)
plot(X, Y, 'or')
hold on
plot(m, Y2, '-b')
ylabel('Temperatura, °C', 'Fontsize', 14)
xlabel('Presión, atm', 'Fontsize', 14)
title('Temperatura de Ebullición de Acetona versus Presión', 'Fontsize', 14)
legend('Datos originales', 'Datos interpolados', 4)
hold off

2. Las densidades de las soluciones acuosas del ácido sulfúrico varían con la
temperatura y la concentración de acuerdo a la siguiente tabla:

T, °C
C, %
10 30 60 100
5 1,0344 1,0281 1,0140 0,9888
20 1,1453 1,1335 1,1153 1,0885
40 1,3103 1,2953 1,2732 1,2446
70 1,6923 1,6014 1,5753 1,5417

1. Hacer un ajuste polinómico de las densidades para una concentración


del 40 % y estimar la densidad para una temperatura de 15 °C
2. Calcular la temperatura a la cual una solución al 40 % tiene una
densidad de 1,255
3. Hacer un ajuste polinómico de las densidades para una temperatura de
30 °C y estimar la densidad para una concentración del 50 %
4. Estimar la densidad a 50 °C y 60 % de concentración.

Las respuestas a las tres primeras preguntas del ejercicio se desarrollan con un
archivo de Matlab que aparece a continuación.
El programa despliega las siguientes dos figuras:

Figure 1. Densidad – Temperatura

Figure 2. Densidad – Concentración (30 °C)


En la figura número 1 se muestran los gráficos de las densidades para cada una de
las diferentes concentraciones de soluciones en el intervalo de temperatura
contenido dentro del conjunto de datos; en la número 2 se muestra el gráfico de las
densidades a una temperatura de 30 °C en el intervalo de concentraciones.

Se deja como asignación, para el estudiante, la adición del código para encontrar la
respuesta a la cuarta pregunta. Los resultados encontrados con dicho código son:

Código Matlab
% Programa 2.2
% Aproximación polinómica de datos

clc, clear all

A = [1.0344 1.0281 1.0140 0.9888; 1.1453 1.1335 1.1153 1.0885; 1.3103 1.2953 1.2732 1.2446; 1.6923
1.6014 1.5753 1.5417];
X = [10 30 60 100];
C = [5 20 40 70];
s = size(A);

X1 = [10:100]; % Valores de temperaturas de 1 en 1 desde 10 hasta 100


n = length(X1); % Determinación del número de temperaturas en la matriz X1

for i = 1:s(1)

for j = 1:s(2)
Y1(j) = A(i,j); % Captura de los valores de densidades para una concentración constante
end

plot(X, Y1, 'xr', 'Linewidth', 4) % Representación de los dados de densidad localizados con x
grid on
hold on
p = polyfit(X, Y1, 3); % Aproximación polinomial de grado tres de los dados obtenidos en el lazo
de control

for z = 1:n
Y2(z) = polyval(p, X1(z));
end
plot(X1,Y2, '-k')

% Para una solución de 40 % de concentración

if C(i) == 40

% Determinación de la densidad a 15 °C
R1 = polyval(p, 15); % Determinación de la densidad para una temperatura de 15 °C
plot(15, R1, 'ok', 'Linewidth', 6) % Graficación del valor de la densidad con una o negra
text(13, R1 + 0.025, num2str(R1), 'Fontsize', 13) % Despliegue del valor sobre dicho punto

fprintf('Resp. 1. La densidad de una solución del 40 a una temperatura de 15 °C es = % 6.4f\n', R1)


% Determinación de la temperatura para una densidad de 1.255

pol = p - [0 0 0 1.255]; % Polinomio igual a cero para una densidad de 1.255


T = roots(pol); % Raíces del polinomio

for i = 1:3
N = isreal(T(i)); % Determina si las raíces de la ecuación pol son reales
if N == 1 && T(i) > 0 && T(i) < 100 % Condicionamiento de real, mayor que cero y menor que 100

R2 = T(i); % Asignar a R2 la raiz real, mayor que cero y menor que 100
plot(R2, 1.255, 'ok', 'Linewidth', 6) % Graficación del valor de la densidad con una o negra
text(R2 -1, 1.255 + 0.025, num2str(R2), 'Fontsize', 13) % Despliegue del valor sobre dicho punto
disp(' ')
fprintf('Resp. 2. La temperatura de una solución del 40 con una densidad de 1.255 es = % 6.1f\n',
R2)
else
end
end

else
end

end

% Tercera Pregunta: Densidad 30 °C y 50 % de concentración

for j = 1:s(2)
Y3(j) = A(j,2); % Captura de los valores de densidades para una temperatura de 30 °C
end

figure(2) % Apertura de una nueva figure


plot(C, Y3, 'xr', 'Linewidth', 4)
grid on
hold on
p1 = polyfit(C, Y3, 3);

X4 = [5:70];
m = length(X4);

for w = 1:m
Y4(w) = polyval(p1, X4(w));
end

plot(X4,Y4, '-k')
R3 = polyval(p1, 50);
plot(50, R3, 'ok', 'Linewidth', 6)
text(49, R3 - 0.03, num2str(R3), 'Fontsize', 13)
disp(' ')
fprintf('Resp. 3. La densidad de una solución del 50 y una temperatura de 30 °C es = % 6.4f\n', R3)
EJERCICIO PROPUESTO

1. A continuación se presentan las presiones de vapor del cloruro de magnesio


para un conjunto de temperaturas:

Puntos 1 2 3 4 5 6 7 8
P(mm Hg) 10 20 40 60 100 200 400 760
T (°C) 930 988 1050 1088 1142 1316 1223 1418

1. Construir un gráfico de la presión en función de la temperatura


2. Ajustar los datos a una aproximación polinómica
3. Determinar la presión de vapor a una temperatura de 1000 °C

También podría gustarte