Tutorial (Algoritmos)

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 39

3UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

(Universidad del Perú, Decana de América)

Área de Ingenierías

MÉTODOS NUMÉRICOS
Trabajo de Matlab

Alumnos (Grupo “4”):

 Mata Suazo, Javier Valerio 18200161


 Molina Yupanqui, Flor Gianina 18200164
 Montañez Reynoso, Edith 18220165
 Quispe Vega, Anthony Yair 18200179
 Romero Ramón, Mery Roxana 18200042
 Sánchez Córdova, Nahomi Elizabeth 18200043
 Suca Condori, Josely 18200197

Profesor: Contreras Aranda, Santiago

Lima - Perú

Enero 2020
Introducción

¿Qué es Matlab?
MATLAB (abreviatura de MATrix LABoratory, «laboratorio de matrices») es un sistema

de cómputo numérico que ofrece un entorno de desarrollo integrado (IDE) con un

lenguaje de programación propio (lenguaje M). Está disponible para las plataformas

Unix, Windows, macOS y GNU/Linux.

Entre sus prestaciones básicas se hallan la manipulación de matrices, la representación de

datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario

(GUI) y la comunicación con programas en otros lenguajes y con otros dispositivos

hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden

sus prestaciones, a saber, Simulink (plataforma de simulación multidominio) y GUIDE

(editor de interfaces de usuario - GUI). Además, se pueden ampliar las capacidades de

MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes

de bloques (blocksets).

Es un software muy usado en universidades y centros de investigación y desarrollo. En

los últimos años ha aumentado el número de prestaciones, como la de programar

directamente procesadores digitales de señal o crear código VHDL.

En 2004, se estimaba que MATLAB era empleado por más de un millón de personas en

ámbitos académicos y empresariales.


El entorno de Matlab

La ventana de Matlab cuenta con diversas secciones. La más importante es la command

window. Aquí es donde podemos usar Matlab de forma interactiva. Las otras secciones

son: el current directory, que es la carpeta en la cual estamos trabajando, el workspace,

donde podemos visualizar las variables que han sido creadas, y el command history, que

guarda todas las acciones realizadas en el command window. En la esquina superior

izquierda, encontramos la opción de crear un nuevo archivo M. En estos archivos (que

tienen la extensión .m) se escriben los programas donde se usa el lenguaje Matlab. Otras

opciones que encontramos son la de iniciar Simulink y GUIDE, una IDE que facilita la

creación de interfaces gráficas.


Entrada de valores por teclado

En muchas oportunidades, no tendremos definidas las variables al iniciar el programa,


debemos entregarla en el camino. Para realizar esto, tenemos la sentencia input, que
funciona de la siguiente manera:

Variable = input ('Ingrese el valor de la variable: ')

La sentencia finaliza con punto y coma si queremos que no se muestre el valor de la


variable. Al ejecutar el programa, obtendremos:

>> variable = input ('Ingrese el valor de la variable: ')


Ingrese el valor de la variable: 4

variable =

Para obtener una cadena de caracteres, la sentencia varía un poco:

Cadena_de_caracteres = input('Ingrese una cadena: ','s')


Formato de salida de valores de datos

En Matlab, la salida de datos más simple es a través del comando disp.

Ejemplo 1:

>> disp('Hola, mundo')


Hola, mundo

Sin embargo, para un control mayor, usamos la sentencia fprintf.

Ejemplo 2:

>> fprintf ('Hola, mundo')


Hola, mundo

En los ejemplos anteriores no hay diferencia entre el uso de disp y fprintf, sin embargo,
si por ejemplo queremos mostrar el número pi, podemos usar las características de fprintf.

Ejemplo 3:

Utilizando disp

>> disp(pi)
3.1416

Ejemplo 4:

Utilizando fprintf (note el símbolo %)

>> fprintf ('%f\n', pi)


3.141593

El símbolo % es una marca de formato, la letra «f» nos indica que el número a representar
es flotante (decimal), y los números nos indican la cantidad de espacios que «guarda»
para el número, y las cifras decimales a mostrar, respectivamente.
En la primera línea, no se indicó estos números, por lo que se considera la configuración
por defecto, que es mostrar 6 decimales, y guarda la cantidad de espacios justa para el
valor.

Los caracteres \n indican salto de línea. También se encuentra \t, que es un marcador de
tabulación.

>> fprintf ('%10.3f\n', pi)


3.142

