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.

Comenzando Con Matlab

Embed Size (px)

DESCRIPTION

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

Citation preview

  • 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