comenzando con matlab

16
COMENZANDO CON MATLAB Entorno de trabajo Lo primero al abrir Matlab es como se muestra a continuación: “Entorno de Matlab” o Command Window Aquí es donde empezaremos a escribir nuestros comandos. o Workspace Se muestran las variables que se están utilizando en el momento. o Command History Historial de los comandos usados. Al salir del programa estos quedan guardados, se pueden utilizar haciendo clic sobre alguno de ellos.

Upload: rodrigo-morales-melo

Post on 17-Dec-2015

15 views

Category:

Documents


4 download

DESCRIPTION

Aqui encontraras algunos metodos como es el metodo LU, gauss jacobi y runge kutta orden 4 aplicados en matlab

TRANSCRIPT

  • COMENZANDO CON MATLAB

    Entorno de trabajo

    Lo primero al abrir Matlab es como se muestra a continuacin:

    Entorno de Matlab

    o Command Window

    Aqu es donde empezaremos a escribir nuestros comandos.

    o Workspace

    Se muestran las variables que se estn utilizando en el momento.

    o Command History

    Historial de los comandos usados. Al salir del programa estos quedan guardados,

    se pueden utilizar haciendo clic sobre alguno de ellos.

  • 2

    Herramientas Bsicas

    exit/quit

    Provoca la salida y cierre de Matla.

    >>exit

    >>quit

    clc

    Limpia la ventana de comandos (Commando Windows).

    >>clc

    help

    Muestra la ayuda en la ventana de comandos de la funcin especificada.

    >>help funcin

    doc

    Similar a help pero muestra la documentacin de la funcin en el buscador

    del help. Abre una ventana con un ejemplo.

    >>doc funcin

    format

    Cambia la cantidad de decimales que se muestran por variable, ejemplos:

    >>format long muestra 14 decimales

    >>pi

    ans = 3.141592653589793

    >>format bank muestra 2 decimales

    >>pi

    ans = 3.14

    >>format short e notacin cientfica

    >>pi

    ans =

    3.1416e+00

    >>format long e notacin cientfica con 14 decimales

    >>pi

    ans =

    3.141592653589793e+00

    >>format short muestra 4 decimales, formato de matlab

    >>pi

    ans =

    3.1416

  • 3

    clear

    Borra todas las variables creadas o alguna especificada.

    >>clear

    >>clear variable1 variable2

    who

    Muestra las variables que han sido creadas.

    >>who

    whos

    Similar a who pero muestra ms informacin de las variables.

    >>whos

    save

    Guarda todas las variables del espacio de trabajo o solo las variables que se

    especifiquen en un archivo.

    >>save(nombre_del_archivo)

    >>save(nombre del archivo,variable1,variable2,)

    Matrices

    Sistema de ecuaciones lineales

    (SEL)

    Es un sistema de ecuacin de la forma:

    AX=B

    Donde:

    A: Matriz de orden m*n, llamada matriz coeficiente.

    X: Matriz de orden n*1, llamada matriz incgnita.

    B: Matriz de orden m*1, llamada matriz trminos constantes.

    El sistema tiene las siguientes soluciones:

    o Rango(A)=Rango(A:B)

    Tiene al menos una solucin.

    o Rango(A)Rango(A:B)

    No existe solucin.

    o Rango(A)=Rango(A:B)=N de incgnitas

    Solucin nica.

    o Rango(A)=Rango(A:B)

  • 4

    Ejemplos:

    Se tiene el siguiente SEL:

    x + y 2z = 4

    2x y + z = 2

    -x + 2y -3z = 2

    Expresado de forma matricial quedara:

    1 1 22 1 1

    1 2 3

    =

    422

    Ver las soluciones de la matriz:

    X=A-1B

    Como se vera esto en Matlab:

    Para escribir una matriz en Matlab se hace de la siguiente forma:

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

    Si no queremos que nos muestre el resultado agregamos al final del

    comando un ;

    Inversa de la matriz:

    >>inv(A);

    Rango de la matriz:

    >>Rank(A)

    Para hacer un comentario en alguna lnea de comando basta con escribir

    %escriben_su_comentario

    Ingresando el ejercicio anterior en Matlab

    >> A=[1 1 -2;2 -1 1;-1 2 -3] %Nos muestra la variable

    A =

    1 1 -2

    2 -1 1

    -1 2 -3

    >> B=[4;2;2]; %No nos muestra la variable

  • 5

    >> X=inv(A)*B

    Warning: Matrix is singular to working precision.

    X =

    Inf

    Inf

    Inf

    Se puede ver que tenemos infinita solucin.

    Rango de la matriz:

    >> AB=[A,B]

    AB =

    1 1 -2 4

    2 -1 1 2

    -1 2 -3 2

    >> rank(A)

    ans =

    2

    >> rank(AB)

    ans =

    2

    Rango de A igual a Rango de A:B y menor N de incognitas. Infinitas soluciones

    Mtodo directo LU

    Se tiene el siguiente SEL

    20 10 4 = 26 10 25 5 = 0 4 5 + 20 = 7

    En forma matricial quedara:

    (20 10 4

    10 25 54 5 20

    ) (

    ) = (2607

    )

  • 6

    Matlab

    >> A=[20 -10 -4;-10 25 -5;-4 -5 20]

    A =

    20 -10 -4

    -10 25 -5

    -4 -5 20

    >> B=[26;0;7]

    B =

    26

    0

    7

    >> [l,u,p]=lu(A)

    l =

    1.0000 0 0

    -0.5000 1.0000 0

    -0.2000 -0.3500 1.0000

    u =

    20.0000 -10.0000 -4.0000

    0 20.0000 -7.0000

    0 0 16.7500

    p =

    1 0 0

    0 1 0

    0 0 1

    Z=L-1 * B Z=L-1 * P-1 * B

    P=Matriz identidad PMatriz identidad X=U-1 * Z X=U-1 * Z

    >> Z=inv(l)*B

    Z =

    26.0000

    13.0000

    16.7500

    >> X=inv(u)*Z

    X =

    2

    1

    1

    X=2 ; y=1 ; z=1

  • 7

    1) Resolver el siguiente SEL mediante el mtodo LU:

    652

    64

    642

    63

    64

    54321

    4321

    5432

    4321

    5321

    xxxxx

    xxxx

    xxxx

    xxxx

    xxxx

    Mtodo Gauss-Jacobi

    Se tiene la matriz:

    AX=B

    La cual debe quedar:

    A=D+L+U

    D=diagonal de A

    L=matriz inferior de A

    U=matriz superior de A

    dCXX

    BDXULDX

    BDXULDX

    nn

    d

    n

    C

    n

    )1()(

    1

    )1(

    1

    )(

    11

    )(

    )(

    Para poder usar este mtodo se debe crear el cdigo en un script, ya que hay que

    hacer varias iteraciones. Para esto veremos los siguientes cdigos a tener en

    cuenta:

    if

    Si la condicin se cumple se ejecuta el cdigo contenido, si no, salta.

    >>if condicin

    >>cdigo

    >>end

    else-if

    Igual que if solo que si no cumple la condicin va al otro cdigo.

    >>if condicin

    >>cdigo cuando se cumple la condicin

    >>else

    >>cdigo cuando no se cumple la condicin

    >>end

  • 8

    for

    Ejecuta el cdigo en un ciclo determinado de veces.

    >>for variable=inicio:incremento:final

    >>cdigo

    >>end

    while

    Ejecuta el cdigo mientras la condicin sea verdadera

    >>while condicin

    >>cdigo

    >>end

    El siguiente cdigo servir para realizar una operacin mediante el mtodo de Gauss-

    Jacobi

    clear all clc

    %Definimos variables A=input('Introdusca la matriz A: ') B=input('Introdusca la matriz B: ') ite=input('Introdusca cantidad de iteraciones a realizar: ');

    [f,c]=size(A); %tamao de la matriz, filas, columnas l=tril(A); %matriz triangular inferior u=triu(A); %matriz triangular superior m=diag(A);

    x0=zeros(f,1);

    %creamos matriz triangular inferior y superior while diag(l)>0 for i=1:f l(i,i)=0; %ponemos la cero la fila y columna i u(i,i)=0; end end

    D=zeros(f,c);

    %creamos matriz diagonal de A while diag(D)==0 for i=1:f D(i,i)=m(i,1); end end

    %variables para la solucion C=-inv(D)*(l+u); d=inv(D)*B; xn=x0; k=0; clc fprintf('Las soluciones son: \n'); fprintf('\n');

  • 9

    %soluciones for i=1:ite xi=C*xn+d; xn=xi; k=k+1; fprintf('x(%d)',k); fprintf('%10.4f',xi); fprintf('\n'); end

    fprintf('\n Analisis de convergencia\n'); %***Definicion de variables*** AC=diag(A); contador=0;

    %diagonal dominante for i=1:c ai=A(:,i); %separar en columnas ai(i,i)=0; sum_ai=sum(abs(ai)); %sumar el valor absoluto de la columna for j=1:f acj=AC(j,1); if sum_ai

  • 10

    2) Resolver mediante el mtodo de Gauss-Jacobi:

    652

    64

    642

    63

    64

    54321

    4321

    5432

    4321

    5321

    xxxxx

    xxxx

    xxxx

    xxxx

    xxxx

  • 11

    Mtodo Mnimos Cuadrados

    Dados (n+1) puntos (Xi,Yi) i=0,1,.,n. Se determina la funcin:

    m

    i

    ii xfxf0

    )()(

    Tal que su error sea:

    n

    i

    ii xfy0'

    2))((

    Usando la forma compacta se tiene:

    xi x0 x1 .. xn yi y0 y1 .. yn

    Ajustar por:

    )()()()( 1100 xfxfxfxf mm

    Para obtener m ,...,, 10 se forma el siguiente SEL (sistema de ecuaciones lineales):

    Ax=B

    1)1(

    1

    0

    1)1(

    1

    0

    )1()1(

    10

    11110

    00100

    )()()(

    )()()(

    )()()(

    xnB

    n

    xmX

    m

    mxnA

    nmnn

    m

    m

    y

    y

    y

    xfxfxf

    xfxfxf

    xfxfxf

    Ejemplo: Ajustar los datos por una funcin lineal baxxf )( donde:

    x 0.0 1.0 2.0 2.5 3.0

    y 2.9 3.7 4.1 4.4 5.0

    Se tiene 1*)( baxxf dnde xxf )(0 ; 1)(1 xf

    Las matrices asociadas son:

    *

    13

    15.2

    12

    11

    10

    0.5

    4.4

    1.4

    7.3

    9.2

    b

    a

  • 12

    Se normaliza el SEL multiplicando por la matriz A transpuesta, lo cual quedara:

    BAAAxBAxAA TTTT 1

    Resolviendo en Matlab

    >> A=[0 1 2 2.5 3;1 1 1 1 1]' %Definimos matriz A

    A =

    0 1.0000

    1.0000 1.0000

    2.0000 1.0000

    2.5000 1.0000

    3.0000 1.0000

    >> B=[2.9 3.7 4.1 4.4 5]' %Definimos matriz B

    B =

    2.9000

    3.7000

    4.1000

    4.4000

    5.0000

    >> x=(inv(A'*A))*(A'*B)

    x =

    0.6431

    2.9267

    9267.26431.0)( xxf

    Usando comandos en Matlab

    Definimos los valores de la tabla

    >> xi=[0 1 2 2.5 3]

    xi =

    0 1.0000 2.0000 2.5000 3.0000

    >> yi=[2.9 3.7 4.1 4.4 5];

    Usamos comando polyfit el cual forma el polinomio de interpolacin, y el 1 ya

    que queremos un polinomio de grado 1 de la forma baxxf )(

    >> f=polyfit(xi,yi,1)

    f =

    0.6431 2.9267

    9267.26431.0)( xxf

  • 13

    Graficando los valores

    >> plot(xi,yi,'r*') %usamos r* para obtener una grfico

    con * en rojo

    Ahora generaremos una recta para visualizar el error

    o linspace(inicio,fin,espaciado)

    >> x=linspace(0,5,20); %vamos desde 1 hasta 5

    espaciado 20 veces

    o polyval(funcin, valores), evaluamos el polinomio con valores

    >> y=polyval(f,x);

    >> hold on %Para conservar el grafico anterior

    >> plot(x,y)

    Para saber el error se utilizan los siguientes comandos:

    >> fxi=polyval(f,xi); %evaluamos la funcin encontrada

    9267.26431.0)( xxf con los valores de

    xi

    >> error=sum((yi-fxi)^.2) %sumamos los valores

    error =

    0.0692

    0 0.5 1 1.5 2 2.5 32.5

    3

    3.5

    4

    4.5

    5

    0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 52.5

    3

    3.5

    4

    4.5

    5

    5.5

    6

    6.5

  • 14

    Ejercicios

    1. Dado

    x 0.05 0.12 0.15 0.3 0.45 0.7 0.84 1.05

    y 0.957 0.851 0.832 0.72 0.583 0.378 0.295 0.156

    Ajustar los datos a un polinomio cubico.

    2. Dado

    x 0 8 16 24 32 40

    y 14.621 11.843 9.87 8.418 7.305 6.413

    Ajustar los datos a un polinomio de cuarto grado.

  • 15

    Metodo Runge-Kutta de Orden 4

    Este mtodo se utiliza para resolver Problemas Valor Inicial (PVI) con la siguiente forma:

    Dado el PVI:

    00 )(

    ),('

    yxy

    yxfy

    Hallar )(xy con ah en el intervalo ],[ cb

    Para resolver este tipo de problemas existen varios mtodos pero nosotros estudiaremos

    el mtodo de Runge-Kutta orden 4:

    )22( 432161

    1 kkkkyy nn

    );(*

    );(*

    );(*

    );(*

    34

    223

    222

    1

    2

    1

    kyhxfhk

    yxfhk

    yxfhk

    yxfhk

    donde

    nn

    k

    nh

    n

    k

    nh

    n

    nn

    Para aplicar este mtodo en Matlab se utilizara el siguiente cdigo:

    clc clear all fprintf('METODO DE RUNGE-KUTTA ORDEN 4')

    %****Para poder ingresar "x" e "y" de forma simbolica syms x syms y %************

    fprintf('\n'); %para obtener un espacio

    f=inline(input('Ingrese la derivada de primer orden: ','s')); %inline para poder evaluar la funcin mas adelante % se debe ingresar : "2*x+y" ; para tener y'=2x+y x=input('\nIngrese el valor de Xo: '); y=input('\nIngrese el valor de Yo: '); h=input('\nIngrese el valor de h: '); n=input('\nIngrese numero de iteraciones:'); %Si se desea de [0,2] serian 3 iteraciones, ya que comienza con cero, todo %depende del valor de Xo inicial clc fprintf(' ite x k1 k2 k3 k4 y');

    %creamos un ciclo "for" para realizar las iteraciones necesarias

    for i=1:n k1=h*(feval(f,x,y)); %feval : evaluamos f en x e y

    z=x+(h/2);

  • 16

    w=y +(k1/2); k2=h*(feval(f,z,w));

    w=y+(k2/2); k3=h*(feval(f,z,w));

    z=x+h; w=y+k3; k4=h*(feval(f,z,w));

    fprintf('\n %0.0f %10.1f %10.4f %10.4f %10.4f %10.4f

    %10.4f',i,x,k1,k2,k3,k4,y); x=x+h; y=y+((1/6)*(k1+2*k2+2*k3+k4)); end

    fprintf('\n');

    Este cdigo nos mostrara en columnas los valores correspondientes a cada iteracin

    realizada.

    Ejemplo: Resolver el siguiente PVI.

    1

    5.0)0(

    2'

    h

    y

    xxyy

    En el intervalo [0,2]

    Lo cual al ingresar bien los datos Matlab nos entregara:

    ite x k1 k2 k3 k4 y

    1 0.0 0.0000 1.0000 1.5000 5.0000 0.5000

    2 1.0 5.3333 16.0000 32.0000 138.6667 2.1667

    3 2.0 170.6667 640.0000 1813.3333 11136.0000 42.1667

    Del cual podemos obtener si se desea y(1) o y(2)

    Resolver el siguiente ejercicio: Obtener y(1.5) con h=0.1

    Ingresando bien los datos en Matlab, el resultado de este ejercicio es y(1.5)=3.4902

    1)1(

    2'

    y

    xyy