En este ejemplo se guardaron 10 espacios, de los cuales 3 son para los decimales.

>> fprintf ('%3.0f\n', pi)


3

En este ejemplo se guardaron 3 espacios, y ninguno para los decimales.


Operaciones escalares

Siendo Matlab un software de cálculo con un lenguaje de programación, debemos tener


la capacidad de realizar operaciones con escalares. éstos son muy similares a los usados
en matemáticas.

Operadores escalares
Aquí podemos nombrar:

 + (adición o suma)
 - (resta)
 * (multiplicación)
 / (división)

>> 3+18

ans =

21

Los operadores de multiplicación y división tienen preferencia a los de suma y resta, por
lo que éstos se resuelven primero.

>> 3 + 18 * 5

ans =

93

>> (3 + 18) * 5

ans =

105

>> 3 + (18 * 5)

ans =

93
Operaciones matriciales

Cabe aclarar que como su nombre lo indica Matlab (Laboratorio de Matrices) trata a todas
las variables como si fueran una matriz. Por ejemplo, si es A=1, genera una matriz de
1x1.

Dada una matriz:

>> A = [1 -2 3;4 1 -1;2 -1 3];


>> B = [ 11; 4; 10];
>> A

A =

1 -2 3
4 1 -1
2 -1 3

>> B

B =

11
4
10

Nota: Se usa "[" para empezar a declarar la matriz; se cierra con "]". Para pasar a la
segunda fila agrego un ";" y cada componente está separado por un "espacio". Recuerde
que si no quiere ver la salida del comando ingrese ";" al final.

Suma de matrices
Suponga que quiero hacer la siguiente operación entra las matrices a y b. Cabe aclarar
que las matrices tienen que ser de las mismas dimensiones, para este ejemplo se definieron
dos matrices de 2x2.
Código en Matlab:

>> a = [2 .5;1 3]; b = [2 1;.5 3]; %Declaración de las matrices.


>> a + b

ans =

4.0000 1.5000
1.5000 6.0000

Multiplicación de matrices
Para multiplicar dos matrices (axb), "a" tiene que tener la misma cantidad columnas que
la cantidad de filas que b. El resultado de la multiplicación será entonces igual a la
cantidad de filas de "a" y tendrá tantas columnas como "b". Dada una matriz A de 3
filas x 3 columnas(3x3) y una matriz B de 3x2; podemos verificar que el producto es
posible y el resultado de la multiplicación será de una matriz de 3x2.

Ejemplo en Matlab:

A = [0.1 0.3 0.3;2 3 9;2 4 1];


>> B = [2 3;1 1;1 10];
>> A*B

ans =

0.8000 3.6000
16.0000 99.0000
9.0000 20.0000

Inversa de una matriz


Dada una matriz A:
Ahora quiero calcular la inversa de dicha matriz:

Código en Matlab:

>> A = [0.1 0.3 0.3; 2 3 9; 2 4 1];


>> inv(A)

ans =

-15.7143 0.4286 0.8571


7.6190 -0.2381 -0.1429
0.9524 0.0952 -0.1429

Cálculo de la determinante
Dada una matriz A, se desea calcular el determinante de dicha matriz.

Código en Matlab:

>> A = [1 2 3;2 3 4;3 4 5];


>> det(A)

ans =

Matriz Transpuesta
Para calcular la traspuesta de una matriz en Matlab, utilizo el carácter especial. ‘

Ejemplo en Matlab:

>> A = [2 .5;1 3]
A =

2.0000 0.5000
1.0000 3.0000

Selección de un componente de una matriz


Por ejemplo, selecciono el componente de la fila 1 columna 2.

>> A = [1 10;2 3];


>> A (1,2)

ans =

10

Selección de toda la fila 1:

>> A(1,:)

ans =

1 10

Verificando las dimensiones de una matriz


Utilizo la misma matriz A del ejemplo anterior para trabajar.

>> size(A)

ans =

2 2

Nos dice que A posee 2 filas y 2 columnas.


Rango de una matriz
Para comprobar el rango el comando que se utiliza es "rank".

A = [1 2 3;2 3 4;3 4 5];


>> rank(A)

ans =
2
CONDICIONALES

Selector «if»
Es habitual en la programación, que, según cierto valor de una variable, se requieran
distintas acciones. La forma más simple es cuando si cierta variable cumple la condición
señalada, se requiere ejecutar alguna acción.

