Manual Matlab 2013
Manual Matlab 2013
Manual Matlab 2013
>> syms x a
>> limit((x-1)/(x^(1/2)-1),x,1)
45
ans = 2
>> limit((x-(x+2)^(1/2))/((4*x+1)^(1/2)-3),2)
ans = 9/8
10. Calculamos la derivada de la function log(sen(2x)).
>> pretty(diff('log(sin(2*x))','x'))
cos(2 x)
2 --------
sin(2 x)
>> pretty(simple(diff('log(sin(2*x))','x')))
2
--------
tan(2 x)
EJERCICIOS PROPUESTOS
1. Resuelva el sistema:
2x + 3y = 4
5x 2y = 6
2. Resuelva la ecuacin cbica 5x
3
+ 2x
2
- 3x + 1 = 0;
3. Obtenga la solucin de la ecuacin diferencial ordinaria: y-x-y = 0, y(0)=1
4. Integre la funcin f(x) = x sen(x)
5. Con cuantos decimales muestra el resultado el comando :
>> format long
6. Con cuanto decimals se muestra el resultado?
>> vpa(sqrt(2), 100)
7. Cual es el resultado de lo sigiente?
>> 2/0
8. Indique el tipo de variable en cada caso:
>> x=3
46
>> x='mensaje'
>> syms x
>> x=[2 7 4]
>> x=2+3i
9. Indique que realiza cada uno de estos comandos:
>> clear a b c
>> clc
>> pwd
10. Indique el tipo de variable en cada caso:
>> save prueba
>> load prueba
>> delete prueba.m
>> quit
47
EVALUACION
1. Indique le tipo de matriz:
>> a=ones(5)
2. Indique le tipo de matriz:
>> a=eye(5)
3. Indique lo que genera cada comando:
>> x=rand
b=rand(4,5)
4. Que nos muestra los siguientes comsndos?
>> a=[3, 2; 1, 4];
>> b=[8, 6; 5, 7];
>> c=a'
5. Que evala los siguientes comandos?
>> a=[2, -3, 0, 5]
>> y=polyval(a,4)
6. Que realiza los siguientes comandos?
>> x=[1 2 4 5 7];
>> y=[5 3 6 7 4];
>> a=polyfit(x,y,2);
7. Que realiza el siguiente comando?
>> u=diff(f)
8. Que realiza el siguiente comando?
>> v=int(f)
9. Que realiza el siguiente comando?
>> r=int(f, 0, 2)
10. Dar un ejemplo de aplicacin con cada uno de los siguientes comandos?
>>input
>>disp
48
Bibliografia Referencial
1. NAKAMURA, SHOICHIRO Analisis Numrico y Visualizacin con Matlab. Editorial
Prentice may. Mxico. 1997.
2. MORALES MARCHENA, HERN. Mtodos numricos y Visualizacin Grfica Editorial
Megabit. Peru. 2005.
3. PEREZ, CESAR Matlab y sus Aplicaciones en las Ciencias y la Ingeniera Editores
Prentice. Espaa. 2002 .
49
omtrica 2sin(a)cos(a) = sin2(a). La
CAPITULO IV GRAFICAS
CON MATLAB
OBJETIVOS: El participante aprender a hacer grficos con el Matlab
CONTENIDOS: Graficos en el plano, graficos bidimensioanles y grficos tridimensionales.
Matlab ofrece una gama amplia de opciones a la hora de realizar representaciones
grficas. Permite realizar grficos de curvas planas y superficies, posibilitando la
agrupacin y superposicin.
Grficos en el Plano
Comandos Descripcin
plot(x,y) Grafica el conjunto de puntos (x,y) en un sistema
cartesiano
bar(x,y) Grafico de barras vertical, donde y representa la
frecuencia y x define los espacios en el eje x.
barh(x,y) Grafico de barras horizontal.
stem(x,y) Grafico de bastones verticales.
stairs(x,y) Grafica una curva escalonada.
polar(x,y) Dibuja una curva en coordenadas polares. y=y(x)
pie(x) Realiza el grafico de sectores relativo al vector x.
rose(x) Dibuja el histograma angular relativo al vector x.
Los grficos son una poderosa forma visual de interpretar datos. Realizar la grfica de una
funcin seno durante un perodo, por ejemplo:
y = sin(x) para 0<=x<=2pi.
En primer lugar, creamos 30 puntos entre 0 y 2pi.
0.8
0.6
>> x = linspace(0,2*pi,30) ; % crea 30 puntos entre 0 y 2pi.
0.4
0.2
>> y = sin(x); % calcula el seno de los puntos en x. 0
>> plot(x,y) % la orden plot genera una grafica :
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7
Se pueden graficar al mismo tiempo muchas curvas suministrando parejas adicionales de
argumentos a plot.
1
0.8
0.6
0.4
>> x = linspace(0,2*pi,30) ;
0.2
>> y = sin(x);
0
>> z = cos(x) ;
>> plot(x,y,x,z)
-0.2
-0.4
-0.6
-0.8
El siguiente ejemplo ilustra la identidad trigon grfica de
0 1 2 3 4 5 6 7
2sin(a)cos(a) se representa utilizando lneas i trazos.
50
y
z
>> plot(x,y,x,2*y.*z,'r*')
>> grid % para colocar una rejilla en los puntos marcados sobre los ejes
>> xlabel(Variable Independiente x) % para colocar una etiqueta sobre el eje x
>> ylabel ( Variable dependiente) % para colocar una etiqueta sobre el eje y
>> title ( 2sin(x)cos(x) = sin(2x) ) % para colocar un titulo sobre la grafica actual
2sin(x)cos(x) = sin(2x)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7
Variable Independiente X
Estilo de lneas, marcadores y colores
Con MATLAB se puede especificar los colores y los estilos de lnea que necesita dando un
argumento adicional a plot despus de cada pareja de arrays de datos. El argumento
opcional adicional es una cadena de caracteres formada por 1, 2 3 caracteres de la tabla
siguiente:
Smbolo Color Smbolo Estilo de lnea
y amarillo
m magenta
c turquesa
r rojo
g verde
b azul
w blanco
k negro
. punto
o crculo
x marca - x
+ ms
* estrella
* lnea slida
: lnea punteada
-. lnea punto-raya
-- lnea de trazos
>> plot(x,y,'bo',x,z,'r--',x,y,'k*',x,z,'c.')
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
Para aadir una etiqueta identificando
la curva del seno en la localizacin (2.5,0.7):
>> text (2.5,0.7,sin(x))
-0.6
-0.8
-1
1
0.8
0.6
0.4
0.2
0 1 2 3 4 5 6 7
sine and cosine curves
sin(x)
0
-0.2
-0.4
-0.6
-0.8
51
grafico de y=sin(x.
2
1
0.8
>> x=-1 :0.1 :5;
>> y=sin(x.^2);
>> plot(x,y)
>> grid on
>> title('grafico de y=sin(x.^2)')
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1 0 1 2 3 4 5
histograma de una curva en forma de campana de datos gausianos:
grafico de Barras
1
>> x=-3 :0.2 :3;
>> y=exp(-x.^2);
>> bar(x,y)
>> grid on
>> title('grafico de Barras')
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
-4 -3 -2 -1 0 1 2 3 4
450
Histograma de Datos Gausianos
>> x=-2.9:0.2:2.9; % especifica los elementos a usar
>> y=randn(5000,1); % crea 5000 puntos aleatorios
>> hist(y,x) % dibuja el histograma
>> title('Histograma de Datos Gausianos')
400
350
300
250
200
150
100
50
0
-3 -2 -1 0 1 2 3
grafico Barras Horizontal
4
>> x=-3 :0.2 :3;
>> y=cos(-x.^3)-2*x+1;
2
>> barh(x,y);
1
>> grid on 0
>> title('grafico Barras Horizontal')
-2
-3
-4
-6 -4 -2 0 2 4 6 8
grafico tipo stairs
1
0.8
0.6
>> x=0 :0.2 :10;
>> y=sin(x);
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7 8 9 10
52
>> stairs(x,y);
>> grid on
>> title('grafico tipo stairs')
grficos en coordenadas polares utilizando la orden polar (t, r), donde t es el vector de
ngulos en radianes, r es el radio vector
Polar Plot of sin(2t)cos(2t)
>> t=0 : .01 : 2*pi;
>> r=sin(2*t).*cos(2*t);
>> polar(t,r)
>> title('Coordenadas Polares de: sin(2t)cos(2t))
150
120
90
0.5
60
0.4
0.3
30
0.2
0.1
180 0
210 330
240
270
300
>> y=randn(50,1); % crea algn dato aleatorio
>> stem(y,':') % dibuja una grfica stem con lnea punteada
>> title('Grafico Stern de datos aleatorios')
Ploteo Stern de Datos Aleatorios
3
1.2
1
Ploteo de la Barra de Error
2
0.8
1 0.6
0.4
0
0.2
-1
0
-2
-0.2
-0.5 0 0.5 1 1.5 2 2.5
-3
0 5 10 15 20 25 30 35 40 45 50
Una grfica puede incluir barras de error en los puntos. errorbar (x, y, e) representa. la
grfica del vector x frente al vector y con barras de error especificadas por el vector e.
Todos los vectores deben tener la misma longitud. Para cada punto (x
i
,y
i
), se dibuja una
barra de error una distancia e
i
por encima y e
i
por debajo del punto.
>> x=0:0.1:2; % crea un vector
>> y=erf(x); % y es la funcin error de x
>> e=rand(size(x) )/10; % genera valores de error aleatorios
>> errorbar(x,y,e) % crea la grfica
>> title('Errorbar Plat')
Se pueden representar datos complejos usando compass y feather. Compass (z) dibuja
una grfica que visualiza el ngulo y la magnitud de los elementos complejos de z como
flechas que emanan del origen. Feather (z) representa los mismos datos usando flechas
que emanan de puntos igualmente espaciados sobre una lnea horizontal.
compass (x,y) y feather (x,y) son equivalentes a compass (x+i*y) y feather (x+i*y).
53
>> z=eig(randn(20,20));
>> compass (z)
>> title('Compass Plot of the Eigenvalues of a Random Matrix')
>> feather (z)
>> title (Feacther Plot of Eigenvalues of a Random Matrix)
Compass Plot of the Eigenvalues of a Random Matrix
Feacther Plot of Eigenvalues of a Random Matrix
4
120
90
6
60
3
4 2
150 30
2
1
0
180 0
-1
210
-2
330
-3
240
270
300 -4
-5 0 5 10 15 20 25
La orden subplot (m, n, p) subdivide la ventana de la figura actual en una matriz mxn de las
reas de representacin grfica y escoge como activa el rea p-sima. Las subgrficas se
numeran de izquierda a derecha a lo largo de la lila superior, luego la segunda fila, etc. por
ejemplo:
% ejemplo de Grafico en multiples ejes
>> x=linspace(0,2*pi,30);
>> y=cos(x);
>> z=sin(x);
>> a=y.*z+58;
>> f=tan(x);
>> g=z+a+f;
>> u=y.*z.*a;
>> subplot(3,2,1), plot(x,y,'r-'), title( 'Grafico No 1' );
>> subplot(3,2,2), plot(x,z,'mo'), title( 'Grafico No 2' );
>> subplot(3,2,3), plot(x,a,'g*'), title( 'Grafico No 3' );
>> subplot(3,2,4), plot(x,f,'b+'), title( 'Grafico No 4' );
>> subplot(3,2,5), plot(x,g,'k--'), title( 'Grafico No 5' );
>> subplot(3,2,6), plot(x,u,'c:'), title( 'Grafico No 6' );
Grafico No 1
Grafico No 2
1 1
0 0
-1
58.5
0 2 4 6 8
Grafico No 3
-1
0 2 4 6 8
Grafico No 4
20
58 0
57.5
0 2 4 6 8
-20
0 2 4 6 8
54
Grfica de Superficies
Plot3(x,y,z) : Realiza una grafica de un conjunto de puntos x,y,z en un sistema de 3
dimensiones.
El ejemplo siguiente genera una grafica 3-D con una rejilla.
>> x = linspace(0,2*pi,30) ; % crea 30 puntos entre 0 y 2pi.
>> y = sin(x); % calcula el seno de los puntos en x.
>> z = cos(x) ;
>> plot3(y,z,x), grid
>> t = -8:0.2:8 ; % crea puntos entre -8 y 8.
>> x = t;
>> y = 3-t ;
>> z=cos(t);
>> plot3(x,y,z), grid
1
0.5
0
-0.5
-1
15
10 10
5
5
0
0
-5
-5 -10
mesh(x,y,z) : Grafica una superficie explicita z=f(x,y) con los arreglos x, y e z.
Z=X.*exp(-x.
2
y.
2
)
>> [x,y] = meshgrid(-2:0.2:2);
>> z = x.*exp(-x.^2-y.^2)
>> mesh(x,y,z)
>> title('Z=X.*exp(-x. ^2 y.^2)');
0.5
0
-0.5
2
1
2
0
1
0
-1
-1
-2 -2
55
e
j
e
cylinder('f') : Grafica una superficie de revolucin generada por la rotacin de la funcin
f=f(t) en el intervalo definido para t.
explicita z=f(x,y) con los arreglos x, y e z.
2 + sin( t )
1
>> t = 0:0.2:7 ;
>> cylinder(2+sin(t));
>> title(' 2 + sin( t )');
>> xlabel('eje x') ; ylabel('eje y') ; zlabel('eje z')
0.8
0.6
0.4
0.2
0
4
2
0
-2
eje y
-4 -4
4
2
0
-2
eje x
56
EJERCICIOS PROPUESTOS
1. Realizar el siguiente grfico.
function y=prueba(x)
y = 1./((x-.3).^2+.01)+1./...
((x-.9).^2+.04)-6;
>> x=-1:0.1:2;
>> plot(x,prueba(x))
2. Realizar el siguiente grfico con los datos que Ud. sugiera.
3. Ingrese los datos para realizar el siguiente grfico.
120
90
2
60
1.5
150 1 30
0.5
180 0
210 330
240
270
300
57
EVALUACION
1. Realizar el grafico en coordenadas polares de la siguiente ecuacin:
r
2
= u cos2u
2. Grfica la circunferencia con centro en el origen:
x
2
+ y
2
= 16
3. Grafica la siguiente hiprbola con eje focal en el eje x:
x
y
= 1
4 9
4. Grfica la siguiente parbola con el eje focal en x:
x = 1/ 4( y
2
)
5. Grfica la elipse con el eje focal x:
x
+
y
= 1
20 6
6. Grfica la siguiente funcin:
7. Grfica la siguiente funcin:
f(z) =z
2
8. Grfica los resultados de unas elecciones con 5 participantes en un grfico
tipo pastel.
9. Realiza con los datos anteriores un diagrama de sectores 3D.
58
10. Realizar un grfico para generar un histograma con 1000 nmeros aleatorios
siguiendo la normal N(0; 1)
59
Bibliografa Referencial
1. PEREZ, CESAR Matlab y sus Aplicaciones en las Ciencias y la Ingeniera Editores
Prentice. Espaa. 2002 .
2. NAKAMURA, SHOICHIRO Analisis Numrico y Visualizacin con Matlab. Editorial
Prentice may. Mxico. 1997.
3. MORALES MARCHENA, HERN. Mtodos numricos y Visualizacin Grfica
Editorial Megabit. Peru. 2005.
60
CAPITULO V PROGRAMACION
EN MATLAB
OBJETIVOS: El participante aprender a hacer programas en el Matlab
CONTENIDOS: Estructuras de control secuencial, bucles, bifurcaciones, sentencia if
end, for end, while end, case end,
PROGRAMACIN INFORMTICA
Programacin informtica, accin de programar, es decir, de establecer una serie de
instrucciones para que el ordenador o computadora ejecute una tarea.
Previamente hay que realizar una serie de trabajos que tienen por objeto la definicin de la
tarea, el anlisis de la informacin que se quiere obtener (informacin de salida) y de los
datos que se precisan para ello (informacin de entrada), y el establecimiento del algoritmo,
o procedimiento de clculo, que va a permitir transformar una informacin en otra. Para
esta labor de anlisis, el programador utiliza una serie de herramientas, entre las que
destacan los diagramas de flujo y las tablas de decisin.
Resuelto del problema desde el punto de vista lgico, se utiliza un lenguaje de
programacin para codificar la secuencia de instrucciones que el ordenador debe ejecutar
para realizar la tarea.
Escrito el programa, hay que verificarlo, es decir, someterlo a pruebas que determinen si
puede realizar la tarea prevista, lo que se consigue simulando situaciones que se puedan
comprobar; a esto se le denomina depuracin. Una vez verificado, el programa se debe
optimizar, con el fin de utilizar los recursos del sistema del modo ms eficiente.
PROGRAMACIN EN MATLAB
MATLAB es una aplicacin que se puede programar muy fcilmente. De todas formas,
como lenguaje de programacin pronto ver que no tiene tantas posibilidades como otros
lenguajes (ni tan complicadas...). Se comenzar viendo las bifurcaciones y bucles, y la
lectura y escritura interactiva de variables, que son los elementos bsicos de cualquier
programa de una cierta complejidad, previo a ingresar a esta este capitulo se considera
que ya se cuenta con los conocimientos bsicos del matlab.
Bifurcaciones y bucles
61
MATLAB posee un lenguaje de programacin que como cualquier otro lenguaje dispone
de sentencias para realizar bifurcaciones y bucles.
Las bifurcaciones permiten realizar una u otra operacin segn se cumpla o no una
determinada condicin.
La Figura muestra tres posibles formas de bifurcacin.
Los bucles permiten repetir las mismas o anlogas operaciones sobre datos distintos. el
Matlab utiliza la palabra end para finalizar el bucle.
La Figura muestra dos posibles formas de bucle, con el control situado al principio o al final
del mismo. Si el control est situado al comienzo del bucle es posible que las sentencias no
se ejecuten ninguna vez, por no haberse cumplido la condicin cuando se llega al bucle por
primera vez.
Sin embargo, si la condicin est al final del bucle las sentencias se ejecutarn por lo
menos una vez, aunque la condicin no se cumpla. Muchos lenguajes de programacin
disponen de bucles con control al principio (for y while en C/C++/Java) y al final (do
while en C/C++/Java).
En MATLAB no hay bucles con control al final del bucle, es decir, no existe la construccin
anloga a do... while.
62
Las bifurcaciones y bucles no slo son tiles en la preparacin de programas o de ficheros
*.m. Tambin se aplican con frecuencia en el uso interactivo de MATLAB, como se ver
ms adelante en algunos ejemplos.
FUNCIN INPUT
La funcin input permite imprimir un mensaje en la lnea de comandos de MATLAB y
recuperar como valor de retorno un valor numrico o el resultado de una expresin
tecleada por el usuario.
>> n = input('Teclee el nmero de ecuaciones:' )
Teclee el nmero de ecuaciones: 5
n = 5
Otra posible forma de esta funcin es la siguiente (obsrvese el parmetro 's'):
>> nombre = input('Cmo te llamas?','s') %s indica que la entrada que se hara
por teclado es una cadena.
Cmo te llamas? Walter Fuentes Lopez
nombre = Walter Fuentes Lopez
En este caso el texto tecleado como respuesta se lee y se devuelve sin evaluar, con lo
que se almacena en la cadena nombre. As pues, en este caso, si se teclea una frmula,
se almacena como texto sin evaluarse.
FUNCIN DISP
La funcin disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz,
pero sin imprimir su nombre.
En realidad, disp siempre imprime vectores y/o matrices: Las cadenas de caracteres son
un caso particular de vectores. Considrense los siguientes ejemplos de cmo se utiliza:
>> disp(' El programa ha terminado ')
>> A= rand(4,4)
>> disp(A)
Ejectense las sentencias anteriores en MATLAB y obsrvese la diferencia entre las dos
formas de imprimir la matriz A.
>> a=[1:10];
>> b=[-10:-1];
>> disp([a;b])
63
Da como salida:
1 2 3 4 5 6 7 8 9 10
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1
SENTENCIA IF ELSE END
En su forma ms simple, la sentencia if se escribe en la forma siguiente:
if condicin
sentencias
end
Existe tambin la bifurcacin mltiple, en la que pueden concatenarse tantas condiciones
como se desee, y que tiene la forma:
if condicin1
bloque de instrucciones 1
else if condicin 2
bloque de instrucciones 2
else if condicin n
bloque de instrucciones n
else % opcin por defecto para cuando no se
% cumplan las condiciones 1,2,n
bloque de instrucciones final
end
end
end
En esta estructura se ejecuta solamente el primer bloque de instrucciones cuyo valor lgico
sea uno. Si ninguno de los valores lgicos que aparecen es uno entonces MATLAB ejecuta
el bloque de instrucciones final.
Donde la opcin por defecto else puede ser omitida: si no est presente no se hace nada
en caso de que no se cumpla ninguna de las condiciones que se han chequeado.
Una observacin muy importante: la condicin del if puede ser una condicin matricial, del
tipo A==B, donde A y B son matrices del mismo tamao. Para que se considere que la
condicin se cumple, es necesario que sean iguales dos a dos todos los elementos de las
matrices A y B (aij = bij, 1 s i s m, 1 s j s n).
Basta que haya dos elementos aij y bij diferentes para que las matrices ya no sean iguales,
y por tanto las sentencias del if no se ejecuten. Anlogamente, una condicin en la forma
A-=B exige que todos los elementos sean diferentes dos a dos (aij = bij, 1 s i s m, 1 s j s
n).
64
Basta que hubiera dos elementos aij y bij iguales para que la condicin no se cumpla. En
resumen:
if A == B exige que todos los elementos sean iguales dos a dos.
if A ~= B exige que todos los elementos sean diferentes dos a dos.
Como se ha dicho, MATLAB dispone de funciones especiales para ayudar en el chequeo
de condiciones matriciales. Por ejemplo, la funcin isequal (A, B) devuelve un uno si las
dos matrices son idnticas y un cero en caso de que difieran en algo.
Ejemplo con IfEnd
1) Programa que determina si el nmero ingresado por teclado es positivo, negativo o cero.
n=input(' ingresa un numero :');
if n==0;
' el numero es CERO '
else
if n>0
' el numero es POSITIVO '
else
' el numero es NEGATIVO '
end
end
2) Programa que determina si el nmero ingresado por teclado es par o impar.
n=input(' ingresa un numero :');
if n==0;
fprintf (' el numero ingresado es CERO ')
else
if rem(n,2)==0; %obtiene el resto de dividir n entre 2
fprintf (' el numero es PAR ')
else
fprintf (' el numero es IMPAR ')
end
end
4. SENTENCIAFOR END
La sentencia for repite un conjunto de sentencias un nmero predeterminado de veces. La
siguiente construccin ejecuta sentencias con valores de i de 1 a n, variando de uno en
uno.
for i = 1 : n
sentencias
end
65
for i = vector valores
sentencias
end
Donde vector valores es un vector con los distintos valores que tomar la variable i.
for a = 0 : 1 : t
v=[a, a^2,a^3]
for var = vector for a=0 : 1 : t
sentencia 1
sentencia 2 v=[a, a^2,a^3]
. . .
sentencia n
end end
En el siguiente ejemplo se presenta el caso ms general para la variable del bucle (valor _
inicial: incremento: valor _ final); el bucle se ejecuta por primera vez con i =n, y luego i se
va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, en cuyo caso el bucle se
termina:
for i = n : -0.2:1
sentencias
end
En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles
anidados. La variable j es la que vara ms rpidamente (por cada valor de i, j toma todos
sus posibles valores):
for i = 1 : m
for j = 1 : n
sentencias
end
end
Una ltima forma de inters del bucle for es la siguiente (A es una matriz):
for i = A
sentencias
end
En la que la variable i es un vector que va tomando en cada interaccin el valor de una de
las columnas de A.
Cuando se introducen interactivamente en la lnea de comandos, los bucles for se ejecutan
slo despus de introducir la sentencia end que los completa.
66
1 1
2 3
3 6
4 10
5 15
1 0 1
1 1 2
1 2 3
1 3 4
1 4 5
1 5 6
1 6 7
1 7 8
1 8 9
1 9 10
1 10 11
1 11 12
1 12 13
clc
5 5 0
n=input('ingrese el numero:');
6 5 1
for m=n:n+12;
7 5 2
d=m-n;
8 5 3
disp([m n d])
9 5 4
end
10 5 5
11 5 6
12 5 7
13 5 8
14 5 9
15 5 10
16 5 11
17 5 12
El siguiente ejemplo creara un bucle que despus realizar una suma de los 5 primeros
nmeros.
En un archivo m-file: salida
s=0;
for n=1:5
s=n+s;
disp([n s ])
end
Realizar un programa haciendo uso de la instruccin for... end, para que presente en
pantalla la tabla de la suma de un nmero que se ingrese por teclado.
En un archivo m-file:
n=input('ingrese n:');
for i=0:12;
s=n+i;
disp([n,i,s])
end
En un archivo m-file: para presentar la tabla de la resta
ingrese n:1
ingrese el numero:5
67
5. SENTENCIA WHILE
El bucle while o bucle mientras es una estructura de la mayora de los lenguajes de
programacin estructurados cuyo propsito es repetir un bloque de cdigo mientras una
condicin se mantenga verdadera.
Java. Su sintaxis es la siguiente:
While condicin
Sentencias
end
Donde condicin puede ser una expresin vectorial o matricial.
Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en
condicin, es decir, mientras haya algn o algunos elementos true.
El bucle se termina cuando todos los elementos de condicin son false (es decir, cero).
EJEMPLOS ILUSTRATIVOS
Programa que te permite obtener un tabla de multiplicacin
ingrese el nmero:5
5 1 5
5 2 10
clc
5 3 15
n=input('ingrese el nmero:');
5 4 20
while n<=0; %restringe negativos y 0
5 5 25
n=input('ingrese el nmero:');
5 6 30
end
5 7 35
for f=1:12;%crea el factor multiplicador
5 8 40
p=n*f; %creacion de los productos
5 9 45
disp([n f p])
5 10 50
end
5 11 55
5 12 60
Programa para determinar el nmero de divisores
clc
n=input('ingrese valor:');
68
c=0;%contador para el numero de divisores
for g=(1:n);
if mod(n,g)==0%bucle solo para resto 0
d=n;
c=c+1;
end
end
'el numero de divisores es'
disp([c])
Programa para hallar el factorial de un nmero
%programa para sacar el factorial de un nmero
clc
n=input('ingrese el numero:');%ingreso del nmero
fa=1;
while n<0;%restriccin para los negativos'
'el numero que ingreso es negativo no tiene factorial'
n=input('ingrese el numero:');
end
if n==0;%restriccin para el 0
Factorial=fa
else
for i=1:n;%bucle de multiplicacin hasta n
fa=fa*i;
if i==n;
Factorial=fa%resultado final
end
end
end
ingrese valor:7
ans =
el numero de divisores es
2
ingrese el numero:-5
ans =
el numero que ingreso es negativo no tiene factorial
ingrese el numero:5
Factorial =
120
Program para realizar un tabla de divisin
clc
n=input('ingrese el nmero:');
while n<=0
'el numero ingresado debe ser mayor que cero'
n=input('ingrese el nmero:');
end
for r=1:12;
69
5 5 1
10 5 2
15 5 3
20 5 4
25 5 5
30 5 6
35 5 7
40 5 8
45 5 9
50 5 10
55 5 11
60 5 12
D=n*r;
disp([D n r])
end
ingrese el nmero:-6
ans =
el numero ingresado debe ser mayor que cero
ingrese el nmero:5
Programa para convertir de grados Celsius a grados kelvin
%Programa para convertir grados celsius a kelvin
clc
n=input('ingrese n:');%grados celsius
d=n-5;
for n=d:n+5;
kelvin=n+273;%grados kelvin
disp([n kelvin])
end
ingrese n:10
5 278
6 279
7 280
8 281
9 282
10 283
11 284
12 285
13 286
14 287
15 288
Programa para hallar el tiempo de encuentro de dos mviles a una cierta distancia
clc
da=0;%distancia inicial del movil 1
db=0;%distancia inicial del movil 2
t=0;%contador para el tiempo
v1=input('ingrese velocidad del movil 1:');
while v1 <= 0%restringe velocidades negativas y 0
'ingrese velocidad positiva'
v1=input('ingrese velocidad del movil 1:');
end
v2=input('ingrese velocidad del movil 2:');
while v2 <= 0%restringe velocidades negativas y 0
'ingrese velocidad positiva'
70
v2=input('ingrese velocidad del movil 2:');
end
d=input('ingrese la distancia de separacion:');
while d <= 0%restringe distancias negativas y 0
'ingrese valores positivos'
d=input('ingrese la distancia de separacion:');
end
disp([t da db d])
while da+db<%Bucle hasta el encuentro
t=t+1;%creador del tiempo
da=v1*t;
db=v2*t;
disp([t da db d])%imprime los datos correspond.
end
ingrese velocidad del movil 1:20
ingrese velocidad del movil 2:30
ingrese la distancia de separacion:500
0 0 0 500
1 20 30 500
2 40 60 500
3 60 90 500
4 80 120 500
5 100 150 500
6 120 180 500
7 140 210 500
8 160 240 500
9 180 270 500
10 200 300 500
Programa para hallar la grfica de cualquier ecuacin con una sola variable
En un archivo m-file:
clc
x=linspace(-10,10,200);
a=input('ingrese ecuacion:','s')
fplot(a ,[-100 100])
El grfico que sale es:
ingrese ecuacion:x^2-5
a =
x^2-5
71
10000
8000
6000
4000
2000
0
-2000
-100 -80 -60 -40 -20 0 20 40 60 80 100
Programa para ordenar 3 nmeros en forma ascendente
%programa para ordenar 3 nmeros en forma ascendente
clc
n1=input('ingrese el primer nmero:');
n2=input('ingrese el segundo nmero:');
n3=input('ingrese el tercer numero:');
if n1 ~= n2 & n2 ~= n3;%restriccin para nmeros iguales
if n1>=n2 & n2>=n3;
disp([n3 n2 n1])
end
if n1>=n2 & n3>=n2 & n1>=n3;
disp([n2 n3 n1])
end
if n2>=n1 & n1>=n3;
disp([n3 n1 n2])
end
if n2>=n1 & n3>=n1 & n2>=n3;
disp([n1 n3 n2])
end
if n3>=n1 & n1>=n2;
disp([n2 n1 n3])
end
if n3>=n1 & n2>=n1 & n3>=n2;
disp([n1 n2 n3])
end
else
disp([n1 n2 n3])%en caso contrario si son iguales
end
Programa para hallar y mostrar los divisores de un nmero
%programa para hallar los divisores de un nmero
clc
n=input('ingrese el nmero :');%ingreso del nmero
while n<=1;%restriccin para el cero y negativos
'ingrese numeros mayores que 1'
n=input('ingrese el nmero:');
end
for g=1:n;
72
if rem(n,g)==0;%resto d divisin cero
disp([g])
end
end
Programa para saber si un nmero es primo mostrando sus divisores
%programa para hallar los divisores de un nmero
n=input('ingrese el nmero :')
c=0;%contador de los divisores
while n<=1;%restriccin para el cero y negativos
n=input('ingrese el nmero:');
end
for g=1:n;
if rem(n,g)==0;%resto d divisin cero
c=c+1;
disp([g])
end
end
if c==2
'primo'
else
'divisible'
end
Programa para saber si un nmero es perfecto mostrando sus divisores
n=input('ingrese el numero:');
while n<=1
n=input('ingrese el numero:');
end
D=n;
sum=0;
for d=1:n;
resto=rem(D,d);
if resto==0
sum=sum+d;
disp([d])
end
end
if sum==2*d;
'perfecto'
else
' no es perfecto'
end
Programa para promediar un nmero determinado de notas.
n=input('cuantas notas se va a promediar:');
while n<1;
'el numero de notas no es promediable'
n=input('cuantas notas se va a promediar:');
end
sum=0;
c=0;
73
nota=1;
while nota>-1 & nota<=20
while c<n
nota=input('ingrese nota:');
if nota>=0 & nota<=20
sum=sum+nota;
c=c+1;
end
end
nota=100;
end
p=sum/c;
'promedio:'
disp(p)
Programa para la divisin de nmeros hasta el 12
%programa para hallar la tabla de dividir hasta el 12
n=input('ingrese el nmero:');
while n<=0
'el numero ingresado debe ser mayor que cero'
n=input('ingrese el nmero:');
end
for r=1:12;
D=n*r;
disp([D n r])
end
Programa que ejecuta sentencias con valores de: x de 1 hasta 9.
for x=1:2:9
y=x.^2 - 1;
disp([x , y ]);
end
clear all
clc
for n = 1 : 5
x(n) = sin ( n*pi / 10 )
end
Programa funcin que devuelve una sola variable
Guardar en un archivo con el nombre: cubica.m
function [y]=cubica(x)
y=2*x^3+8;
para utilizar esta funcin digitar desde la ventana de comandos:
>> cubica(5)
74
ans = 258
Programa funcin que devuelve multiples variables
Guardar en un archivo con el nombre: media_ds.m
function [M,S]=media_ds(x)
n=length(x);
M=sum(x)/n
S=sqrt(( sum(x.^2/n)-M^2 ))
para utilizar esta funcin digitar desde la ventana de comandos:
>> x= [1 2 ]
>> media_ds(x);
M = 1.5000
S = 0.5000
Programa funcin con varias opciones, guardar en un archivo con el nombre:
numero.m
function numero(x)
if x > 0
opcion = 1;
end
if x < 0
opcion = 2;
end
if x == 0
opcion = 3;
end
switch opcion
case 1
disp('x un numero positivo' );
case 2
disp('x un numero negativo' );
otherwise
disp('x es nulo' );
end
clear all
para utilizar esta funcin numero digitar desde la ventana de comandos:
>> numero(-1)
programa con el commando CASE END
75
clc
clear all
x=0;
while x<=0 | x>=8
x=input('ingrese un nmero entre 1 y 7: ');
end
if x==1
opcion=1;
end
if x==2
opcion=2;
end
if x==3
opcion=3;
end
if x==4
opcion=4;
end
if x==5
opcion=5;
end
if x==6
opcion=6;
end
if x==7
opcion=7;
end
switch opcion
case 1
disp('DIA DOMINGO');
case 2
disp('DIA LUMES');
case 3
disp('DIA MARTES');
case 4
disp('DIA MIERCOLES');
case 5
disp('DIA JUEVES');
case 6
disp('DIA VIERNES');
otherwise
disp('DIA SABADO');
end
Programa para obtener las races de polinomios
P(x)= x
3
-2x -5
>> p=[1 0 -2 -5];
>> r= roots(p)
r =
76
E
N
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i
Programa para obtener la derivada de un polinomio
P(x)= 2x
4
x
3
+3x
2
+5x +9
>> P=[2 -1 3 5 9 ];
>> polyder(P)
ans = 8 -3 6 5
esto es: P(x)= 8x
3
3x
2
+6x +5
Programa para obtener la derivada de un producto de polinomios
P(x)= x
2
+5x +9 y Q(x)=x
2
+x -1
>> P=[1 -5 9];
>> Q= [1 1 -1];
>> polyder(P,Q)
ans = 4 -12 6 14
esto es: P(x)= 4x
3
12x
2
+6x +14
Realizar un programa para el ajuste de datos a un modelo lineal, polinomial
cuadrtico, polinomial cbico y cuarto grado.
Se realiza una prueba de funcionamiento de un equipo en la cual se toman datos de la
temperatura en grados Fahrenheit durante los 5 primeros segundo y se obtienen los
siguientes datos
Tiempos 0 1 2 3 4 5
Temperaturas 0 20 60 68 77 110
REGRESION LINEAL
120
x = 0:5;
y = [0, 20, 60, 68, 77, 110];
coef = polyfit(x, y, 1)
m=coef(1);
b=coef(2);
y1 = m.*x+b;
plot(x, y1, x, y, 'ms'), title('REGRESION LINEAL')
xlabel ('TIEMPO EN SEGUNDOS')
Ylabel ('TEMPERATURA EN oF')
100
80
60
40
20
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
TIEMPO EN SEGUNDOS
Coef = 20.8286 3.7619 % con este dato se obtiene la ecuacin:
Se observa que el modelo lineal ajustado tiene la ecuacin:
77
E
N
T
E
M
P
E
R
A
T
U
R
A
E
N
Y = 20.8286 x + 3.7619
Para realizar un mejor ajuste de datos usaremos un modelo polinomial cuadrtico,
para lo cual se utilizar el siguiente programa.
x = 0:5;
y = [0, 20, 60, 68, 77, 110];
coef = polyfit(x, y, 2)
a=coef(1);
b=coef(2);
c=coef(3);
y2 = a*x.^2 + b * x + c;
plot(x, y2, x, y, 'r*'), title('REGRESION LINEAL')
xlabel ('TIEMPO EN SEGUNDOS')
Ylabel ('TEMPERATURA EN oF')
120
100
80
60
40
20
0
REGRESION LINEAL
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
TIEMPO EN SEGUNDOS
coef = -1.0536 26.0964 0.2500 % con estos coeficientes se obtiene la ecuacin:
Se observa que el polinomio de segundo grado ajustado tiene la ecuacin:
y = -1.0536 x
2
+ 26.0964 x + 0.2500
Para realizar un mejor ajuste de datos usaremos un modelo polinomial cbico, para
lo cual se utilizar el siguiente programa.
x = 0:5;
y = [0, 20, 60, 68, 77, 110];
coef = polyfit(x, y, 3)
a=coef(1);
b=coef(2);
c=coef(3);
d=coef(4);
y3 = a*x.^3 + b*x.^2 + c * x + d;
plot(x, y3, x, y, 'oc'), title('REGRESION LINEAL')
xlabel ('TIEMPO EN SEGUNDOS')
Ylabel ('TEMPERATURA EN oF')
120
100
80
60
40
20
0
-20
REGRESION LINEAL
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
TIEMPO EN SEGUNDOS
Coef = 1.1019 -9.3175 41.1918 -3.0556 % con estos coeficientes se obtiene la
ecuacin.
Se observa que el polinomio de tercer grado ajustado tiene la ecuacin:
y = 1.1019 x
3
-9.3175x
2
+ 41.1918x -3.0556
Para realizar el mejor ajuste de datos usaremos un modelo polinomial de cuarto
grado, para lo cual se utilizar el siguiente programa.
78
T
E
M
P
E
R
A
T
U
R
A
E
N
o
F
x=[0 1 2 3 4 5 ];
y = [0 20 60 68 77 110];
coef = polyfit(x, y, 4)
a=coef(1);
b=coef(2);
c=coef(3);
d=coef(4);
e=coef(5);
y4 = a*x.^4 + b*x.^3 + c*x.^2 + d*x + e;
plot(x, y4, x, y, 'o'), title('REGRESION LINEAL')
xlabel ('TIEMPO EN SEGUNDOS')
Ylabel ('TEMPERATURA EN oF')
coef = 1.5625 -14.5231 38.6736 -3.4511 -0.3770
120
100
80
60
40
20
0
-20
REGRESION LINEAL
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
TIEMPO EN SEGUNDOS
Se observa que el polinomio de cuarto grado ajustado tiene la ecuacin:
y = 1.5625x
4
-14.5231x
3
+ 38.6736x
2
-3.4511x -0.3770
79
EJERCICIOS PROPUESTOS
1. Revisar y analizar el siguiente programa en matlab
clc,clear all
%ESTE PROGRAMA SIRVE PARA DETERMINAR EL VECTOR, MODULO Y LOS
ANGULOS EN
%TRES DIMENSIONES, YA QUE INGRESANDO POR EL TECLADO EL PROGRAMA SE
DETERMINA
%INMEDIATAMENTE
disp('=================================================================
==========')
disp('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&')
disp(' HALLANDO EL VECTOR, MODULO Y LOS ANGULOS EN TRES
DIMENSIONES')
disp('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&')
disp('=================================================================
==========')
format short
x1=input('"==> ingrese x1" : ');
y1=input('"==> ingrese y1" : ');
z1=input('"==> ingrese z1" : ');
x2=input('"==> ingrese x2" : ');
y2=input('"==> ingrese y2" : ');
z2=input('"==> ingrese z2" : ');
v=x2-x1;
v1=y2-y1;
v2=z2-z1;
m=sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2);
A=(v/m);
B=(v1/m);
C=(v2/m);
alfa=acos(v/m);
beta=acos(v1/m);
ganma=acos(v2/m);
a=acos(v/m)*180/pi;
b=acos(v1/m)*180/pi;
g=acos(v2/m)*180/pi;
disp('---------------------------------------------------------------------------')
disp(' el vector es: ')
%Concatenando con i,j y k para una mejor presentacion
v=num2str(v);%Por Ebc
v1=num2str(v1);
v2=num2str(v2);
v=strcat(v,'i');
v1=strcat(v1,'j');
v2=strcat(v2,'k');
fprintf('%1s\t','');fprintf('%0s\t',v);
fprintf('%1s\t','');fprintf('%0s\t',v1);
fprintf('%1s\t','');fprintf('%0s\t',v2);fprintf('\n\n');
disp('---------------------------------------------------------------------------')
disp(' el modulo es: ')
80
disp([m])
disp('---------------------------------------------------------------------------')
disp(' VECTOR UNITARIO: ')
%Concatenando con i,jyk para una mejor presentacion
A=num2str(A);
B=num2str(B);
C=num2str(C);
A=strcat(A,'i');
B=strcat(B,'j');
C=strcat(C,'k');
fprintf('%1s\t','');fprintf('%0s\t',A);
fprintf('%1s\t','');fprintf('%0s\t',B);
fprintf('%1s\t','');fprintf('%0s\t',C);fprintf('\n\n');
%Por Ebc
%En una forma mas Ordenada...Ebc
disp('---------------------------------------------------------------------------')
fprintf('%4s\t','');fprintf('LOS ANGULOS EN RADIANES%10d\t','');
fprintf('%12s\t','');fprintf('LOS ANGULOS EN SEXAGESIMAL%d\n','');fprintf('\n\n');
fprintf('%1s\t','');
fprintf('Alfa%s\t');fprintf('%4s\t','');
fprintf('Beta%s\t');fprintf('%4s\t','');
fprintf('Gama%s\t');fprintf('%4s\t','');
fprintf('%1s\t',' ');
fprintf('Alfa%s\t');fprintf('%4s\t','');
fprintf('Beta%s\t');fprintf('%4s\t','');
fprintf('Gama%s\t');fprintf('%4s\n','');
fprintf('%1s\t','');
fprintf('%0.2f\t',alfa);fprintf('%3s\t','');
fprintf('%0.2f\t',beta);fprintf('%3s\t','');
fprintf('%0.2f\t',ganma);fprintf('%3s\t','');
fprintf('%1s\t','');
fprintf('%0.2f\t',a);fprintf('%3s\t','');
fprintf('%0.2f\t',b);fprintf('%3s\t','');
fprintf('%0.2f\t',g);fprintf('%3s\t','');;fprintf('\n\n');
disp('---------------------------------------------------------------------------')
%disp('LOS ANGULOS EN SEXAGESIMAL')
%disp(' alfa beta ganma')
%disp([a b g])
disp('FIN DEL PROGRAMA')
disp('=================================================================
==========')
disp('=================================================================
==========')
2. Determinar que realiza lnea a lnea el siguiente programa.
%programa para graficar tiempo espacio, velocidad, aceleracion
clc
clear all
%x(x)= t^4 +2t^2 -200
%x=[1 0 2 0 -200 ];
%polyder(x)
%polyval(x,t)
x=[1 0 2 0 -200 ];
81
v=polyder(x);
a=polyder(v);
for t=1:10
m(t)=polyval(x,t);
n(t)=polyval(v,t);
k(t)=polyval(a,t);
hold on;grid on;
subplot(2,2,1);plot(t,m(t),'m*');title('Tiempo - Espacio');xlabel('tiempo');ylabel('esapcio');
hold on;grid on;
subplot(2,2,2);plot(t,n(t),'kx');title('Tiempo - Velocidad');xlabel('tiempo');ylabel('Velocidad');
hold on;grid on;
subplot(2,2,3);plot(t,k(t),'bo');title('Tiempo -
Aceleracion');xlabel('tiempo');ylabel('Acelecracion');
hold on;grid on;
end
disp('')
disp(' Tiempo - Espacio - Velocidad - Aceleracion')
disp('')
fprintf('tiempo%d\t');fprintf(' %5s\t','');
fprintf('Espacio%d\n');fprintf(' %5s\t','');
fprintf('Velociad%d\t');fprintf(' %5s\t','');
fprintf('Aceleracio%s\n','n');
disp('------------------------------------------------------------')
for h=1:10
fprintf('%s\t','');
fprintf('%d\t',h);
fprintf('%15.0f\t',m(h));
fprintf('%15.0f\t',n(h))
fprintf('%15.0f\n',k(h))
end
disp('')
3. Determinar que realiza lnea a lnea el siguiente programa.
%PROGRAMA DE UNA PRUEBA EXPERIEMENTAL CON LA CINETICA QUIMICA DE
UN
%CONTAMINANTE TENIENDO COMO DATOS EL TIEMPO(EN
HORAS),CONCENTRACIOIN FINAL
%DEL CONTAMINANTE ASI COMO LAS INICIALES
clc
clear all
fprintf('\n\n');
fprintf('\n\n');
fprintf('\n\n');
fprintf('\n\n');
disp('')
disp(' PROGRAMA PARA PRUEBA EXPERIMENTAL CON CINETICA QUIMICA')
disp('')
fprintf('\n\n');
fprintf('\n\n');
fprintf(' Esta Cargando...%12.0f\n');
a=0;
while a==0
tic;
82
for i=1:1000
for u=1:10000
for o=1:50
end
end
end
a=toc;
end
fprintf('\n\n');
fprintf('\n\n');
fprintf(' Presione Cualquier Tecla...%12.0f\n');
pause
clc
clear all
S0=500;%es la concentracin final del contaminante
t=[2.6 5.22 7.85 10.51 13.19 15.91 18.7 21.61 24.8 31.16]; %tiempo(horas)
DQO=[450 400 350 300 250 200 150 100 50 1]; %concentraciones iniciales del
contaminante (DQO mg/L)
%grfico de los puntos experimentales para probar una cintica de orden = 0
plot(t, DQO,'o-')
title('Datos experimentales (orden cero, grafica cinetica de orden cero)')
xlabel('tiempo (h)')
ylabel('DQO (mg/L)')
grid
pause
x=t;
y=log(S0./DQO);
plot(x,y,'o-k')
title('datos experimentales (cinetica de primer orden)')
xlabel('tiempo(h)')
ylabel('ln(Se /S0)(mg/L)')
grid
pause
%prueba para cintica de orden variable
x1=t./( S0-DQO);
y1=log(S0./DQO)./( S0-DQO);
plot(x1,y1,'o-k');
title('calculo de k1 y k2 (orden variable)')
xlabel('t/( S0- Se)(Lh/mg)')
ylabel('ln((S0 /Se)/( S0 -Se)(L/mg)')
text(0.06, 0.0077,'o experimentales')
grid
hold on
pause
%obtencion de la recta que se ajusta mejor a los datos experimentales
A=polyfit(x1,y1,1);
K1=A(1); %pendiente k1
K2e=A(2);
K2=-A(2); %ordenada al origen k2
%grafica de la recta que se ajusta a los datos expermientales
Resta=x1.*K1+K2e;
plot(x1,Resta,'--k');
text(0.06, 0.007, '---ajuste')
83
4. Determinar lnea a lnea lo que realiza el siguiente programa.
%LEY DE GAY -LUSSAC(1802):PROCESO ISOCORICO O ISOMETRICO
%GAY -LUSSAC cientfico francs realizo trabajos similares a Charles
%fue el que descubri la ley estequiometrica de la combinacin de los gases
%en una relacin volumtrica sencilla y constante; la ley:"SI EL VOLUMEN DE UN GAS
%PERMANECE CONSTANTE (proceso isocorico)PAR UNA CIERTA MASA DE UN GAS
,SU PRESION ABSOLUTA VARIA DIRECTAMENTE
%PROPORCIONAL A LA TEMPERATURA"
%PARA ESTA LEY SE CUMPLE: P/T=Kv(donde Kv es la constante de gay -
lussac)..........(1)
%como bien sabemos por los gases ideales:
%PV=nRT; DONDE:(n=1,R=0.08205(atm*lts)/k*mol,T=298k)...........(2)
%este programa nos ayudara a determinar las curvas de la ley gay -lussac
clc;
hold off ;clear all ;clear memory; clear command history
for V=100:100:500
K=(1.*0.08205)./V;
P=1:0.1:10;
T=P./K;
switch V
case 100
q='-r';
case 200
q='-b';
case 300
q='-m';
case 400
q='-R';
case 500
q='-k';
end
hold on,grid on
subplot(2,2,1), plot(T,P,q), title('LEY DE GAY -
LUSSAC'),ylabel('presion(atm)'),xlabel('temperatura(k)')
h=legend('V=100 Lts','V=200 Lts','V=300 Lts','V=400 Lts','V=500 Lts')
hold on,grid on
subplot(2,2,2),plot((1./T),P,q), title('LEY DE GAY -
LUSSAC'),ylabel('presion(atm)'),xlabel('temperatura(k^(-1))')
h=legend('V=100 Lts','V=200 Lts','V=300 Lts','V=400 Lts','V=500 Lts')
hold on,grid on
subplot(2,2,3), plot(T,(P./T),q), title(' LEY DE GAY -
LUSSAC'),ylabel('presion(atm/K)'),xlabel('temperatura(k)')
h=legend('V=100 Lts','V=200 Lts','V=300 Lts','V=400 Lts','V=500 Lts')
84
5. Analizar los resultados del siguiente programa aplicado a la elaboracin de
vino
clc
clear all
disp('---------------------------------------------------------------------')
disp(' ELABORACION DE VINO')
disp('---------------------------------------------------------------------')
disp(' ')
disp('- Este programa nos ayudara de una manera facil y rapida detenerinar ')
disp(' la adicion de azucar, levadura, etc y un balance de materia para la ')
disp(' aboracion del vino dependiendo de la cantidad de materia prima con ')
disp(' que contamos. ')
disp(' ')
x=input('Ingrese Materia Prima (Kg): ');
merma1=0.05*x
disp(' kg')
productoi=0.95*x;%es el porcentaje de materia prima que sigue el flujo
y=input('Ingrese Grados Brix: ');
k=input('Ingrese Densidad del Mosto: ');
j=x/k;%es el volumen de la materia prima
if y<14
('Grados Brix que me faltan:')
a=14-y;
disp([a])
disp(' brix')
z=(j*10)/100;%Es el 10% del volumen de la materia prima que sigue el flujo
disp('Cantidad azucar a agregar')
azucar=z*a
disp(' Kg')
disp('Cantidad de levadura')
levadura=0.0002*productoi
disp(' Kg')
merma2=0.03*(productoi+azucar)
disp(' Kg')
disp('BALANCE DE MATERIA')
mermato=merma1+merma2
disp(' Kg')
pesofinal=productoi+azucar+levadura
disp(' Kg')
mlprofinal=pesofinal/1.02
disp(' ml')
else
if y>=14
disp('Cantidad de levadura')
levadura=0.0002*productoi
disp(' Kg')
merma2=0.03*(productoi)
disp(' Kg')
disp('BALANCE DE MATERIA' )
mermato=merma1+merma2
85
disp(' Kg')
pesofinal=productoi+levadura
disp(' Kg')
mlprofinal=pesofinal/1.02
disp(' ml')
end
end
disp('=========================================')
disp('PROCESOS DE LA FERMENTACION (Esto se saca de datos experimentales)')
disp('NOTA: -Ingresar los datos en forma de vector ')
disp(' -Siendo la misma cantidad de datos para todos ')
disp('Ejemplo [0 2 4 6 8 10 12] ')
dias=input('Ingresar el numero de dias: ');
disp(' ')
disp('Ejemplo [12 30 65 80 90 98 100] ')
gxlalcohol=input('Ingresar g/l de alcohol producido: ');
disp(' ')
disp('Ejemplo [200 140 70 30 15 8 3] ')
gxlazucar=input('Ingresar g/l de azucar: ');
disp(' ')
disp([dias])
disp([gxlalcohol])
disp([gxlazucar])
cla
disp('DECREMENTO DEL AZUCAR')
disp('LA ECUACION LINEALIZADA ES:')
disp('y3 = a*x.^3 + b*x.^2 + c * x + d')
x = dias;
y = gxlazucar;
coef = polyfit(x, y, 3);
a=coef(1);
b=coef(2);
c=coef(3);
d=coef(4);
y3 = a*x.^3 + b*x.^2 + c * x + d;
subplot(2,2,1),plot(x, y3, 'bo'), title('DECREMENTO DEL AZUCAR')
xlabel ('Dias')
ylabel ('g/l de Azucar')
disp(' a b c d')
disp([a b c d])
disp('INCREMENTO DE ALCOHOL')
disp('LA ECUACION LINEALIZADA ES:')
disp('y3 = a*x.^3 + b*x.^2 + c * x + d')
x = dias;
z = gxlalcohol;
coef = polyfit(x, z, 3);
a=coef(1);
b=coef(2);
c=coef(3);
d=coef(4);
ya3 = a*x.^3 + b*x.^2 + c * x + d;
86
subplot(2,2,2),plot(x, ya3, 'ro'), title('INCREMENTO DE ALCOHOL')
xlabel ('Dias')
ylabel ('% de Alcohol')
disp(' a b c d')
disp([a b c d])
subplot(2,2,3),plot(x, y,'b+', x, z, 'r+'), title('GRAFICO 1 y 2 LINEALIZADOS')
6. Ejecutar el siguiente programa y analizar los resultados.
%PROGRAMA PARA HALLAR DERIVADAS PARCIALES y SU GRAFICA
clc;
disp('=================================================')
disp('---------------------OBTENCION DE LA DERIVADA-------------------')
disp('----------------------PARCIAL RESPECTO A X e Y----------------------')
disp('=================================================')
syms x y z %la funcion syms define como variables a X e Y
A=input('ingrese funcion:');
B=diff(A,x)
C=diff(A,y)
disp('la derivada respecto a x es:'),;
disp(diff(A,x)) %calcula la derivada parcial respecto a X
disp('la derivada respecto a y es:');
disp(diff(A,y)) %calcula la derivada parcial respecto a y
subplot(1,2,1), ezplot(z-B) %la funcion ezplot muestra el grafico panoramico de la funcion
subplot(1,2,2), ezplot(z-C) %El ezplot muestra el titulo por defecto
SALIDA:
===================================================
---------------------OBTENCION DE LA DERIVADA----------------------
-----------------------PARCIAL RESPECTO A X e Y------------------------
===================================================
ingrese funcion:x^2+y^3
la derivada respecto a x es:
2*x
la derivada respecto a y es:
3*y^2
87
7. Ejecutar el siguiente programa y analizar los resultados.
%METODO de NEWTON RAPHSON mas rpido converge la funcin(llega a la solucion)
clc;
disp('===========================================')
disp('-------------* METODO DE NEWTON RAPHSON *---------')
disp('===========================================')
nombre_f=input(' ingrese funcin asociada f(x)=','s');
x0=input(' ingrese valor inicial:');
fprintf('\n');
fprintf('iter aproximacin g(x) error\n');
i=1;e=1;delta=0.001;
while e>=3E-12 & i<=18
x=x0;
fx0=eval(nombre_f);
x=x0-delta;
df1=eval(nombre_f);
x=x0+delta;
df2=eval(nombre_f);
dfx0=(df2-df1)/(2*delta);
r=x0-(fx0/dfx0);
e=abs((r-x0)/r);
fprintf('%3.0f %10.6f %10.6f %10.6f\n',i,x0,r,e);
x0=r;
i=i+1;
end
disp('-----------------------------------------')
fprintf(' la raiz es:%10.9f\n',x0);
disp('-----------------------------------------')
SALIDA:
===================================================
-------------------*METODO DE NEWTON RAPHSON*------------------
===================================================
ingrese funcion asociada f(x)=5*x - x^3
ingrese valor inicial:2
iter aproximacin g(x) error
1 2.000000 2.285714 0.125000
2 2.285714 2.237640 0.021484
3 2.237640 2.236070 0.000702
4 2.236070 2.236068 0.000001
5 2.236068 2.236068 0.000000
----------------------------------------------
la raiz es:2.236067977
----------------------------------------------
88
8. Ejecutar el siguiente programa y analizar los resultados.
%PROGRAMA PARA INTEGRALES DEFINIDAS POR EL METODO DE SIMPSON
clc;
disp('===================================================')
disp('---------------------------* METODO DE SIMPSON *-----------------------')
disp('===================================================')
syms x
A=input('ingrese funcin:')
B=input('ingrese primer limite:')
C=input('ingrese segundo limite:')
D=subs(A,B); %Evala la funcin A para el valor de B
E=subs(A,C); %Evala la funcin A para el valor de C
D=(B+C)/2;
F=subs(A,D); %Evala la funcin para la semisuma de valores
G=(C-B)*(D+E+4*F)/6;
disp('-------------------------------')
fprintf('La solucin es: %10.6f\n',G);
disp('-------------------------------')
SALIDA:
===================================================
---------------------------* METODO DE SIMPSON *------------------------
===================================================
ingrese funcion:log(x/2)-x^3+x
A =
log(1/2*x)-x^3+x
ingrese primer limite:4
B =
4
ingrese segundo limite:2
C =
2
----------------------------------
La solucin es: 32.459380
----------------------------------
9. Ejecutar el siguiente programa y analizar los resultados.
%este programa sirve para hallar el siguiente la siguiente integral definida :
}
sen (ln x)dx
%ingresando por teclado el lmite superior (a) y el limite inferior (b):
clc;
89
disp('=====================================================')
disp('--------PROGRAMA PARA HALLAR LA INTEGRAL DE sen(ln x)-------- ')
disp('=====================================================')
a=input('ingrese el limite superior:');
b=input('ingrese el limite inferior:');
if a>b
r=cos(log(a))-cos(log(b));
disp('el resultado de la integral es:')
disp(r)
else
r=tan(a)-tan(b);
disp('el resultado de la integral es:')
disp(r) end
disp('=====================')
disp('FIN DEL PROGRAMA')
disp('=====================')
SALIDA:
=================================================
----PROGRAMA PARA HALLAR LA INTEGRAL DE sen(ln x)---
=================================================
ingrese el limite superior:5
ingrese el limite inferior:8
el resultado de la integral es:
3.4192
=====================
FIN DEL PROGRAMA
=====================
10. Ejecutar el siguiente programa y analizar los resultados.
%Programa para integrar por el mtodo del trapecio clc,
disp('================================================')
disp('------------------------* METODO DEL TRAPECIO *----------------------')
disp('================================================')
fprintf('\n');
f=input('Ingrese la funcin a integrar f(x) =','s');
a=input('Ingrese limite inferior :');
b=input('Ingrese limite superior :');
n=input('Ingrese nmeros de trapecios a considerar en la integracin :');
xmin=a-1;xmax=b+1;
h=(b-a)/n;
x=a:h:b;
fx=eval(f);y=abs(fx);
A=y(1)+y(n+1);
B=2*sum(y(2:n));
integral=(h/2)*(A+B);
fprintf('el rea es:%10.9f\n',integral);
%grafica
90
xp=xmin:0.2:xmax;
x=xp;
yp=eval(f);
plot(xp,yp,'g');
hold on
x=a:0.05:b;
y=eval(f);
bar(x,y,'r');
grid
SALIDA:
==============================================
--------------------* METODO DEL TRAPECIO *-------------------
==============================================
Ingrese la funcin a integrar f(x) =sqrt(1+x.^2)
Ingrese limite inferior :2
Ingrese limite superior :3
Ingrese nmeros de trapecios a considerar en la integracin :8
el rea es:2.694824624
91
EVALUACIN
Describir lnea por lnea lo que hace el programa y luego indicar el resultado de la
ejecucin de dicho programa.
clc,clear all
%ESTE PROGRAMA SIRVE PARA xxxxxx xxxxx xxxxxxx xxxxxx
disp('================================================================')
disp('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
disp(' xxxxx xxxxx xxxxx xxxxxxx xxxxxxx')
disp('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
disp('================================================================')
format short
x1=input('"==> ingrese x1" : ');
y1=input('"==> ingrese y1" : ');
z1=input('"==> ingrese z1" : ');
x2=input('"==> ingrese x2" : ');
y2=input('"==> ingrese y2" : ');
z2=input('"==> ingrese z2" : ');
v=x2-x1;
v1=y2-y1;
v2=z2-z1;
m=sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2);
A=(v/m);
B=(v1/m);
C=(v2/m);
alfa=acos(v/m);
beta=acos(v1/m);
ganma=acos(v2/m);
a=acos(v/m)*180/pi;
b=acos(v1/m)*180/pi;
g=acos(v2/m)*180/pi;
disp('---------------------------------------------------------------------------')
disp(' el vector es: ')
%Concatenando con para una mejor presentacion
v=num2str(v);%Por Ebc
v1=num2str(v1);
v2=num2str(v2);
v=strcat(v,'i');
v1=strcat(v1,'j');
v2=strcat(v2,'k');
fprintf('%1s\t','');fprintf('%0s\t',v);
fprintf('%1s\t','');fprintf('%0s\t',v1);
fprintf('%1s\t','');fprintf('%0s\t',v2);fprintf('\n\n');
disp('---------------------------------------------------------------------------')
disp(' el modulo es: ')
disp([m])
disp('---------------------------------------------------------------------------')
disp(' xxxxxxx xxxxxxxxx: ')
%Concatenando con i,jyk para una mejor presentacion
A=num2str(A);%Por Ebc
B=num2str(B);
C=num2str(C);
A=strcat(A,'i');
92
B=strcat(B,'j'); C=strcat(C,'k');
fprintf('%1s\t','');fprintf('%0s\t',A);
fprintf('%1s\t','');fprintf('%0s\t',B);
fprintf('%1s\t','');fprintf('%0s\t',C);fprintf('\n\n');
%Por Ebc
%En una forma mas Ordenada...Ebc
disp('---------------------------------------------------------------------------')
fprintf('%4s\t','');fprintf('LOS xxxxxxx EN xxxxxx%10d\t','');
fprintf('%12s\t','');fprintf('LOS xxxxxxx EN xxxxxx%d\n','');fprintf('\n\n');
fprintf('%1s\t','');
fprintf('Alfa%s\t');fprintf('%4s\t','');
fprintf('Beta%s\t');fprintf('%4s\t','');
fprintf('Gama%s\t');fprintf('%4s\t','');
fprintf('%1s\t',' ');
fprintf('Alfa%s\t');fprintf('%4s\t','');
fprintf('Beta%s\t');fprintf('%4s\t','');
fprintf('Gama%s\t');fprintf('%4s\n','');
fprintf('%1s\t','');
fprintf('%0.2f\t',alfa);fprintf('%3s\t','');
fprintf('%0.2f\t',beta);fprintf('%3s\t','');
fprintf('%0.2f\t',ganma);fprintf('%3s\t','');
fprintf('%1s\t','');
fprintf('%0.2f\t',a);fprintf('%3s\t','');
fprintf('%0.2f\t',b);fprintf('%3s\t','');
fprintf('%0.2f\t',g);fprintf('%3s\t','');;fprintf('\n\n');
disp('---------------------------------------------------------------------------')
%disp('LOS xxxxxxxx EN xxxxxxx ')
%disp(' alfa beta ganma')
%disp([a b g])
disp('FIN DEL PROGRAMA')
disp('================================================================')
disp('================================================================')
93
Bibliografa referencial
5. CHAPRA, STEVEN Mtodos Numricos para Ingenieros. Editorial Mc. Graw Hill.
Mxico. 2004.
6. NAKAMURA, SHOICHIRO Analisis Numrico y Visualizacin con Matlab.
Editorial Prentice may. Mxico. 1997.
7. MORALES MARCHENA, HERN. Mtodos numricos y Visualizacin Grfica
Editorial Megabit. Peru. 2005.
8. PEREZ, CESAR Matlab y sus Aplicaciones en las Ciencias y la Ingeniera
Editores Prentice. Espaa. 2002 .
9. VASQUEZ PARAGULLA, JULIO Diseo de Programacin Edit. San Marcos
PERU . 2000.
10. KERLINGER, F. N. Y LEE, H. B. Investigacin del Comportamiento: Mtodos de
Investigacin en ciencias sociales. Mc Graw Hill Interamericana Editores.
Mxico. 2002.