Raíces de Una Ecuación (I)

download Raíces de Una Ecuación (I)

of 8

Transcript of Raíces de Una Ecuación (I)

  • 7/26/2019 Races de Una Ecuacin (I)

    1/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    Races de ecuaciones

    Sistemas de ecuaciones

    Valores y vectorespropios

    Integracin numrica

    Ecuacionesdiferenciales

    Interpolacin, regresin

    Inicio MATLAB Numrico

    Races de una ecuacin (I)

    En este captulo vamos a estudiar:

    1. Las races de una ecuacin de segundo grado

    2. Las races de una ecuacin cbica

    3. Las races de una ecuacin transcendente mediante los siguientes mtodos:

    iterativo

    Newton-Raphson

    biseccin o del punto medio

    secante

    grfico

    empleando la funcin MATLABfzero

    4. Las races de un polinomio mediante la funcin MATLAB roots

    La ecuacin de segundo grado

    Las races de la ecuacin de segundo grado ax2+bx+c=0, son

    Creamos una funcin denominada raices_2 que se le pasan el vectorpde los coeficientes [abc] y devuelve las

    racesx1yx2.function [x1,x2] = raices_2(p) dis= sqrt(p(2)*p(2)-4*p(1)* p(3))

    x1=(-p(2)+dis)/(2*p(1)) x2=(-p(2)-dis)/(2*p(1))

    end

    Para calcular las races de la ecuacin de segundo gradox2+x-6 en la la ventana de comandos llamamos a lafuncin raices_2 y le pasamos los coeficientes del polinomio

    >> [r1,r2]=raices_2([1 1 -6])r1= 2

    r2= -3

    Para calcular las races de la ecuacin de segundo gradox2+x+1 escribimos

    >> [r1,r2]=raices_2([1 1 1])

    r1=-0.5000+0.8660i

    r2=-0.5000-0.8660i

    La ecuacin cbica

    Vase http://www.sc.ehu.es/sbweb/fisica_/numerico/raices/raiz_cubica.html

    Expresamos una ecuacin cbica en la forma equivalente

    x3+ax2+bx+c=0

    = =

    1

    b+ 4 a c

    b

    2

    2 a

    2

    b 4 a c

    b

    2

    2 a

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/portada/portada.htmlhttp://www.sc.ehu.es/sbweb/fisica_/numerico/raices/raiz_cubica.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/portada/portada.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/intro.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/index.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/datos/interpolacion.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/diferencial/diferencial.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/integral/integral.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/propios/propios.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/ecuaciones/gauss.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html
  • 7/26/2019 Races de Una Ecuacin (I)

    2/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    dividiendo todos los coeficientes por el primero, de modo que el coeficiente del trminox3es la unidad.

    Las frmulas que permiten calcular las races de una ecuacin cbica son las siguientes:

    SiR2 r=raices_3([1 0 -7 -6])r =

    -2.0000 3.0000

    -1.0000

    Para calcular las races de la ecuacin cbicax3+3x2+3x+2 escribimos en la ventana de comandos

    Q=

    R =

    3ba

    2

    9

    2 9 a b + 2 7ca

    3

    5 4

    = a r c c o s

    ( )

    R

    Q

    3

    = 2 c o s (

    1

    Q

    3

    a

    3

    = 2 c o s (

    2

    Q

    + 2

    3

    a

    3

    = 2 c o s (

    3

    Q

    2

    3

    a

    3

    A= s g n (

    R )(

    | R| + )

    R

    2

    Q

    3

    1

    3

    /

    B =

    Q/

    A A 0

    0 A

    = 0

    = (A + B

    )

    1

    a

    3

    = (A + B

    ) + ( A B )

    2

    1

    2

    a

    3

    3

    2

    = ( A+

    B ) (

    A

    B)

    3

    1

    2

    a

    3

    3

    2

  • 7/26/2019 Races de Una Ecuacin (I)

    3/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    >> r=raices_3([1 3 3 2])

    r = -2.0000

    -0.5000-0.8660i

    -0.5000+0.8660i

    Mtodo de las aproximaciones sucesivas

    El mtodo de las aproximaciones sucesivas es uno de los procedimientos ms importantes y ms sencillos decodificar. Supongamos la ecuacin

    f(x)=0

    dondef(x) es una funcin continua que se desea determinar sus races reales. Se sustituyef(x) por la ecuacinequivalente

    x=g(x)

    Se estima el valor aproximado de la razx0y se sustituye en el segundo miembro de la ecuacin para obtenerx1.

    x1=g(x0)

    Poniendox1como argumento deg(x), obtendremos un nuevo nmerox2y as, sucesivamente. Este proceso se

    puede sintetizar en la frmula.

    xn=g(xn-1)

    Si esta secuencia es convergente es decir, tiende hacia un lmite, la raz buscada es

    El mtodo de iteracin se explica geomtricamente mediante el grfico de la figura. Se dibuja la curvay=g(x), yla rectay=x, bisectriz del primer cuadrante. La abscisa del punto de interseccin es la raz buscada.

    Un ejemplo tpico, es la de encontrar la raz de la ecuacin x=cos(x)

    Para encontrar la raz, se comienza en el punto cualquiera de abscisax0dentro del intervalo (0, /2), y se traza la

    lnea vertical hasta que interseca la curva, luego, desde este punto, se traza una lnea horizontal hasta que sealcanza la recta bisectriz, este punto tendr por abscisax1. Se traza de nuevo, una lnea vertical hasta encontrar a

    la curva, y otra lnea horizontal hasta encontrar la lnea recta, el punto de interseccin tiene de abscisax2y as,sucesivamente. Como podemos apreciar en la figura, la sucesinx1, x2, x3...tiende hacia la raz de la ecuacin

    x=cos(x).

    Vamos ahora a crear un script para calcular la raz de la ecuacin x=cos(x) en el intervalo 0 a /2.

    Tomamos una aproximacin inicial a la razx0, en dicho intervalo y aplicamos la frmulaxn=g(xn-1). Su

    codificacin no presenta grandes dificultades. Escribimos el script trascedenteque guardaremos en el fichero .M

    x=input ('valor inicial: ')

    iter=input('nmero de iteracciones: ')for i=1:iter

    x=cos(x)end

    disp(x)

    = l i m

  • 7/26/2019 Races de Una Ecuacin (I)

    4/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    En la ventana de comandos corremos el script trascendentey obtenemos una aproximacin a la raz buscadadespus de 100 iteraciones

    >>trascendente

    valor inicial: 0.5

    nmero de iteracciones: 100 0.7391

    La condicin de finalizacin

    Primero, introducimos el valor inicialx, la primera aproximacin, calculamos el valor del coseno dex, el valordevuelto (segunda aproximacin), lo guardamos de nuevo en la variablexy repetimos el procesoindefinidamente. El cdigo aunque correcto, necesita terminarse en algn momento, cumpliendo una determinadacondicin.

    Cuando el valor absoluto del cociente entre la diferencia de dos trminos consecutivos de la sucesin y uno de lostrminos, sea menor que cierta cantidad .

    Este criterio, no es completamente riguroso, pero es un buen punto de partida para el estudio de este mtodo.

    Modificamos el script trascendentepara sustituir el bucle forpor un bucle whileindefinido que se interrumpecuando se cumpla la condicin de terminacin .

    x0=input ('valor inicial: ')

    ERROR=0.001while(1) %bucle que se ejecuta indefinidamente

    x=cos(x0) if abs((x-x0)/x)>trascedentevalor inicial: 0.5

    0.7387

    El criterio de convergencia

    No todas las ecuaciones pueden resolverse por este mtodo, solamente si el valor absoluto de la derivada de la

    funcing(x) en la vecindad de la raz es menor que la unidad (la pendiente de la recta bisectriz del primercuadrante es uno). En la figura, podemos ver como es imposible encontrar la solucin marcada por un puntitonegro en la interseccin entre la curva y la recta bisectriz del primer cuadrante, ya que la sucesinxidiverge.

  • 7/26/2019 Races de Una Ecuacin (I)

    5/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    Por ejemplo, la ecuacin

    x3-x-1=0

    tiene una raz en el intervalo (1, 2) ya quef(1)=-10.Esta ecuacin puede escribirse de la forma

    x=x3-1

    En este caso,

    g(x)=x3-1 y su derivada es g'(x)= 3x2

    y por tanto,

    g'(x)3 para 1x2

    en consecuencia, no se cumplen las condiciones de convergencia del proceso de iteracin. Si escribimos laecuacin en la forma

    como podr verificar fcilmente el lector, cumple las condiciones de convergencia, obtenindose rpidamente unvalor aproximado de la raz buscada mediante el procedimiento de iteraccin.

    Podemos transformar el script en una funcin que denominamos raiz_trascendente para que calcule la raz de laecuacinx-cos(x)=0

    function x=raiz_trascendente(x0, ERROR) while(1)

    x=cos(x0) if abs((x-x0)/x)>raiz_trascedente (0.5,0.0001)

    ans = 0.7391

    Vamos a hacer que este cdigo sea independiente de la funcinx=g(x) cuya raz queremos calcular. En elcaptulo funciones, ya hemos visto que a una funcin se le pueden pasar diversos tipos de datos: escalares,vectores, strings y tambin, funciones.

    Modificamos la definicin de la funcin raiz_trascendente y le pasamos la funcinfque definiremos en laventana de comandos, en su primer parmetro y a continuacin, la aproximacin inicialx0 y el error o toleranciaen la raz buscada.

    function x=raiz_trascendente(f,x0,ERROR)

    while(1) x=f(x0)

    if abs((x-x0)/x)

  • 7/26/2019 Races de Una Ecuacin (I)

    6/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    endend

    En la ventana de comandos, definimos la funcin annimag(x) y calculamos la raz de la ecuacin trascendentex=g(x).

    >> g=@(x) cos(x)>> raiz_trascendente(g,0.5,0.001)

    ans = 0.7393

    Para aplicar el mtodo de las aproximaciones sucesivas hemos de escribir la ecuacinf(x)=0 comox=g(x) y

    debern adems, cumplirse las condiciones de convergencia en el proceso de iteraccin.

    Mtodo de Newton-Raphson

    El desarrollo en serie de la funcinf(x) en el puntoxes

    Si hes pequeo, podemos despreciar los trminos en h2y superiores. Six+hes la raz de la ecuacin,entoncesf(x+h)=0,

    Para calcular la raz podemos crear un desarrollo iterativo de la siguiente forma

    Definimos el procedimiento de Newton-Raphson de un modo similar al de las aproximaciones sucesivas

    function x=newton_raphson(f,f_prima,x0,ERROR)

    while(1) x=x0-f(x0)/f_prima(x0)

    if abs((x-x0)/x)

  • 7/26/2019 Races de Una Ecuacin (I)

    7/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    abscisax2y as, sucesivamente.

    f=@(x) x.*sin(pi*x)-exp(-x)fp=@(x) sin(pi*x)+x*pi*cos(pi*x)+exp(-x)

    hold on

    x=linspace(0,0.8,50)

    plot(x,f(x),'r')x0=0.1

    for i=1:5 x1=x0-f(x0)/fp(x0)

    h=line([x0,x0],[0,f(x0)],'color','g') set(h,'lineStyle', '--')

    line([x1,x0],[0,f(x0)],'color','b') x0=x1

    endhold off

    grid onxlabel('x')

    ylabel('y')

    title('Mtodo de Newton-Raphson')

    Calculamos la raz

    >> f=@(x) x*sin(pi*x)-exp(-x)

    >> fp=@(x) sin(pi*x)+x*pi*cos(pi*x)+exp(-x)

    >> newton_raphson(f,fp,0.1,0.0001)ans = 0.5783

    Si no conocemos la derivada de la funcin podemos calcularla aplicando la definicin de derivada

    Podemos tomar un valor estimativo de =10-6o cambiarlo dependiendo del problema. La frmula de Newton-Raphson se convierte en

    function x=newton_raphson_1(f,x0,ERROR) DELTA=1.0e-6

    while(1)

    x=x0-DELTA*f(x0)/(f(x0+DELTA)-f(x0))

    if abs((x-x0)/x)

  • 7/26/2019 Races de Una Ecuacin (I)

    8/8

    1/6/2016 Races de una ecuacin (I)

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices.html

    break end

    x0=x endend

    A la funcin newton_raphson_1, le pasamos la funcinf, la aproximacin inicialx0 y la tolerancia ERROR.Consideremos la funcinf(x)=x-cos(x), en la ventana de comandos escribimos

    >> func=@(x) x-cos(x)

    >> newton_raphson_1(func,0.5,0.0001)

    ans = 0.7391

    Energas Renovables EUITI de Eibar

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_1.html