if (numero>10)
fprintf ('El número es mayor que 10.\n')
end

Esta es la forma más simple de la bifurcación. Pero si se quiere ejecutar otra sentencia si
no cumple con la condición señalada, se usa la sentencia else

if (numero>10)
fprintf ('El número es mayor que 10.\n')
else
fprintf ('El número es menor o igual que 10.\n')
end

Las condiciones pueden ser múltiples usando la sentencia elseif :

if (numero>10)
fprintf ('El número es mayor que 10.\n')
elseif (numero>5)
fprintf ('El número es mayor que 5 y menor que 10.\n')
else
fprintf ('El número es menor o igual que 5.\n')
end
Selector «switch»
La sentencia switch verifica la expresión, y ejecuta las acciones ubicadas en

el case cuyo valor sea el mismo. Si el resultado no concuerda con ningún case , ejecuta

las acciones correspondientes a otherwise .

switch (expresion)
case resultado1
acciones 1
case resultado2
acciones 2
...
otherwise
acciones por defecto
end
BUCLES

Bucle «for»
La sentencia for repite un conjunto de sentencias un número predeterminado de veces.

La sentencia for de MATLAB es muy diferente y no tiene la generalidad de la sentencia

for de C/C++/Java. La siguiente construcción ejecuta sentencias con valores de i de 1 a


n, variando de uno en uno.

for i=1:n
sentencias
end

o bien,

for i = vectorValores
sentencias
end

donde vectorValores es un vector con los distintos valores que tomará la variable i. En el
siguiente ejemplo se presenta el caso más 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 varía más rápidamente (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 interés 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 iteración el valor de una de


las columnas de A. Cuando se introducen interactivamente en la línea de comandos, los
bucles for se ejecutan sólo después de introducir la sentencia end que los completa.

Bucle «while»
La estructura del bucle while es muy similar a la de C/C++/Java. Su sintaxis es la
siguiente:

while condicion
sentencias
end

donde condición puede ser una expresión vectorial o matricial. Las sentencias se siguen
ejecutando mientras haya elementos distintos de cero en condición, es decir, mientras
haya algún o algunos elementos true. El bucle se termina cuando todos los elementos de
condición son false (es decir, cero).
MÉTODO DEL PUNTO FIJO
CÓDIGO EN MATLAB
EJERCICIOS MÉTODO PUNTO FIJO
1)

Ingrese función f: 'cos(x)-3*x'

Ingrese función g: 'cos(x) /3'

Ingrese primer valor: 0

Ingrese la tolerancia: 0.001

n x0 error

0.0000 0.0000 --------

1.0000 0.3333 0.0550

2.0000 0.3150 0.0058

3.0000 0.3169 0.0006

2)

Ingrese función f: 'cos(x)-2*x'

Ingrese función g: '(cos(x)) /2'

Ingrese primer valor: 0

Ingrese la tolerancia: 0.001

n x0 error

0.0000 0.0000 --------

1.0000 0.5000 0.1224

2.0000 0.4388 0.0277

3.0000 0.4526 0.0060

4.0000 0.4496 0.0013

5.0000 0.4503 0.0003


3)

Ingrese función f: 'cos(x)-5*x'

Ingrese función g: 'cos(x)/5'

Ingrese primer valor: 0

Ingrese la tolerancia: 0.001

n x0 error

0.0000 0.0000 --------

1.0000 0.2000 0.0199

2.0000 0.1960 0.0008

4)

Ingrese función f: '(x^2) -(3*x) +((2.71) ^x)-2'

Ingrese función g: 'sqrt (2-((2.71) ^x) +(3*x))'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.5133 0.2708

2.0000 1.4210 0.1205

3.0000 1.4628 0.0500

4.0000 1.4456 0.0215

5.0000 1.4530 0.0091

6.0000 1.4498 0.0039

7.0000 1.4512 0.0017

8.0000 1.4506 0.0007

5)

Ingrese función f: 'x^2 - 0.9*x - 1.52'

Ingrese función g: 'sqrt(0.9*x+1.52)'


Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.5556 0.5001

2.0000 1.7088 0.1379

3.0000 1.7487 0.0359

4.0000 1.7589 0.0092

5.0000 1.7615 0.0024

6.0000 1.7622 0.0006

6)

Ingrese función f: 'x^3 - 2*x - 1'

Ingrese función g: '(2*x+1) ^ (1/3)'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.4422 0.8845

2.0000 1.5720 0.2594

