Sei sulla pagina 1di 22

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA

Escuela Ciencias Básicas Tecnología e Ingeniería

Ingeniería en Telecomunicaciones

Materia: Software para Ingeniería

Preparado por:
Ramón Hernán Bacca Picón
Código: 1064841126

Paso 2 Practica 1

Grupo: 203036_33

Ocaña, 08/03/2019

1
PRÁCTICA 1. Del 15/02/2019 al 14/03/2019
Es importante que realice cada una de las actividades descritas, ya que de ellas puede
extraer varias ideas que lo orienten en la formulación de la solución del problema planteado
en el curso.
1. Instalar Matlab o Scilab

2
2. En Matlab o Scilab realice las siguientes operaciones aritméticas
Manejo de números enteros
Asigne una variable el valor del año de nacimiento, a otra el valor del año
actual y realice el cálculo de la edad de la persona.

Ejecucion de inicio:
cargando entorno inicial

-->

--> //calcular la edad de una persona

--> //recibe la fecha como un string en formato español

--> //devuelve un entero con la edad. Devuelve false en caso de que la fecha
sea incorrecta o mayor que el dia actual

--> function calcular_edad(fecha){


>
> //calculo la fecha de hoy
> hoy=new Date()
> //alert(hoy)
>

3
> //calculo la fecha que recibo
> //La descompongo en un array
> var array_fecha = fecha.split("/")
> //si el array no tiene tres partes, la fecha es incorrecta
> if (array_fecha.length!=3)
> return false
>
> //compruebo que los ano, mes, dia son correctos
> var ano
> ano = parseInt(array_fecha[2]);
> if (isNaN(ano))
> return false
>
> var mes
> mes = parseInt(array_fecha[1]);
> if (isNaN(mes))
> return false
>
> var dia
> dia = parseInt(array_fecha[0]);
> if (isNaN(dia))
> return false
>
>
> //si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo
a4
> if (ano<=99)
> ano +=1900
>
> //resto los años de las dos fechas
> edad=hoy.getYear()- ano - 1; //-1 porque no se si ha cumplido años
ya este año
>
> //si resto los meses y me da menor que 0 entonces no ha cumplido
años. Si da mayor si ha cumplido
> if (hoy.getMonth() + 1 - mes < 0) //+ 1 porque los meses empiezan en
0
> return edad
> if (hoy.getMonth() + 1 - mes > 0)
> return edad+1
>
> //entonces es que eran iguales. miro los dias
> //si resto los dias y me da menor que 0 entonces no ha cumplido años.
Si da mayor o igual si ha cumplido

4
> if (hoy.getUTCDate() - dia >= 0)
> return edad + 1
>
> return edad

Manejo de números reales


Asigne a una variable el valor del radio de una circunferencia y calcule el
área de dicho circulo.

* Programa: Área de una circunferencia (Solución 3) */


>
> #include <conio.h>
> #include <math.h>
> #include <stdio.h>
>
> #define PI 3.141592
>
> int main()
>{
> float radio;
>
> printf( "\n Introduzca radio: " );
> scanf( "%f", &radio );
>

5
> printf( "\n El %crea de la circunferencia es: %.2f", 160, PI *
pow( radio, 2 ) );
>
> printf( "\n\n Pulse una tecla para salir..." );
> getch(); /* Pausa */
>
> return 0;
>}

Manejo de vectores
Con el programa scilab Seleccione un polinomio de grado 3 y asigne los
valores de sus coeficientes a una variable de tipo vector y calcule sus raíces,
derívelo e intégrelo
Manejo de matrices
Seleccione dos matrices de números reales (A y B), de orden 4x4 y con ellas
realice las siguientes operaciones (suma, resta, multiplicación)
Con la matriz A calcule la transpuesta, multiplíquela por una constante.
Manejo de funciones predefinidas
Consulte 3 funciones predefinidas en Matlab/Scilab para el manejo
matemático y realice un ejemplo con cada una de ellas donde se evidencia su
aplicación
Funciones matlab.

Estamos acostumbrados a trabajar con funciones del tipo y=f(x) donde f(x) es una
expresión matemática en términos de la variable x. Se calcula un valor de y (salida) cuando
se proporciona un valor de x (entrada) en la expresión. MATLAB define muchas funciones
como sin(x), sqrt(x), etc.

Podemos definir nuestras propias funciones guardarlas en un fichero y usarlas de un modo


semejante a las funciones predefinidas. En muchos casos las funciones son los
componentes básicos dentro de un programa de ordenador. Habitualmente, un programa se
subdivide en tareas y cada una de ellas es llevada a cabo por una función, a esta forma de
resolver los problemas se denomina programación estructurada.

La principal ventaja de las funciones es la posibilidad de reutilizar el código en otros


programas distintos al cual fueron definidas.

6
El aspecto más importante de esta página, son las funciones anónimas, que se utilizarán con
mucha frecuencia en la programación con MATLAB

Ejemplos

Suma de dos números


Empezaremos por una función suma que realiza la siguiente tarea, suma de dos
números x e y y devuelve la suma z=x+y

Definición de la función

function [z] = suma (x,y)


%Esta función suma dos números x e y
%y devuelve el resultado de la suma en z

z=x+y; %efectúa la suma


end
A la función suma se le pasan dos datos en las variables x e y, y devuelve el resultado en la
variable z.

La función se guarda en un fichero

El fichero que guarda la función tiene el mismo nombre que la función, tal como vemos al
seleccionar en el Editor File/Save as...

7
Llamada a la función

La llamada a la función se puede hacer desde la ventana de comandos

>> suma(2,3)
ans = 5

Se puede hacer desde un script

a=3;
b=2;
res=suma(a,b);
disp(res)

En la llamada a la función suma su parámetro x adquiere el valor del primer argumento a, el


segundo parámetro y toma el valor del argumento b, se efectúa la suma en el cuerpo de la
función, se guarda el resultado en la variable z que devuelve la función. El valor que guarda
z se copia en la variable res. Las variables x, y y z son locales a la función y por tanto, no

8
aparecen en la ventana Workspace, no se puede acceder a ellas desde la ventana de
comandos.

>> suma(2,3)
ans = 5
>> x
Undefined function or variable 'x'.
>> z
Undefined function or variable 'z'.

Como hemos visto hay que pasar los valores que guardan las variables a y b a la
función sumapor que una función no tiene acceso a las variables declaradas en un script o
en la ventana de comandos.

Sistema de ayuda

En la ventana de comandos escribimos

>> help suma


Esta función suma dos números x e y
y devuelve el resultado de la suma en z

Aparecen los comentarios que hemos puesto al principio de la función, pero no aparecen el
comentario "efectúa la suma", que hemos puesto en la tercera línea.

9
Movimiento de caída de los cuerpos

Las ecuaciones que describen el movimiento de caída de los cuerpos son:

v=v0+g⋅tx=x0+v0t+12gt2v=v0+g·tx=x0+v0t+12gt2
Donde v0 y x0 es la velocidad inicial y la posición inicial, respectivamente. Vamos a crear
una función denominada caida_libre que admita como parámetros el tiempo t y devuelva la
posición x y velocidad v de un móvil que se lanza desde 200 m de altura con velocidad de
40 m/s. La aceleración constante de la gravedad g=-10 m/s2

v=40-10·t
x=200+40·t-5·t2

Seleccionamos New/Function para abrir el editor de funciones.

1. Definimos la función:
o La palabra clave function
o Las variables de salida entre corchetes cuadrados [x,v]
o El operador asignación =
o El nombre de la función, caida_libre
o Entre paréntesis la variable de entrada (t)
2. Escribimos el cuerpo de la función con dos sentencias que calculan la velocidad v y
la posición x cuando se proporciona el dato del tiempo t
3. Finalizamos con end.
4. Seleccionamos Save para guardar la función en el fichero caida_libre.m con el
mismo nombre que la función.

function [x,v] = caida_libre(t)


v=40-10*t;
x=200+40*t-5*t^2;
end

En la ventana de comandos se llama a esta función caida_libre, pasándole un tiempo t=2 s,


del siguiente modo

>> [pos,vel]=caida_libre(2)
pos = 240

10
vel = 20

Que calcula y muestra, la velocidad v=20 m/s y la posición x=240 m en el instante t=2 s

En la llamada a la función caida_libre el parámetro t adquiere el valor de 2, en las dos


sentencias se calcula la velocidad y posición y se guardan en las variables locales v y x. La
función devuelve estos dos valores que se copian en las variables vel y pos de la ventana de
comandos. En la ventana de comandos no tenemos acceso a las variables t, v y x por ser
locales a la función caida_libre y desaparecen cuando termina de ejecutarse, pero si
tenemos acceso a las variables vel y pos que guardan los resultados del cálculo realizado en
el cuerpo de la función.

Si intentamos acceder a la variable x o t obtendremos un mensaje de error

>> x,t
??? Undefined function or variable 'x'.

Si queremos que la función caida_libre calcule la posición y velocidad del móvil para una


secuencia (vector) de tiempos t, tendremos que modificar la definición de dicha función

function [x,v] = caida_libre(t)


v=40-10*t;
x=200+40*t-5*t.^2;
end

En la ventana de comandos se llama a esta función caida_libre, pasándole los


tiempos t=[0,2,4,6,8,10] o bien, t=0:2:10 , del siguiente modo

>> t=0:2:10;
>> [pos,vel]=caida_libre(t)
pos = 200 260 280 260 200 100
vel = 40 20 0 -20 -40 -60

Media y desviación estándar de un conjunto de datos


La definición de media y desviación estándar es la siguiente

<x>=n∑1xinσ=


⎷ n∑1(xi−x)2n−1 <x>=∑1nxin  σ=∑1n(xi−x)2n−1

11
Creamos una función denominada estadistica a la que se le pasa un vector x de datos y
devuelve la media med y la desviación, des, y la guardamos en un fichero con el mismo
nombre que la función

function [med,des]=estadistica(x)
n=length(x);
med=sum(x)/n;
des=sqrt(sum((x-med).^2/(n-1)));
end

 La función sum calcula la suma de los elementos de un vector x


 La función length, calcula el número de elementos del vector x.

Calcular la media y la desviación estándar de la altura de los 10 alumnos de una clase:


1.65, 1.82, 1.72, 1.75, 1.73, 1.85, 1.90, 1.74, 1.76, 1.77.

Escribimos el nombre de la función estadistica en la ventana de comandos y le pasamos el


vector de datos

>> [media, desviacion]=


estadistica([1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77])
media = 1.7690
desviacion = 0.0713

MATLAB dispone de dos funciones que calculan la media mean y la desviación


estándar, std.

>> x=[1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77];
>> mean(x)
ans = 1.7690
>> std(x)
ans = 0.0713

Funciones anónimas

Las funciones anónimas nos permiten definir una función simple sin necesidad de crearla y
guardarla en un fichero .m. Se pueden definir en la ventana de comandos, en un fichero
script o dentro de otra función, con la siguiente sintaxis:

variable=@(parámetros) expresion

expresion consiste en una única y válida expresión, puede tener una o más variables de
entrada que se especifican en la lista de argumentos separadas por comas. Puede incluir
variables que se han definido previamente

12
Las funciones se pueden asignar a variables y estas variables se pueden pasar a otras
funciones como se pasan escalares o vectores. Más adelante veremos cómo se llama a una
función dentro de otra función que se le pasa en uno de sus parámetros.

Comparamos la definición de una función func que se guarda en un fichero func.m y su


equivalente anónima

function y=func(x)
y=cos(x)-x;
end

Llamada a la función

>> z=func(0.5)
z = 0.3776

Su equivalente anónima se escribe en la ventana de comandos sin necesidad de guardarla en


un fichero y se llama del mismo modo que cualquier otra función

>> f=@(x) cos(x)-x;


>> z=f(0.5)
z = 0.3776
f guarda un valor asociado a una función que denominaremos manejador ( function handle)

En la ventana Workspace, vemos que aparece una variable f de distinto tipo que guarda la
referencia a la función anónima.

Sea una función anónima f que incluye una variable a cuyo valor definimos previamente

>> a=4;
>> f=@(x) a*x;
>> f(3)
ans = 12

13
Si cambiamos el valor de la variable a, el cambio no tiene efecto en la función f como
vemos en el siguiente código

>> a=5;
>> f(3)
ans = 12

Teorema del coseno

Calculamos el lado c del triángulo si conocemos los lados a y b y el ángulo comprendido γ,


mediante el teorema del coseno

c=√ a2+b2−2abcosγ c=a2+b2−2abcosγ


>> c=@(a,b,gamma) sqrt(a^2+b^2-2*a*b*cosd(gamma));
>> lado=c(3,4,30)
lado = 2.0531

Nota: MATLAB captura el valor de las variables cuando se define la función anónima. La


función anónima f(x) se define con un valor de a=2

>> a=2;
>> f=@(x) cos(a*x);
>> f(0.5)
ans = 0.5403

Ahora cambiamos el valor de la variable a=3, pero la función anónima f(x) no se modifica

>> a=3;
>> f(0.5)
ans = 0.5403

Para que la función f(x) utilice el nuevo valor de a hay que volverla a definir

14
>> a=3;
>> f=@(x) cos(a*x);
>> f(0.5)
ans = 0.0707

Llamada a una función desde otra función

Existen mucha situaciones en las que una función f1 utiliza otra función f2. Por ejemplo,
MATLAB tiene una función fzero que se utiliza para calcular las raíces de una
ecuación f(x)=0. La función f se le pasa a fzero cuando se llama para encontrar las raíces
de f(x). Hay varias formas de pasar una función f a otra función para su uso.

Ya hemos visto el significado de manejador para una función anónima, un valor que guarda
una variable f o  c y que está asociado a una función.

Si definimos una función de forma explícita en un fichero por ejemplo, la función func,


obtenemos el manejador anteponiendo el carácter @ al nombre de la función

La derivada de una función


Vamos ahora, a ver como se le pasa una función a otra función en uno de sus parámetros.

La derivada primera dy/dx, de una función y=f(x) en un punto x0, se puede calcular


aproximadamente mediante la fórmula

dydx=f(x0−2h)−8f(x0−h)+8f(x0+h)−f(x0+2h)12hdydx=f(x0−2h)−8f(x0−h)+8f(x0+h)
−f(x0+2h)12h
donde h un un número pequeño en comparación con x0. Escribir una función
denominada derivada, cuyos parámetros sean la función f, y la abscisa x0 y devuelva el
valor de la derivada de la función f(x) en x0. Tomar h=10-5.

function yp= derivada(f,x0)


h=1e-5;
yp=(f(x0-2*h)-8*f(x0-h)+8*f(x0+h)-f(x0+2*h))/(12*h);
end

En la ventana de comandos, definimos la función y=x3-6x2+3 (anónima) que queremos


derivar y llamamos a la función derivada.

>> f1=@(x) x^3-6*x^2+3;


>> derivada(f1,2)
ans = -12.0000

Calculamos también la derivada segunda de una función en un punto del siguiente modo

15
>> f2=@(x) derivada(f1,x);
>> derivada(f2,2)
ans = 9.8686e-007

Comparamos con el valor exacto

y=x3−6x2+3dydx=3x2−12xd2ydx2=6x−12y=x3−6x2+3dydx=3x2−12xd2ydx2=6x−12
Para x0=2, dy/dx=-12, d2y/dx2=0

Funciones definidas en el mismo fichero

Un fichero función puede contener más de una función. Las funciones se definen una a
continuación de la otra. La primera función es la primaria y tiene el mismo nombre que el
fichero, las otras funciones son secundarias y se denominan subfunciones y pueden estar en
cualquier orden dentro del fichero. Solamente se puede llamar a la función primaria en la
ventana de comandos o por otras funciones. Cada función tiene sus propias variables que
son locales a la función, no se puede acceder a las variables de una subfunción desde la
función primaria o desde otra subfunción. No se puede acceder a las variables de la función
primaria desde una subfunción.

Las subfunciones permiten organizar tareas grandes en otras más pequeñas.

Más adelante veremos la utilidad de estas funciones cuando los programas sean más largos
y complejos, de momento vamos a ver un ejemplo que nos permita vislumbrar como se
definen y llaman las subfunciones.

Ecuación de segundo grado


ax2+bx+c=0
Las raíces son  x1 y x2 y tienen las siguientes propiedades:

x1=−b+√ b2−4ac 2ax2=−b−√ b2−4ac 2ax1+x2=−bax1⋅x2=cax1=−b+b2−4ac2a 


x2=−b−b2−4ac2ax1+x2=−ba  x1·x2=ca
Vamos a crear una función que nos permita comprobar las propiedades de las raíces de una
ecuación de segundo grado, y dos subsunciones, la primera calcula la raíz x1 y la segunda la
raíz x2.

En el editor de funciones creamos la función comprobar_raices, a la que se le pasa los


coeficientes a, b y c de la ecuación de segundo grado y devuelve los cocientes -b/a y c/a de
la suma y producto de las dos raíces x1 y x2. Guardamos el código de la función
primaria comprobar_raices y de las subfunciones calcula_raiz1 y calcula_raiz2 en el
fichero comprobar_raices.m

function [r1,r2]=comprobar_raices(a,b,c)
x1=calcula_raiz1(a,b,c);

16
x2=calcula_raiz2(a,b,c);
r1=x1+x2;
r2=x1*x2;
end

function raiz=calcula_raiz1(a,b,c)
raiz=(-b+sqrt(b*b-4*a*c))/(2*a);
end

function raiz = calcula_raiz2(a,b,c)


raiz=(-b-sqrt(b*b-4*a*c))/(2*a);
end

Para comprobar las raíces de la ecuación de segundo grado x2-x-6=0, llamamos a la


función comprobar_raices y le pasamos los coeficientes 1,-1,-6 y nos devolverá -b/a=1
y c/a=-6

>> [b_a,c_a]=comprobar_raices(1,-1,-6)
b_a = 1
c_a = -6

Funciones anidadas
Una función anidada es una función definida dentro de otra función. La función primaria y
las anidadas deben obligatoriamente terminar con end

Las funciones anidadas tienen acceso a las variables de la función primaria y la función
primaria tiene acceso a las variables definidas por la función anidada.

Una función anidada puede contener otra y así sucesivamente, pero este proceso puede
llevar a confusión. Existen reglas para llamar a una función anidada dentro de otra pero no
tiene por el momento interés para el lector.

En el editor de funciones creamos la función comprobar_raices1, a la que se le pasa los


coeficientes a, b y c de la ecuación de segundo grado y devuelve los cocientes -b/a y c/a de
la suma y producto de las dos raíces x1 y x2. Guardamos el código de la función
primaria comprobar_raices1 y de las subfunciones calcula_raiz1 y calcula_raiz2 en el
fichero comprobar_raices1.m

function [r1,r2]=comprobar_raices1(a,b,c)
dis=sqrt(b*b-4*a*c);
calcula_raiz1;
calcula_raiz2;
r1=x1+x2;

17
r2=x1*x2;
function calcula_raiz1
x1=(-b+dis)/(2*a);
end
function calcula_raiz2
x1=(-b-dis)/(2*a);
end
end

Vemos que las funciones anidadas calcula_raiz1 y calcula_raiz2 tienen acceso a los


parámetros a, b y c de la función primaria, que son variables locales a la
función comprobar_raices y también, a la variable local dis, que guarda el discriminante de
la ecuación de segundo grado. Por otra parte, la función primaria tiene acceso a las
variables x1 y x2 declaradas en cada una de las funciones anidadas.

Estas funciones anidadas no precisan de variables de entrada y no devuelven nada.

Para comprobar las raíces de la ecuación de segundo grado x2-x-6=0, llamamos a la


función comprobar_raices1 y le pasamos los coeficientes 1,-1,-6 y nos devolverá -b/a=1
y c/a=-6

>> [b_a,c_a]=comprobar_raices(1,-1,-6)
b_a = 1
c_a = -6

Como ejercicio se porpone al lector crear la función estadistica_1, que devuelva la media y


la desviación estándar, cuando se le pasa un vector de datos. El valor medio se calculará
mediante la función anidada media y la desviación estándar mediante la función
anidada desviacion.

En primer lugar, creamos la función estadistica_1, y dos funciones auxiliares: la


función mediay la función desviacion en el mismo fichero estadistica_1.m

function [med,des]=estadistica_1(datos)
n=length(datos);
med=media(datos,n);
des=desviacion(datos,med,n);
end
%calcula la media del vector de datos
function res=media(x,num)
res=sum(x)/num;
end
%calcula la desviación estándar

18
function res=desviacion(x,m,num)
xd=x-m;
xd_suma=sum(xd.^2);
res=sqrt(xd_suma)/(num-1);
end

Ahora trasladamos las funciones media y desviacion al interior de la función estadistica _1.

function [med,des]=estadistica_1(x)
n=length(x);
media;
desviacion;
%calcula la media del vector de datos
function media
med=sum(x)/n;
end
%calcula la desviación estándar
function desviacion
xd=x-med;
xd_suma=sum(xd.^2);
des=sqrt(xd_suma)/(n-1);
end
end

En la ventana de comandos probamos las dos versiones de la función estadistica_1.

>> [med,des]= estadistica_1([1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77])
med =
1.7690
des =
0.0713

Funciones de scilab
Scilab tiene predefinidas muchas funciones matemáticas. A continuación está la lista de las
funciones elementales más comunes.
abs : valor absoluto:
Seqüência de Chamamento
t=abs(x)

19
Parâmetros
x

matriz ou vetor de reais ou complexos

matriz ou vetor de reais

Descrição

abs(x) é o valor absoluto dos elementos de x. Quando x é de complexos, abs(x) é o módulo


complexo (magnitude) dos elementos de x.

Exemplos
abs([1,%i,-1,-%i,1+%i])

acos : arcocoseno :
Seqüência de Chamamento
[t]=asin(x)
Parâmetros
x

vetor ou matriz de reais ou complexos

vetor ou matriz de reais ou complexos

Descrição

As entradas de t são os arcos-senos das entradas correspondentes de x. O domínio de


deifinição é [-1, 1]. A função toma valores em conjuntos

Exemplos
A=[1,2;3,4]
sin(asin(A))

acosh : arcocoseno hiperbólico

20
Seqüência de Chamamento
[t]=acosh(x)
Parâmetros
x

vetor de reais ou complexos

vetor de reais ou complexos

Descrição

Os componentes do vetor t são os arcos-cosenos hiperbólicos das entradas correspondentes


do vetor x. O domínio de definição é ]1,+infinito[. A função toma valores em conjuntos.

Exemplos
x=[0,1,%i];
cosh(acosh(x))

3. Realice los siguientes programas:

Un programa que capture una medida de capacitancia en faradios y la exprese en el


submúltiplo ó múltiplo más adecuado.
Ejemplo:
Valor que ingresa: 0,003
Valor devuelto: 3 mili faradios

Un programa que permita ingresar el valor de los ángulos internos de un triángulo,


determine si es factible construir y el tipo de triángulo (isósceles, equilátero y
escaleno).
#include<stdio.h>
> int main(void){
> int a, b, c;

21
> printf("\n Ingrese primer num ");
> scanf("%d",&a);
> setbuf ( stdin, NULL );
> printf("\n Ingrese segundo num ");
> scanf("%d",&b);
> setbuf ( stdin, NULL );
> printf("\n Ingrese tercer num ");
> scanf("%d",&c);
> setbuf ( stdin, NULL );
> if(a==b&&a==c)
>{
> printf("\n El triangulo es equilatero");
>}
> else if(a==b||a==c||b==c)
>{
> printf("\n El triangulo es isosceles");
>}
> else if(a!=b&&a!=b&&b!=c)
>{
> printf("\n El triangulo es escaleno");
>}
> setbuf ( stdin, NULL );
> getchar();
>
>}
4. Crear y publicar un video (en su cuenta de youtube), donde se evidencia que tiene
instalado Matlab, explique el entorno de trabajo y a la vez explique las operaciones
realizadas en el ítem 2, el código de los programas desarrollados en el ítem 3.

22

Potrebbero piacerti anche