3.0000 1.6062 0.0685

4.0000 1.6150 0.0176

5.0000 1.6173 0.0045

6.0000 1.6178 0.0011

7.0000 1.6180 0.0003

7)

Ingrese función f: '2.71^x-5*x^2'

Ingrese función g: 'sqrt((2.71^x) /5)'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001


n x0 error

0.0000 1.0000 --------

1.0000 0.7362 0.6267

2.0000 0.6455 0.1801

3.0000 0.6170 0.0534

4.0000 0.6082 0.0160

5.0000 0.6056 0.0048

6.0000 0.6048 0.0014

7.0000 0.6046 0.0004

8)

Ingrese función f: 'x-2*cos(x)'

Ingrese función g: 'sqrt(2*x*cos(x))'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.0395 0.0263

2.0000 1.0263 0.0096

3.0000 1.0311 0.0034

4.0000 1.0294 0.0012

5.0000 1.0300 0.0004

9)

Ingrese función f: 'x^3 - 5*x + 1'

Ingrese función g: '(5*x-1) ^ (1/3)'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.5874 2.9370


2.0000 1.9072 1.5989

3.0000 2.0437 0.6826

4.0000 2.0968 0.2654

5.0000 2.1167 0.0997

6.0000 2.1241 0.0369

7.0000 2.1268 0.0136

8.0000 2.1278 0.0050

9.0000 2.1282 0.0018

10.0000 2.1283 0.0007

10)

Ingrese función f: '(x^3) +(2*(x^2)) +(10*x)-20'

Ingrese función g: '(20-(2*(x^2)) -(x^3)) /10'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.7000 7.6930

2.0000 0.9307 8.1544

3.0000 1.7461 8.8835

4.0000 0.8578 9.3192

5.0000 1.7897 10.0360

6.0000 0.7861 10.4171

7.0000 1.8278 11.0668

8.0000 0.7211 11.3734

9.0000 1.8585 11.9119

10.0000 0.6673 12.1394

11.0000 1.8812 12.5481

12.0000 0.6264 12.7052


11)

Ingrese función f: 'x^3 + 2*x^2 + 10*x -30'

Ingrese función g: 'sqrt((30*x-x^4-2*x^3) /10)'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.6432 3.7318

2.0000 1.8202 0.8593

3.0000 1.7767 0.3103

4.0000 1.7922 0.1020

5.0000 1.7871 0.0347

6.0000 1.7888 0.0117

7.0000 1.7882 0.0039

8.0000 1.7884 0.0013

9.0000 1.7884 0.0004

12)

Ingrese función f: 'x^3 + 2*x^2 + 11*x -20'

Ingrese función g: 'sqrt((20*x-x^4-2*x^3) /11)'

Ingrese primer valor: 1

Ingrese la tolerancia: 0.001

n x0 error

0.0000 1.0000 --------

1.0000 1.2432 1.3130

2.0000 1.3015 0.0915

3.0000 1.3056 0.0030

4.0000 1.3058 0.0001


13)

Ingrese función f: '-0.9*x^2 + 1.7*x + 2.5'

Ingrese función g: 'sqrt ((1.7*x + 2.5) /0.9)'

Ingrese primer valor: 5

Ingrese la tolerancia: 0.001

n x0 error

0.0000 5.0000 --------

1.0000 3.4960 2.5567

2.0000 3.0629 0.7363

3.0000 2.9263 0.2322

4.0000 2.8819 0.0755

5.0000 2.8673 0.0248

6.0000 2.8625 0.0082

7.0000 2.8609 0.0027

8.0000 2.8604 0.0009

CÓDIGO ADICIONAL MÉTODO PUNTO FIJO


clear, clc

cf=input('Ingrese funcion f: ');

cg=input('Ingrese funcion g: ');

f=inline(cf);

g=inline(cg);

syms x

dg = diff(cg,x);

x= input('Ingrese primer valor: ');

if (abs(eval(dg))<1)

tol=input('Ingrese la tolerancia: ');

disp(' n x0 error')

fprintf(' 0.0000 %7.4f --------\n',x)

n=0; error =100;

while error>tol

n=n+1;

x= g(x);

error= abs(f(x));

disp([n,x,error])

end

else

disp('Ingrese otra funcion g(x), porque la ingresada diverge.')

end

MÉTODO DE NEWTON RAPHSON


CÓDIGO EN MATLAB
EJERCICIOS MÉTODO NEWTON RAPHSON
1)

Ingrese función a evaluar: 'cos(x)-5*x'

Ingrese tolerancia: 0.00000000001

Ingrese el error: 50

Ingrese un valor inicial: 0

n xi error

0 0.00000 50.000000

1 0.20000 0.019933

2 0.19617 0.000007

2)

Ingrese función a evaluar: 'x^3 - 2*x - 1'

Ingrese tolerancia: 0.0001

Ingrese el error: 50

Ingrese un valor inicial: 1

n xi error

0 1.00000 50.000000

1 3.00000 20.000000

2 2.20000 5.248000

3 1.78083 1.085990

4 1.63630 0.108576

5 1.61830 0.001584

CÓDIGO ADICIONAL MÉTODO NEWTON RAPHSON


clear, clc

cf=input('Ingrese funcion a evaluar: ');

syms x

f=inline(cf);

derivada=diff(cf,x);

df=inline(derivada);

tol=input('Ingrese tolerancia: ');

error=input('Ingrese el error: ');

x=input('Ingrese un valor inicial: ');

n=0;

disp(' n xi error')

while error>tol

fprintf('\t%i\t%3.5f\t%f\n', n, x, error);

n=n+1;

x=x-f(x)/df(x);

error=abs(f(x));

MÉTODO DE LA SECANTE
CÓDIGO EN MATLAB
EJERCICIOS MÉTODO SECANTE
1)

Ingrese la función: 'cos(x) - 3*x'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

0 0.0000 1.0000 ------ ------

1 0.0000 1.0000 0.2890 0.0914

2 1.0000 0.2890 0.3145 0.0074

3 0.2890 0.3145 0.3168 0.0000

2)

Ingrese la función: 'cos(2*x) - 3*x'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

0 0.0000 1.0000 ------ ------

1 0.0000 1.0000 0.2264 0.2199

2 1.0000 0.2264 0.2732 0.0347

3 0.2264 0.2732 0.2820 0.0008

4 0.2732 0.2820 0.2818 0.0000

3)

Ingrese la funcion: 'cos(x) - 2*x'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001


n x0 x1 x2 error

0 0.0000 1.0000 ------ ------

1 0.0000 1.0000 0.4066 0.1054

2 1.0000 0.4066 0.4465 0.0089

3 0.4066 0.4465 0.4502 0.0001

4)

Ingrese la función: 'cos(x) - 5*x'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

0 0.0000 1.0000 ------ ------

1 0.0000 1.0000 0.1832 0.0675

2 1.0000 0.1832 0.1953 0.0043

3 0.1832 0.1953 0.1962 0.0000

5)

Ingrese la función: '(x*x) -(3*x) +((2.72) ^x)-2'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

1 0.0000 1.0000 -3.5714 21.4974

2 1.0000 -3.5714 0.7431 1.5737

3 -3.5714 0.7431 0.4488 1.5781

4 0.7431 0.4488 105.0525

5 0.4488 105.0525 0.4488 1.5781

6 105.0525 0.4488 0.4488 1.5781

7 0.4488 0.4488 NaN NaN


6)

Ingrese la función: 'x^3 - 2*x - 1'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

1 0.0000 1.0000 -1.0000 0.0000

7)

Ingrese la función: '(2.72)^x - 5*x^2'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

1 0.0000 1.0000 0.3049 0.8920

2 1.0000 0.3049 0.5003 0.3981

3 0.3049 0.5003 0.6579 0.2326

4 0.5003 0.6579 0.5998 0.0237

5 0.6579 0.5998 0.6052 0.0012

6 0.5998 0.6052 0.6054 0.0000

8)

Ingrese la función: 'x-2*cos(x)'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

1 0.0000 1.0000 1.0420 0.0330

2 1.0000 1.0420 1.0298 0.0002

3 1.0420 1.0298 1.0299 0.0000


9)

Ingrese la función: 'x*(2.72) ^x - 2'

Ingrese el primer valor: 0

Ingrese el segundo valor: 1

Ingrese la tolerancia: 0.0001

n x0 x1 x2 error

1 0.0000 1.0000 0.7353 0.4654

2 1.0000 0.7353 0.8392 0.0565

3 0.7353 0.8392 0.8536 0.0054

4 0.8392 0.8536 0.8523 0.0001


MÉTODO DE LA BISECCIÓN
CÓDIGO EN MATLAB

También podría gustarte