Monografias.com > Matemáticas
Descargar Imprimir Comentar Ver trabajos relacionados

El algoritmo de Ruffini (Horner) y su generalización para ordenadores




Enviado por Aladar Peter Santha



Partes: 1, 2

    Monografias.com

    1

    El algoritmo de Ruffini (Horner) y su generalización para ordenadores.
    Aladar Peter Santha

    Teorema 1: Si f X a n X n a n 1 X n 1 ? a 2 X 2 a1 X a 0 n 1 y g X X a
    , son dos polinomios con coeficientes en un anillo conmutativo con elemento neutro,
    entonces existe un polinomio q X
    A X de grado n 1 y r A tales que
    f X
    Demostración: Suponiendo que
    X a q X r
    (1)
    q X
    bn 1 X n
    1
    bn
    2 X
    n 2
    ? b1 X
    b0
    X
    a q X
    r
    bn 1 X
    n
    bn
    2
    abn
    1
    X
    n 1
    bn
    3
    abn
    2
    X n
    2
    ?
    ?
    b2
    ab3 X
    3
    b1
    ab2 X
    2
    b0
    ab1 X
    r
    ab0
    , de la igualdad (1) resulta que
    bn
    1
    an
    bn
    bn
    2
    3
    abn
    abn
    1
    2
    an 1
    an 2
    bn
    bn
    2
    3
    an
    an
    1
    2
    abn 1
    abn 2
    ………………………………………………………………
    b2 ab3 a3
    b1 ab2 a3
    b0 ab1 a3
    r ab0 a0
    b2 a3 ab3
    b1 a2 ab2
    b0 a1 ab1
    r a0 ab0
    (2)
    Según las igualdades (2), al conocer el coeficiente bi del polinomio q X , el
    coeficiente bi 1 se puede calcular según la fórmula siguiente:
    bi 1 ai abi i n 1 , ? 0 .
    Este procedimiento sencillo para el cálculo de los coeficientes del cociente, entre el
    polinomio f X y el polinomio X a , se llama el algoritmo de Ruffini (ó Hörner). El
    cálculo se puede organizar según el esquema siguiente:
    a
    an
    an
    abn
    1

    1
    an

    abn
    2

    2


    a 2

    ab2
    a1

    ab1
    a0
    ab0
    bn
    1
    an
    bn
    2
    bn
    3

    b1
    b0
    r
    Para rellenar la tabla, se completan primero las casillas con los coeficientes del
    polinomio y la casilla con el valor de a . Como segundo paso, en la casilla que se
    encuentra en la columna de an y la tercera fila, se coloca el valor de an . En la tercera
    etapa, se rellenan progresivamente las casillas de la segunda y la tercera fila. Para esto
    se multiplica con a el contenido de la última casilla rellenada en la tercera fila y se
    coloca el producto en la casilla de la segunda fila de la columna siguiente, luego se
    suma el contenido de ésta última casilla con el contenido de la casilla que se encuentra
    en la primera fila de la misma columna, colocando la suma en la tercera fila de ésta
    columna. El proceso se continúa hasta que la tabla quedará rellenada.
    Ejemplo 1: Si A R , f X X 4 2 X 2 2 X 5 y a 2 , entonces se obtiene la tabla
    siguiente:

    Monografias.com

    2
    2
    1

    1
    0

    2
    2
    -2

    4
    2
    3

    4
    7
    -5

    14
    11
    , de donde resulta que
    q X
    X 3
    2 X 2
    2 X
    7 y r
    11 .
    Si los coeficientes del polinomio y el valor del parámetro a son enteros o decimales, la
    codificación del cálculo del ejemplo 1 es la siguiente:

    Public Function RuffiniAR(ByRef p() As Double, ByVal a As Double) As String
    Dim q() As Double, g As Integer, i As Integer
    Dim res As String, c() As Double, rc As String
    g = UBound(p()): rc = Chr$(13) + Chr$(10)
    ReDim q(g), c(g – 1)
    q(0) = p(0)
    For i = 0 To g – 1
    q(i + 1) = q(i) * a + p(i + 1)
    Next i
    For i = 0 To g – 1: c(i) = q(i): Next i
    'c() es el cociente
    res = "Cosiente = " + FormatoPolR(c()) + rc
    RuffiniAR = res + "Resto = " + Str$(q(g)) ' q(g) es el resto
    End Function
    ‘ ————————————-
    Public Function FormatoPolR(ByRef qx() As Double) As String
    Dim i As Integer, pol As String
    gx = UBound(qx())
    If Abs(qx(0)) = 1 Then
    If qx(0) = 1 Then
    If gx > 1 Then
    pol = pol + "X^" + Str$(gx)
    Else
    pol = pol + "X"
    End If
    End If
    If qx(0) = -1 Then
    If gx > 1 Then
    pol = pol + "- X^" + Str$(gx)
    Else
    pol = pol + "- X"
    End If
    End If
    Else
    If Abs(qx(0)) > 1 Then
    pol = pol + Str$(qx(0))
    Else
    If qx(0) > 0 Then
    pol = pol + "0" + Mid$(Str$(Abs(qx(0))), 2)
    Else
    pol = pol + "- 0" + Mid$(Str$(Abs(qx(0))), 2)
    End If
    End If
    If gx > 1 Then
    pol = pol + " X^" + Str$(gx)
    Else
    pol = pol + " X"
    End If
    End If
    For i = 1 To gx
    If qx(i) 0 Then
    If qx(i) < 0 Then
    pol = pol + " – "
    Else
    pol = pol + " + "
    End If
    If Abs(qx(i)) 1 Then
    If Abs(qx(i)) > 1 Then
    pol = pol + Mid$(Str$(Abs(qx(i))), 2)

    Monografias.com

    3

    Else
    pol = pol + "0" + Mid$(Str$(Abs(qx(i))), 2)
    End If
    Else
    If i = gx Then
    pol = pol + Mid$(Str$(1), 2)
    End If
    End If
    If i < gx Then
    pol = pol + " X"
    End If
    If i < gx – 1 Then
    pol = pol + "^" + Str$(gx – i)
    End If
    End If
    Next i
    VerPolR = pol
    End Function

    Observación 1: Si se pone X a en la igualdad (1) resulta que f a r , es decir el
    valor del polinomio f x en el punto a es el resto de la división del polinomio
    con X a . De hecho, el esquema de Ruffini se utiliza más bien para calcular los valores
    de las funciones de tipo polinomio (este es el caso cuando se aproximan los ceros de un
    polinomio por el método de la bipartición). La función RuffiniAR se puede adaptar a
    este caso, cuando no interesan los coeficientes del cociente:

    Public Function ValPolR(ByRef p() As Double, ByVal a As Double) As Double
    Dim i As Integer, gp As Integer, q As Double
    gp = UBound(p()): q = p(0)
    For i = 0 To gp – 1: q = q* a + p(i + 1): Next i
    ValPolR = q
    End Function

    Si el polinomio o el parámetro a tienen valores que no son ni enteros ni decimales,
    entonces considerando valores aproximados para ellos, el código RuffiniA devolverá
    un resultado que es también aproximado. Por ejemplo, si
    f X
    X 4
    3 X 2 X 2 2 X 5 y a 7 / 3
    Entonces considerando las aproximaciones 3 1.732050807588 y 7 / 3 2.333333333333 ,
    la función RuffiniAdevolverá el resultado siguiente:
    q X
    X 3
    q1 X 2
    q 2 X
    q 3 y r
    50.4232133….
    , donde q1 4.065384140901, q2 7.48589632876764 y q3 4670914337887 .
    La precisión de estos últimos cálculos no es muy grande, teniendo en cuenta que
    haciendo los cálculos a mano se obtiene r 50.42319 … .
    Si en la resolución de las ecuaciones algebraicas por el método de la bipartición se
    quieren calcular los ceros con más de 16 decimales después del punto decimal, los
    valores de la polinomio hay que calcular con el método de Ruffini adaptado a las
    operaciones con enteros y decimales largos:

    Public Function ValPolRG(ByRef p() As String, ByVal a As String) As String
    Dim i As Integer, gp As Integer, q As String, x(2) String, n as integer
    gp = UBound(p()): q = p(0):n7= 7
    For i = 0 To gp – 1
    x(1) = q: x(2) = a: x(1) = MultiplicarDec(x(1), x(2))
    x(2) = p(i+1): q = SumarDec(x(1), x(2))

    Next i
    ValPolRG = q
    End Function
    Ejemplo 2: Si A C , f X
    2 3i X 4
    2 X 2
    5 i X
    7 4i y a
    3 i
    , entonces se obtiene la tabla siguiente:

    Monografias.com

    q X
    4
    3+i
    2-3i

    2-3i
    0

    9-7i

    9-7i
    -2

    34-12i

    32-12i
    5+i

    108-4i

    113-3i
    7-4i

    342+104i

    349+100i
    Así,
    2 3i X 3 9 7i X 2 32 12i X 113 3i y r 349 100i
    Los cálculos se pueden programar para ordenadores de la manera siguiente:

    Public Function RuffiniAC(ByRef p1() As Double, ByRef p2() As Double, ByRef a() As Double) As Variant
    Dim i As Integer, gx As Integer, coci As String, r As String, rc As String
    Dim q() As Double, x() As Double, rt() As Double, ra As String
    gx = UBound(p1()): rc = Chr$(13) + Chr$(10)
    ReDim q(gx, 2), x(2)
    q(0, 1) = p1(0): q(0, 2) = p2(0)
    For i = 1 To gx
    x(1) = q(i – 1, 1): x(2) = q(i – 1, 2)
    rt() = ProdNC(x(), a())
    q(i, 1) = rt(1) + p1(i): q(i, 2) = rt(2) + p2(i)
    Next i
    ReDim q1(gx – 1), q2(gx – 1)
    For i = 0 To gx – 1
    q1(i) = q(i, 1): q2(i) = q(i, 2)
    Next i
    coci = FormatoPolinomioComplejo(q1(), q2())
    ra = "Cociente: " + coci + rc
    r = FormatoNumeroComplejo(q(gx, 1), q(gx, 2))
    ra = ra + rc + "Resto de la división = " + r
    RuffiniAC = ra
    End Function
    ‘ ——————————————
    Public Function ProdNC(ByRef x() As Double, ByRef a() As Double) As Variant
    Dim pr() As Double
    ReDim pr(2)
    pr(1) = x(1) * a(1) – x(2) * a(2)
    pr(2) = x(1) * a(2) + a(1) * x(2)
    ProdNC = pr()
    End Function
    ‘ ——————————————————–
    Public Function FormatoPolinomioComplejo(ByRef z1() As Double, ByRef z2() As Double) As String
    Dim i As Integer, j As Integer, gx As Integer
    Dim cd As String, cm As String
    gx = UBound(z1())
    For i = 0 To gx
    If z1(i) 0 Or z2(i) 0 Then
    If i = 0 Then
    If z2(0) = 0 Then
    If Abs(z1(0)) 1 Then
    cm = f2(z1(0))
    Else
    If gx 0 Then
    If z1(0) = -1 Then cm = "-"
    Else
    If z1(0) = -1 Then cm = Str$(-1) Else cm = Mid$(Str$(1), 2)
    End If
    End If
    Else
    If gx 0 Then
    If z1(0) 0 Then
    cm = cm + "(" + f2(z1(0))
    End If
    If Abs(z2(0)) 1 Then
    If z1(0) 0 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " i )"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " i )"

    Monografias.com

    5
    End If
    Else
    cm = cm + f2(z2(0)) + " i"
    End If
    Else
    If z2(0) = 1 Then cm = cm + " + i )" Else cm = cm + " – i )"
    End If
    Else
    cm = cm + f2(z1(0))
    If Abs(z2(0)) 1 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " i"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " i"
    End If
    Else
    If z2(0) = 1 Then cm = cm + "+ i" Else cm = cm + "- i"
    End If
    End If
    End If
    If gx 0 Then
    If gx = 1 Then
    cm = cm + " X "
    Else
    cm = cm + " X^" + Mid$(Str$(gx), 2)
    End If
    End If
    Else
    If Abs(z2(i)) 0 Then
    If i < gx Then
    If z1(i) 0 Then
    cd = cd + " + (" + f2((z1(i)))
    If Abs(z2(i)) 1 Then
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " i )"
    Else
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " i )"
    End If
    End If
    Else
    If z2(i) = 1 Then cd = cd + " + i )" Else cd = cd + " – i )"
    End If
    Else
    If Abs(z2(i)) 1 Then
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    Else
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    End If
    End If
    Else
    If z2(i) = 1 Then cd = cd + " + i" Else cd = cd + " – i"
    End If
    End If
    Else
    If z1(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z1(i)), 2))
    Else
    If z1(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z1(i)), 2))
    End If
    End If
    If Abs(z2(i)) 1 Then
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    Else
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    End If
    End If
    Else
    If z2(i) = 1 Then cd = cd + " + i" Else cd = cd + " – i"
    End If
    End If

    Monografias.com

    6
    Else
    If Abs(z1(i)) 0 Then
    If Abs(z1(i)) 1 Then
    If z1(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z1(i)), 2))
    Else
    cd = cd + " + " + f1(Mid$(Str$(z1(i)), 2))
    End If
    Else
    If z1(i) = 1 Then cd = cd + " + " Else cd = cd + " – "
    End If
    End If
    End If
    If gx > 1 Then
    If i < gx – 1 Then
    cd = cd + " X^" + Mid$(Str$(gx – i), 2)
    Else
    If i = gx – 1 Then
    cd = cd + " X "
    End If
    End If
    End If
    cm = cm + cd: cd = ""
    End If
    End If
    Next i
    FormatoPolinomioComplejo = cm
    End Function
    ‘ ——————————————————-
    Public Function FormatoNumeroComplejo(ByVal pr As Double, ByVal pi As Double) As String
    Dim r As String
    If pr 0 Then
    r = r + f2(pr)
    End If
    If pi 0 Then
    If Abs(pi) = 1 Then
    If pi = 1 Then r = r + " + " Else r = r + " – "
    Else
    If pi > 0 Then
    If pr 0 Then r = r + " + "
    r = r + f2(pi)
    Else
    r = r + " – " + f1(Mid$(Str$(pi), 2))
    End If
    End If
    r = r + " i"
    End If
    If r = "" Then r = "0"
    FormatoNumeroComplejo = r
    End Function
    ‘ ——————————————
    Public Function f1(ByVal x As String) As String
    If Abs(Val(x)) >= 1 Then
    f1 = x
    Else
    If Left$(x, 1) = "." Then f1 = "0" + x Else f1 = x
    End If
    End Function
    ‘ ——————————————
    Public Function f2(ByVal x As Double) As String
    Dim xx As String
    xx = Str$(x)
    If Abs(x) >= 1 Then
    f2 = Str$(x)
    Else
    If Left$(xx, 1) = "-" Then
    If Left$(xx, 2) = "-." Then f2 = "-0" + Right$(xx, Len(xx) – 1) Else f2 = xx
    Else
    If x = 0 Then
    f2 = Str$(0)
    Else
    If Left$(xx, 2) = " ." Then f2 = "0" + Right$(xx, Len(xx) – 1) Else f2 = xx
    End If
    End If
    End If
    End Function

    Monografias.com

    q X
    7

    Ejemplo 3: Sea A DU , donde DU es el anillo de los números duales, que tienen la
    forma a b ( a, b R, 2 0 y
    0 ). Si
    f X
    2 3 X
    4
    2 X
    2
    5
    X 7 4 y a 3
    , entonces
    3
    2- 3

    2- 3
    0

    6-7

    6-7
    -2

    18-15

    16-15
    5+

    48-29

    53-28
    7- 4

    159-31

    166-35
    2 3 X 3 6 7 X 2 16 15 X 53 28i y r 166 35
    Los cálculos se pueden programar para ordenadores de la manera siguiente:

    Public Function RuffiniAD(ByRef p1() As Double, ByRef p2() As Double, ByRef a() As Double) As Variant
    Dim i As Integer, gx As Integer, coci As String, r As String, rc As String
    Dim q() As Double, x() As Double, rt() As Double, ra As String
    gx = UBound(p1()): rc = Chr$(13) + Chr$(10)
    ReDim q(gx, 2), x(2)
    q(0, 1) = p1(0): q(0, 2) = p2(0)
    For i = 1 To gx
    x(1) = q(i – 1, 1): x(2) = q(i – 1, 2)
    rt() = ProdND(x(), a())
    q(i, 1) = rt(1) + p1(i): q(i, 2) = rt(2) + p2(i)
    Next i
    ReDim q1(gx – 1), q2(gx – 1)
    For i = 0 To gx – 1
    q1(i) = q(i, 1): q2(i) = q(i, 2)
    Next i
    coci = FormatoPolinomioComplejo(q1(), q2())
    ra = "Cociente: " + coci + rc
    r = FormatoNumeroComplejo(q(gx, 1), q(gx, 2))
    ra = ra + rc + "Resto de la división = " + r
    RuffiniAD = ra
    End Function
    ‘ ——————————————
    Public Function ProdND(ByRef x() As Double, ByRef a() As Double) As Variant
    Dim pr() As Double
    ReDim pr(2)
    pr(1) = x(1) * a(1)
    pr(2) = x(1) * a(2) + a(1) * x(2)
    ProdND = pr()
    End Function
    ‘ ——————————————
    Public Function FormatoPolinomioDual(ByRef z1() As Double, ByRef z2() As Double) As String
    Dim i As Integer, j As Integer, gx As Integer
    Dim cd As String, cm As String
    gx = UBound(z1())
    For i = 0 To gx
    If z1(i) 0 Or z2(i) 0 Then
    If i = 0 Then
    If z2(0) = 0 Then
    If Abs(z1(0)) 1 Then
    cm = f2(z1(0))
    Else
    If gx 0 Then
    If z1(0) = -1 Then cm = "-"

    Monografias.com

    8
    Else
    If z1(0) = -1 Then cm = Str$(-1) Else cm = Mid$(Str$(1), 2)
    End If
    End If
    Else
    If gx 0 Then
    If z1(0) 0 Then cm = cm + "(" + f2(z1(0))
    If Abs(z2(0)) 1 Then
    If z1(0) 0 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " e )"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " e )"
    End If
    Else
    cm = cm + f2(z2(0)) + " e"
    End If
    Else
    If z2(0) = 1 Then cm = cm + " + e )" Else cm = cm + " – e )"
    End If
    Else
    cm = cm + f2(z1(0))
    If Abs(z2(0)) 1 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " e"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " e"
    End If
    Else
    If z2(0) = 1 Then cm = cm + "+ e" Else cm = cm + "- e"
    End If
    End If
    End If
    If gx 0 Then
    If gx = 1 Then
    cm = cm + " X "
    Else
    cm = cm + " X^" + Mid$(Str$(gx), 2)
    End If
    End If
    Else
    If Abs(z2(i)) 0 Then
    If i < gx Then
    If z1(i) 0 Then
    cd = cd + " + (" + f2((z1(i)))
    If Abs(z2(i)) 1 Then
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " e )"
    Else
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " e )"
    End If
    End If
    Else
    If z2(i) = 1 Then cd = cd + " + e )" Else cd = cd + " – e )"
    End If
    Else
    If Abs(z2(i)) 1 Then
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " e"
    Else
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " e"
    End If
    End If
    Else
    If z2(i) = 1 Then cd = cd + " + e" Else cd = cd + " – e"
    End If
    End If
    Else
    If z1(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z1(i)), 2))
    Else
    If z1(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z1(i)), 2))
    End If

    Monografias.com

    9
    End If
    If Abs(z2(i)) 1 Then
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " e"
    Else
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " e"
    End If
    End If
    Else
    If z2(i) = 1 Then cd = cd + " + e" Else cd = cd + " – e"
    End If
    End If
    Else
    If Abs(z1(i)) 0 Then
    If Abs(z1(i)) 1 Then
    If z1(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z1(i)), 2))
    Else
    cd = cd + " + " + f1(Mid$(Str$(z1(i)), 2))
    End If
    Else
    If z1(i) = 1 Then cd = cd + " + " Else cd = cd + " – "
    End If
    End If
    End If
    If gx > 1 Then
    If i < gx – 1 Then
    cd = cd + " X^" + Mid$(Str$(gx – i), 2)
    Else
    If i = gx – 1 Then
    cd = cd + " X "
    End If
    End If
    End If
    cm = cm + cd: cd = ""
    End If
    End If
    Next i
    FormatoPolinomioDual = cm
    End Function
    ‘ ——————————————
    Public Function f1(ByVal x As String) As String
    If Abs(Val(x)) >= 1 Then
    f1 = x
    Else
    If Left$(x, 1) = "." Then
    f1 = "0" + x
    Else
    f1 = x
    End If
    End If
    End Function
    ‘- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
    Public Function f2(ByVal x As Double) As String
    Dim xx As String
    xx = Str$(x)
    If Abs(x) >= 1 Then
    f2 = Str$(x)
    Else
    If Left$(xx, 1) = "-" Then
    If Left$(xx, 2) = "-." Then
    f2 = "-0" + Right$(xx, Len(xx) – 1)
    Else
    f2 = xx
    End If
    Else
    —————————————————–
    Public Function FormatoNumeroDual(ByVal pr As Double, ByVal pi As Double) As String
    Dim r As String
    If pr 0 Then
    r = r + f2(pr)
    End If
    If pi 0 Then
    If Abs(pi) = 1 Then
    If pi = 1 Then r = r + " + " Else r = r + " – "

    Monografias.com

    f X
    2 son:
    X
    X
    X
    10

    Else
    If pi > 0 Then
    If pr 0 Then
    r=r+"+ "
    End If
    r = r + f2(pi)
    Else
    r = r + " – " + f1(Mid$(Str$(pi), 2))
    End If
    End If
    r = r + " e"
    End If
    If r = "" Then r = "0"
    FormatoNumeroDual = r
    End Function
    Si en lugar de X a , se desea dividir el polinomio
    bX a (b 0) , entonces de las igualdades:
    con el polinomio
    f X
    X
    a
    b
    q X
    r
    f X
    bX
    a q1 X
    r1
    X
    a
    b
    q X
    r
    bX
    a
    q X
    b
    r
    , resulta que
    q1 X
    q X
    b
    y r1
    r
    Ejemplo 4: Para dividir el polinomio del ejemplo 1 con 3X 2 se dividirá primero el
    polinomio f X con X 2 / 3 . Los cálculos se reflejan en la tabla siguiente:
    2
    3
    1

    1
    0

    2
    3
    2
    3
    -2

    4
    9
    14
    9
    3

    28
    27
    53
    27
    -5

    106
    81
    299
    81
    , de donde resulta que el cociente y el resto en la división con 3X
    q X
    1 3
    3
    2 2
    9
    14
    27
    X
    53
    81
    y r
    299
    81
    , respectivamente.
    Ejemplo 5: Para dividir el polinomio del ejemplo 2 con (3 i) X (2 5i) se dividirá el
    polinomio primero entre X
    2 5i
    3 i
    1 17
    10 10
    i , según la tabla siguiente:
    1 17i
    10
    2+3i

    2+3i
    0

    49 37i
    10
    49 37i
    10
    -2

    339 398i
    50
    239 398i
    50
    5+i

    28
    27
    53
    27
    7-4i

    106
    81
    299
    81

    Monografias.com

    X
    X
    1
    1
    1
    i
    11
    q X
    3 11i 3
    10
    92 31i 2
    10
    223 191i
    100
    X
    159 53i
    270
    y r
    299
    81
    Dados el polinomio P X de grado n y el número real a , el esquema de Ruffini es
    también útil para hallar los coeficientes de un polinomio Q Y de grado n , tal que
    Q X a P X . En efecto, si
    P X
    P X
    P X
    P2 X
    X a r0
    X a r1
    ………. ………. ………. ………. ……
    Pn
    1
    X
    Pn X
    X
    a
    rn
    , donde grado Pi X
    Entonces
    n i
    i 1, ? , n
    P X
    P X
    X
    a
    r0
    P2 X
    X
    a
    2
    r1 X
    a
    r0
    P3 X
    X
    a
    3
    r2 X
    a
    2
    r1 X
    a
    r0
    ………. ………. ………. ………. ………. ………. ………. .
    rn X
    X
    a
    n
    rn
    1
    X
    a
    n 1
    ? r1 X
    a
    r0
    , donde r0 P a , r1 P1 a , r2 P2 a , ? , rn Pn a .
    Los cálculos anteriores se pueden codificar de la manera siguiente:

    Public Function RuffiniB(ByRef p() As Double, ByVal a As Double) As String
    Dim i As Integer, j As Integer, g As Integer, r() As Double, q() As Double
    g = UBound(p())
    ReDim r(g, g), q(g)
    For i = 0 To g
    r(i, 0) = p(i)
    Next i
    For i = 1 To g
    r(0, i) = p(0)
    Next i
    For j = 1 To g-j
    For i = 1 To g – j + 1
    r(i, j) = a * r(i – 1, j) + r(i, j – 1)
    Next i
    Next j
    q(0) = p(0)
    For i = 1 To g
    q(i) = r(i, g – i + 1)
    Next i
    RuffiniB = FormatoPol(q())
    End Function
    Los coeficientes del polinomio buscado serán los números q i
    0, ? , g , donde g
    es el grado del polinomio p() .

    Ejemplo 6: Si P X 2 X 3 7 X 2 5 X 9 y a 3 entonces según la función
    anterior, Q X 2 X 3 11X 2 17 X 15 y así, P X 2 X 3 3 11 X 3 2 17 X 3 15 .
    Los cálculos a mano se podrían organizar según la tabla siguiente:
    2,
    -7
    5
    9
    3
    3
    3
    2
    2
    2
    -1
    5
    11 r2
    17
    2
    r1
    15 r0

    Monografias.com

    4
    3
    2
    12
    2
    r3
    Ejemplo 7: Si P X
    2 3i X 4
    1 7i X 3
    9 5i X 2
    8 i X
    4 3i
    y a 3 i , entonces
    Q X
    2 3i X 4
    37 21i X 3
    201 11i X 2
    426 167i X
    309 282i
    ,y
    P X
    2 3i X
    a
    37 21 X
    a
    201 11i X
    a
    426 167i X
    a
    309 282i
    El esquema de Ruffini para dividir un polinomio por el polinomio X a se puede
    generalizar para el caso cuando se divide con un polinomio cuyo coeficiente director es
    1. En efecto, si se quiere dividir el polinomio
    , con el polinomio
    A X
    a0 X n a1 X n 1 ? a n 1 X a n
    (3)
    P X
    X m
    p1 X m
    1
    ?
    p m 1 X
    p m
    (m
    n)
    (4)
    , sean
    Q X
    q0 X n
    m
    q1 X n
    m 1
    ? qn
    m 1
    X
    qn
    m
    (5)
    R X
    r0 X n
    m 1
    r1 X n
    m 2
    ? rn
    m 2 X
    rn
    m 1
    (6)
    , el cociente y el resto de la división, respectivamente. Entonces se cumple la igualdad
    A X P X Q X R X
    (7)
    A continuación se efectuará el desarrollo de la expresión P X Q X R X en los dos
    casos siguientes:
    1) Si n 8 y m 3 , el cálculo de la expresión mencionada se puede organizar según la
    tabla siguiente:
    X 8
    X 7
    X 6
    X 5
    X 4
    X 3
    X 2
    X 1
    X 0
    q0
    q1
    q 2
    q3
    q 4
    q5
    p1q0
    p1q1
    p1q2
    p1q3
    p1q4
    p1q5
    p2 q0
    p2 q1
    p2 q2
    p2 q3
    p2 q4
    p2 q5
    p3 q0
    p3 q1
    p3 q2
    p3 q3
    p3 q4
    p3 q5
    Así
    r0
    r1
    r2
    P X Q X
    R X
    S X
    s 0 X 8
    s1 X 7
    s 2 X 6
    s 3 X 5
    s 4 X 4
    s 5 X 3
    s 6 X 2
    s 7 X
    s8
    , donde
    s0
    s1
    s2
    q0
    q1 p1q0
    q2 p1q1 p2 q0
    s3
    q3 p1q2 ` p2 q1
    p3 q0
    s4
    q4
    p1q3
    p2 q2
    p3 q1
    (8)

    Monografias.com

    s6
    R X
    13
    s 5
    a q5
    p1 q 4
    p 2 q 3
    p 3 q 2
    p1q5 p2 q4
    p3 q3 r0
    s7
    s8
    p2 q5 p3 q4
    p3 q5 r2
    r1
    Identificando los polinomios A X y S X resulta que
    q0 a0
    q1
    a1
    p1q0
    a1
    p j qk
    (0
    j
    m, 0
    k 1)
    j k 1
    q2
    a2
    p1q1
    p2 q0
    a2
    p j qk
    (0
    j
    m, 0 k
    2 )
    j k 2
    q3
    a3
    p1q2
    p2 q1
    p3 q0
    a3
    p j qk
    0
    j
    m, 0 k
    3
    j k 3
    q4
    a4
    p1q3
    p2 q2
    p3 q1
    a4
    p j qk
    0
    j
    m, k
    4
    (9)
    j k 4
    q5
    a5
    p1q4
    p2 q3
    p3 q2
    qn
    n
    an
    m
    p j qk
    0
    j
    m,
    k
    5
    j k n m
    r0
    a6
    p1q5
    p2 q4
    p3 q3
    an
    m 1
    p j
    qk
    0
    j
    m, k
    n m
    j k n m 1
    r1
    a7
    p2 q5
    p3 q4
    an
    m 2
    p j
    qk
    0
    j
    m, k
    n m
    j k n m 2
    r2
    a8
    p3 q5
    an
    m 3
    p j
    qk
    0
    j
    m, k
    n m
    jçk n m 3
    2) Si n 8 y m 6 , el cálculo de la expresión P X Q X
    la tabla siguiente:
    se puede efectuar según
    X 8
    X 7
    X 6
    X 5
    X 4
    X 3
    X 2
    X 1
    X 0
    q0
    q1
    q 2
    p1q0
    p1q1
    p1q2
    p2 q0
    p2 q1
    p2 q2
    p3 q0
    p3 q1
    p3 q2
    p4 q0
    p4 q1
    p4 q2
    p5 q0
    p5 q1
    p5 q2
    p6 q0
    p6 q1
    p6 q2
    r0
    r1
    r2
    r3
    r4
    r5
    Así,
    P X Q X
    R X
    S X
    s 0 X 8
    s1 X 7
    s 2 X 6
    s 3 X 5
    s 4 X 4
    s 5 X 3
    s 6 X 2
    s 7 X
    s8
    s0
    s1
    s2
    q0
    q1 p1q0
    q2 p1q1 p2 q0
    s3
    p1q2 ` p2 q1 p3 q0
    r0
    s4
    s5
    p2 q2
    p3 q2
    p2 q1
    p4 q1
    p3 q0 r1
    p5 q0 r2
    (8’)

    Monografias.com

    (10)
    j
    14
    s6
    s7
    s8
    p4 q2
    p5 q2
    p6 q2
    p5 q1 p6 q0
    p6 q1 r4
    r5
    r3
    Luego, Identificando los polinomios A X y S X resulta que
    q0
    a0
    q1
    a1
    p1q0
    a1
    p j qk
    (0
    j
    m, 0 k 1 )
    j k 1
    q2
    a2
    p1q1
    p2 q0
    a2
    p j qk
    (0
    j
    3, 0 k
    2 )
    j k 2
    r0
    a3
    p1q2
    p2 q1
    p3 q0
    an
    m 1
    p j qk
    0
    j
    m, 0 k
    n m
    j k n m 1
    r1
    a4
    p2 q2
    p2 q1
    p3 q0
    an
    m 2
    p j
    qk
    0
    j
    m, 0 k
    n m
    (9’)
    j k n m 2
    r2
    a5
    p3 q2
    p4 q1
    p5 q0
    an
    m 3
    p j
    qk
    0
    j
    m, 0 k
    n m
    j k n m 3
    r3
    a6
    p4 q2
    p5 q1
    p6 q0
    an
    m 4
    p j
    qk
    0
    j
    m, 0 k
    n m
    j k n m 4
    r4
    a7
    p5 q2
    p6 q1
    an
    m 5
    p j
    qk
    0
    j
    m, 0 k
    n m
    j k n m 5
    r5
    a8
    p6 q2
    an
    m 6
    p j
    qk
    0
    j
    m, 0 k
    n m
    j k n m 6

    Examinando los dos casos anteriores se puede enunciar el teorema siguiente:
    Teorema 2: Dados los polinomios A X y P X , las fórmulas que determinan los
    polinomios Q X y R X y que verifican en la igualdad (7) son las siguientes:
    q0 a0 y qi ai
    j k i
    p j qk , 0 i n m , 0 j m , 0 k i
    ri
    an
    m i 1
    p j
    qk , 0 i
    m 1 , 0
    m , 0 k
    n m
    (11)
    j k n m i 1
    Por supuesto, las fórmulas (10) y (11) no son tan manejables como las fórmulas en el
    caso de la división entre X .a , pero son fácilmente programables y el ordenador las
    ejecuta con tanta facilidad como las personas la regla normal de Ruffini.
    Esta manera de efectuar la división tiene sus ventajas, sobre todo cuando los
    coeficientes de los polinomios son enteros o decimales (trabajar con fracciones es más
    penoso). Si el coeficiente director p0 del polinomio P X no fuera 1 entonces habrá
    que dividir P X entre p0 y hacer la división con el polinomio así obtenido. El resto
    será válido y para obtener el verdadero cociente hay que dividir el cociente obtenido
    entre p0 .
    Ejemplo 3: De acuerdo con lo dicho anteriormente, para hallar el cociente y el resto en
    la división euclidea del polinomio A X entre P X , donde
    A X
    2 X 8
    P X
    3 X 7
    4
    X
    5 X 6
    3
    2 X
    X 5
    5 X
    2
    3 X 4
    3 X
    4 X 3
    4
    7 X 2
    3 X
    4
    , se obtiene el cociente y el resto siguientes:
    Q X
    2 X 4
    X 3
    3 X 2 18 X 13
    R X
    81X 3 100 X 2
    30 X
    56

    Monografias.com

    2
    15

    , respectivamente.
    Para dividir el polinomio A X entre el polinomio P X , cuyo coeficiente director b0 1 ,
    se dividirá el polinomio A X entre el polinomio
    P1 X
    1
    p 0
    P X
    , según el esquema general de Ruffini. Suponiendo que,
    , de
    A X
    P X Q X
    R X
    A X
    1
    p 0
    P X Q1 X
    R1 X
    , resulta que
    Q X
    1
    p 0
    Q1 X
    y
    R X
    R1 X
    En general, los coeficientes del cociente y del resto serán aproximaciones decimales de
    los coeficientes reales.
    Ejemplo 4: Para dividir el polinomio
    A X
    3 X 5
    7 X 3
    4 X 2
    5 X 12
    , con el polinomio
    P X
    2 X 3
    5 X 2
    7 X
    8
    , se divide primero el polinomio A X
    entre el polinomio
    P1 X
    X 3
    2.5 X 2
    3.5 X
    4
    , y se obtiene el cociente y el resto
    Q1 X
    3 X 2
    7.5 X
    4
    y
    R1 X
    7.125 X 2
    20.625 X 17
    , respectivamente. Entonces el cociente y el resto de la división inicial serán:
    Q X
    1
    2
    Q1 X
    1.5 X 2
    3.75 X
    2
    y
    R X
    R1 X
    ,respectivamente.
    Ejemplo 5: Para dividir el polinomio
    A X
    3 X 5
    7 X 3
    4 X 2
    5 X 12
    , entre el polinomio
    P X
    7 X 3
    5 X 2
    7 X
    8
    , hay que dividir el polinomio P X entre 7 y así los coeficientes del polinomio P1 X ya
    no serán números decimales sino números reales periódicos.
    Por tanto, si no se quiere trabajar con fracciones, tendremos que hacer la división de
    A X con un polinomio P2 X que, al trabajar con bastantes decimales después de la
    coma, será una buena aproximación del polinomio P1 X . Así el resultado final será
    también una aproximación del cociente verdadero. Tomando
    P2 X
    X 3
    0.714286 X 2
    X 1.142857
    , se obtendrá el resultado aproximado siguiente;
    Q X
    0.428572 X 2
    0.306123X 1.209912
    R x
    0.763851X
    5.918367 X
    2.320702
    Para efectuar la división de esta manera, se pueden utilizar las funciones siguientes:

    Public Function RuffiniG(ByRef a() As Double, ByRef p() As Double) As Variant
    Dim i As Integer, j As Integer, k As Integer, r() As Double, q() As Double
    Dim r1() As Double, p1() As Double, gr As Integer, sw As Integer
    Dim j1 As Integer, ga As Integer, gp As Integer, gb As Integer
    Dim cxq As String, cxr As String, res(2) As String
    ga = UBound(a()): gp = UBound(p()): gb = ga – gp

    Monografias.com

    16
    ReDim b(gb), p1(gp)
    If p(0) 1 Then
    For i = 0 To gp: p1(i) = p(i) / p(0): Next i
    Else
    For i = 0 To gp: p1(i) = p(i): Next i
    End If
    'Cálculo de los coeficientes del cociente.
    b(0) = a(0)
    For i = 1 To gb
    b(i) = a(i)
    For j = 0 To gp
    For k = 0 To i – 1
    If j + k = i Then
    b(i) = b(i) – p1(j) * b(k)
    End If
    Next k
    Next j
    Next i
    ReDim q(gb)
    If p(0) 1 Then
    For i = 0 To gb: q(i) = b(i) / p(0): Next i
    Else
    For i = 0 To gb: q(i) = b(i): Next i
    End If
    cxq = VerPol(q())
    'Calculo de los coeficientes del resto.
    ReDim r(gp – 1)
    For i = 0 To gp – 1
    r(i) = a(gb + i + 1)
    For j = 1 To gp
    For k = 0 To gb
    If j + k = gb + i + 1 Then
    r(i) = r(i) – p1(j) * b(k)
    End If
    Next k
    Next j
    Next i
    gr = UBound(r())
    For i = 0 To gr
    If Abs(r(i)) > 0.000000000001 Then
    sw = 1
    End If
    Next i
    If sw = 1 Then cxr = VerPol(r()) Else cxr = "0"
    res(1) = cxq: res(2) = cxr
    RuffiniG = res()
    End Function
    ‘ ——————————————
    Public Function VerPol(ByRef xx() As Double) As String
    Dim i As Integer, gx As Integer, pol As String, x() As Double
    x() = xx(): gx = UBound(x())
    If gx 0 Then
    If x(0) 0 Then
    If Abs(x(0) – 1) < 10 ^ (-15) Then x(0) = 1
    If Abs(x(0) + 1) < 10 ^ (-15) Then x(0) = -1
    If Abs(x(0)) = 1 Then
    If x(0) = 1 Then
    If gx > 1 Then
    pol = pol + "X^" + Str$(gx)
    Else
    pol = pol + "X"
    End If
    End If
    If x(0) = -1 Then
    If gx > 1 Then
    pol = pol + "- X^" + Str$(gx)
    Else
    pol = pol + "- X"
    End If
    End If
    Else
    If Abs(x(0)) > 1 Then
    pol = pol + Str$(x(0))
    Else
    If x(0) > 0 Then
    pol = pol + "0" + Mid$(Str$(Abs(x(0))), 2)

    Monografias.com

    3
    2
    2
    5
    Q X
    R X
    17

    Else
    pol = pol + "- 0" + Mid$(Str$(Abs(x(0))), 2)
    End If
    End If
    If gx > 1 Then
    pol = pol + " X^" + Str$(gx)
    Else
    pol = pol + " X"
    End If
    End If
    End If
    For i = 1 To gx
    If x(i) 0 Then
    If Abs(x(i) – 1) < 10 ^ (-15) Then x(1) = 1
    If Abs(x(i) + 1) < 10 ^ (-15) Then x(i) = -1
    If x(i) < 0 Then
    pol = pol + " – "
    Else
    pol = pol + " + "
    End If
    If Abs(x(i)) 1 Then
    If Abs(x(i)) > 1 Then
    pol = pol + Mid$(Str$(Abs(x(i))), 2)
    Else
    pol = pol + "0" + Mid$(Str$(Abs(x(i))), 2)
    End If
    Else
    If i = gx Then
    pol = pol + Mid$(Str$(1), 2)
    End If
    End If
    If i < gx Then
    pol = pol + " X"
    End If
    If i < gx – 1 Then
    pol = pol + "^" + Str$(gx – i)
    End If
    End If
    Next i
    Else
    If x(0) > 0 Then
    If x(0) < 1 Then
    pol = pol + "0" + Mid$(Str$(x(0)), 2)
    Else
    pol = pol + Mid$(Str$(x(0)), 2)
    End If
    Else
    If x(0) > -1 Then
    pol = pol + "- 0" + Mid$(Str$(Abs(x(0))), 2)
    Else
    pol = pol + "-" + Mid$(Str$(Abs(x(0))), 2)
    End If
    End If
    End If
    VerPol = pol
    End Function

    Ejemplo 6: Según el código anterior, si
    A X
    4 X 6
    7 X 5
    8 X 4
    3 X 3 12 X 2
    5 X
    4 y P X
    X 5
    2 X 4
    3 X 3
    5 X 2
    X
    4
    , entonces Q X
    4X 1 y R X
    2 X 4
    20 X 3 13 X 2 10 X .
    Ejemplo 7: Si A X
    4 X 6
    7 X 5
    8 X 4
    3 X 3 12 X 2
    5 X
    4 y P X
    5 X 3
    4 X 2
    3 X
    7
    , entonces Q X
    0.8 X
    2.04 X
    3.712 X
    4.7136 y R X
    32.2704 X
    35.1248 X
    36.9952
    Ejemplo 8: si A X 7 X 4 4 X 3 15 X 2 3 X 7 y P X
    , entonces el ordenador devuelve el resultado siguiente:
    3 X 2 11X
    2.3333333333 333 X 2
    7.2222222222 2222 X
    27.5925925925 926 X 2
    264.407407407407 X 130.962962963
    En este caso sencillo, no es difícil ver que

    Monografias.com

    X
    18
    Q X
    7 2
    3
    65
    9
    X
    745
    27
    y R X
    7139
    27
    X
    3536
    27
    Cuando se trata de polinomios con coeficientes complejos en vez de la función RuffiniGhay que
    utilizar la función siguiente, donde a1 () y a2 () ( p01() y p02() ) son las matrices
    unidimensionales que contienen las partes reales e imaginarias de los coeficientes del
    dividiendo (divisor), respectivamente.

    Public Function RuffiniGC(ByRef a1() As Double, ByRef a2() As Double, ByRef p01() As Double, p02() As Double) As Variant
    Dim g1 As Integer, g2 As Integer, gq As Integer, r() As Double, r1() As Double
    Dim i As Integer, j As Integer, j1 As Integer, res(2) As String, r2() As Double
    Dim b() As Double, x(2) As Double, y(2) As Double, p1() As Double, p2() As Double.
    Dim q1() As Double, q2() As Double, b1() As Double, b2() As Double, rr() As Double
    g1 = UBound(a1()): g2 = UBound(p01()): gq = g1 – g2
    ReDim b(gq, 2), b1(gq), b2(gq), r1(g2 – 1), r2(g – 1)
    'División del divisor con su coeficiente director
    If p01(0) = 1 And p02(0) = 0 Then
    p1() = p01(): p2() = p02()
    Else
    ReDim p1(g1), p2(g1)
    p1(0) = 1: p2(0) = 0
    y(1) = p01(0): y(2) = p02(0)
    For k = 1 To g2
    x(1) = p01(k): x(2) = p02(k)
    rr() = DivNC(x(), y())
    p1(k) = rr(1): p2(k) = rr(2)
    Next k
    End If
    'Calculo del cociente
    b(0, 1) = a1(0): b(0, 2) = a2(0)
    For i = 1 To gq
    b(i, 1) = a1(i): b(i, 2) = a2(i)
    For j = 0 To g2
    For k = 0 To i – 1
    If j + k = i Then
    x(1) = p1(j): x(2) = p2(j): y(1) = b(k, 1): y(2) = b(k, 2)
    rr() = ProdNC(x(), y())
    b(i, 1) = b(i, 1) – rr(1): b(i, 2) = b(i, 2) – rr(2)
    End If
    Next k
    Next j
    Next i
    For i = 0 To gq
    b1(i) = b(i, 1): b2(i) = b(i, 2)
    Next i
    If p01(0) 1 Or p02(0) 0 Then
    ReDim q1(gq), q2(gq)
    For i = 0 To gq
    x(1) = b1(i): x(2) = b2(i): y(1) = p01(0): y(2) = p02(0)
    rr() = DivNC(x(), y())
    q1(i) = rr(1): q2(i) = rr(2)
    Next i
    Else
    q1() = b1(): q2() = b2()
    End If
    ' Cálculo del resto
    ReDim r(g2 – 1, 2): k = 0
    For i = 0 To g2 – 1
    r(k, 1) = a1(gq + i + 1): r(k, 2) = a2(gq + i + 1)
    j = k: j1 = 0
    Do
    x(1) = p1(j + 1): x(2) = p2(j + 1): y(1) = b1(gq – j1): y(2) = b2(gq – j1)
    rr() = ProdNC(x(), y())
    r(k, 1) = r(k, 1) – rr(1): r(k, 2) = r(k, 2) – rr(2)
    j=j+1
    j1 = j1 + 1
    Loop While j + 1 = 0
    k=k+1
    Next i
    For i = 0 To g2 – 1
    r1(i) = r(i, 1): r2(i) = r(i, 2)
    Next i
    ' El ociente en la pantalla

    Monografias.com

    19
    res(1) = FormatoPolinomioComplejo(q1(), q2())
    ' El resto en la pantalla
    res(2) = FormatoPolinomioComplejo(r1(), r2())
    RuffiniGC = res()
    End Function
    ‘- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
    Public Function ProdNC(ByRef x() As Double, ByRef y() As Double) As Variant
    Dim pr(2) As Double
    pr(1) = x(1) * y(1) – x(2) * y(2)
    pr(2) = x(1) * y(2) + x(2) * y(1)
    ProdNC = pr()
    End Function
    ‘- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
    Public Function DivNC(ByRef u() As Double, ByRef v() As Double) As Variant
    Dim cmv As Double, co() As Double, x(2) As Double, y(2) As Double, rr() As Double
    ReDim co(2)
    cmv = v(1) * v(1) + v(2) * v(2)
    x(1) = u(1): x(2) = u(2): y(1) = v(1): y(2) = -v(2)
    rr() = ProdNC(x(), y())
    co(1) = rr(1) / cmv: co(2) = rr(2) / cmv
    DivNC = co()
    End Function
    ‘- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
    Public Function FPolC(ByRef z1() As Double, ByRef z2() As Double) As String
    Dim i As Integer, j As Integer, gx As Integer, pr as Double
    Dim cd As String, cm As String
    gx = UBound(z1()) : pr = 0.000000000000001
    For i = 0 To gx
    If Abs(z1(i) – 1) < pr Then z1(i) = 1
    If Abs(z1(i) + 1) < pr Then z1(i) = -1
    If Abs(z2(i) – 1) < pr Then z2(i) = 1
    If Abs(z2(i) + 1) < pr Then z2(i) = -1
    If Abs(z1(i)) < pr Then z1(i) = 0
    If Abs(z2(i)) < pr Then z2(i) = 0
    If z1(i) 0 Or z2(i) 0 Then
    If i = 0 Then
    If z2(0) = 0 Then
    If Abs(z1(0)) 1 Then
    cm = f2(z1(0))
    Else
    If gx 0 Then
    If z1(0) = -1 Then
    cm = "-"
    End If
    Else
    If z1(0) = -1 Then
    cm = Str$(-1)
    Else
    cm = Mid$(Str$(1), 2)
    End If
    End If
    End If
    Else
    If gx 0 Then
    If z1(0) 0 Then
    cm = cm + "(" + f2(z1(0))
    End If
    If Abs(z2(0)) 1 Then
    If z1(0) 0 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " i )"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " i )"
    End If
    Else
    cm = cm + f2(z2(0)) + " i"
    End If
    Else
    If z2(0) = 1 Then
    cm = cm + " + i )"
    Else
    cm = cm + " – i )"
    End If
    End If
    Else
    cm = cm + f2(z1(0))

    Monografias.com

    20
    If Abs(z2(0)) 1 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " i"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " i"
    End If
    Else
    If z2(0) = 1 Then
    cm = cm + "+ i"
    Else
    cm = cm + "- i"
    End If
    End If
    End If
    End If
    If gx 0 Then
    If gx = 1 Then
    cm = cm + " X "
    Else
    cm = cm + " X^" + Mid$(Str$(gx), 2)
    End If
    End If
    Else
    If Abs(z2(i)) 0 Then
    If i < gx Then
    If z1(i) 0 Then
    cd = cd + " + (" + f2((z1(i)))
    If Abs(z2(i)) 1 Then
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " i )"
    Else
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " i )"
    End If
    End If
    Else
    If z2(i) = 1 Then
    cd = cd + " + i )"
    Else
    cd = cd + " – i )"
    End If
    End If
    Else
    If Abs(z2(i)) 1 Then
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    Else
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    End If
    End If
    Else
    If z2(i) = 1 Then
    cd = cd + " + i"
    Else
    cd = cd + " – i"
    End If
    End If
    End If
    Else
    If z1(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z1(i)), 2))
    Else
    If z1(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z1(i)), 2))
    End If
    End If
    If Abs(z2(i)) 1 Then
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    Else
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " i"
    End If
    End If
    Else

    Monografias.com

    21
    If z2(i) = 1 Then
    cd = cd + " + i"
    Else
    cd = cd + " – i"
    End If
    End If
    End If
    Else
    If Abs(z1(i)) 0 Then
    If Abs(z1(i)) 1 Then
    If z1(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z1(i)), 2))
    Else
    cd = cd + " + " + f1(Mid$(Str$(z1(i)), 2))
    End If
    Else
    If z1(i) = 1 Then
    cd = cd + " + "
    Else
    cd = cd + " – "
    End If
    End If
    End If
    End If
    If gx > 1 Then
    If i < gx – 1 Then
    cd = cd + " X^" + Mid$(Str$(gx – i), 2)
    Else
    If i = gx – 1 Then
    cd = cd + " X "
    End If
    End If
    End If
    cm = cm + cd: cd = ""
    End If
    End If
    Next i
    FPolC = cm
    End Function
    ‘- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
    Public Function f1(ByVal x As String) As String
    If Abs(Val(x)) >= 1 Then
    f1 = x
    Else
    If Left$(x, 1) = "." Then
    f1 = "0" + x
    Else
    f1 = x
    End If
    End If
    End Function
    ‘- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
    Public Function f2(ByVal x As Double) As String
    Dim xx As String
    xx = Str$(x)
    If Abs(x) >= 1 Then
    f2 = Str$(x)
    Else
    If Left$(xx, 1) = "-" Then
    If Left$(xx, 2) = "-." Then
    f2 = "-0" + Right$(xx, Len(xx) – 1)
    Else
    f2 = xx
    End If
    Else
    If x = 0 Then
    f2 = Str$(0)
    Else
    If Left$(xx, 2) = " ." Then
    f2 = "0" + Right$(xx, Len(xx) – 1)
    Else
    f2 = xx
    End If
    End If
    End If
    End If

    Monografias.com

    y
    i
    R X
    22

    End Function

    Ejemplo 9: Si
    A X
    2 3i X 5
    1 i X 4
    7 11i X 3
    12 5i X 2
    6 13i X 15 4i
    , y
    P X
    X 3
    2 4i X 2
    3 7i X 1 9i
    , entonces según el código anterior,
    Q X
    2 3i X 2
    17 3i X
    56 68i
    y R X
    117 504 i X 2
    346 759 X
    683 432 i
    Ejemplo 10: Si
    A X
    2 3i X 5
    1 i X 4
    7 11i X 3
    12 5i X 2
    6 13i X 15 4i ,
    B X )
    iX
    3
    7 3i X
    2
    6 X 13 4i
    , entonces
    Q X
    3 2i X 2
    24 16i X 17 227i
    R X
    725 1703i X 2
    268 1487i X
    672 3023i
    Ejemplo 11: Si
    A X
    2 5i X 4
    3 i X 3
    2 7i X 2
    4 2i X
    3 8i ,
    y P X
    2iX 2
    5
    6i X
    7
    , entonces
    Q X
    2.5 i X 2
    5.5 10.75i X 16.125 56.25i
    310.125 445.75i X 53.625 401.875i

    La regla general de Ruffini se puede aplicar también a los polinomios con coeficientes
    duales excepto en el caso cuando el coeficiente director del divisor es un divisor de cero
    (dual puro). En este caso el código es la siguiente:

    Public Function RuffiniGD(ByRef a1() As Double, ByRef a2() As Double, ByRef p01() As Double, p02() As Double) As Variant
    Dim g1 As Integer, g2 As Integer, gq As Integer, r() As Double, r1() As Double
    Dim i As Integer, j As Integer, j1 As Integer, res(2) As String, r2() As Double
    Dim b() As Double, x(2) As Double, y(2) As Double, p1() As Double, p2() As Double
    Dim q1() As Double, q2() As Double, b1() As Double, b2() As Double, rr() As Double
    g1 = UBound(a1()): g2 = UBound(p01()): gq = g1 – g2
    ReDim b(gq, 2), b1(gq), b2(gq), r1(g2 – 1), r2(g – 1)
    If p01(1) = 0 Then
    MsgBox "¡La división es imposible!"
    Exit Function
    End If
    'División del divisor con su coeficiente director
    If p01(0) = 1 And p02(0) = 0 Then
    p1() = p01(): p2() = p02()
    Else
    ReDim p1(g1), p2(g1)
    p1(0) = 1: p2(0) = 0
    y(1) = p01(0): y(2) = p02(0)
    For k = 1 To g2
    x(1) = p01(k): x(2) = p02(k)
    rr() = DivND(x(), y()) 'Cuando es posible
    p1(k) = rr(1): p2(k) = rr(2)
    Next k
    End If
    'Calculo del cociente
    b(0, 1) = a1(0): b(0, 2) = a2(0)
    For i = 1 To gq
    b(i, 1) = a1(i): b(i, 2) = a2(i)
    For j = 0 To g2
    For k = 0 To i – 1
    If j + k = i Then
    x(1) = p1(j): x(2) = p2(j): y(1) = b(k, 1): y(2) = b(k, 2)
    rr() = ProdND(x(), y())
    b(i, 1) = b(i, 1) – rr(1): b(i, 2) = b(i, 2) – rr(2)
    End If
    Next k
    Next j
    Next i

    Monografias.com

    23
    For i = 0 To gq
    b1(i) = b(i, 1): b2(i) = b(i, 2)
    Next i
    If p01(0) 1 Or p02(0) 0 Then
    ReDim q1(gq), q2(gq)
    For i = 0 To gq
    x(1) = b1(i): x(2) = b2(i): y(1) = p01(0): y(2) = p02(0)
    rr() = DivND(x(), y()) ' Cuando es posible
    q1(i) = rr(1): q2(i) = rr(2)
    Next i
    Else
    q1() = b1(): q2() = b2()
    End If
    ' Cálculo del resto
    ReDim r(g2 – 1, 2): k = 0
    For i = 0 To g2 – 1
    r(k, 1) = a1(gq + i + 1): r(k, 2) = a2(gq + i + 1)
    j = k: j1 = 0
    Do
    x(1) = p1(j + 1): x(2) = p2(j + 1): y(1) = b1(gq – j1): y(2) = b2(gq – j1)
    rr() = ProdND(x(), y())
    r(k, 1) = r(k, 1) – rr(1): r(k, 2) = r(k, 2) – rr(2)
    j=j+1
    j1 = j1 + 1
    Loop While j + 1 = 0
    k=k+1
    Next i
    For i = 0 To g2 – 1
    r1(i) = r(i, 1): r2(i) = r(i, 2)
    Next i
    ' El ociente en la pantalla
    res(1) = FormatoPolinomioDual(q1(), q2())
    ' El resto en la pantalla
    res(2) = FormatoPolinomioDual(r1(), r2())
    RuffiniGD = res()
    End Function
    ‘ ————————————————-
    Public Function DivND(ByRef u() As Double, ByRef v() As Double) As Variant
    Dim cmv As Double, co(2) As Double, x(2) As Double, y(2) As Double, rr() As Double
    If v(1) = 0 Then
    MsgBox "¡La división es imposible!"
    End
    End If
    cmv = v(1) * v(1)
    x(1) = u(1): x(2) = u(2): y(1) = v(1): y(2) = -v(2)
    rr() = ProdND(x(), y())
    co(1) = rr(1) / cmv: co(2) = rr(2) / cmv
    DivND = co()
    End Function
    ‘ ————————————————-
    Public Function FPolD(ByRef z1() As Double, ByRef z2() As Double) As String
    Dim i As Integer, j As Integer, gx As Integer, pr As Double
    Dim cd As String, cm As String
    gx = UBound(z1()): pr = 0.000000000000001
    For i = 0 To gx
    If Abs(z1(i) – 1) < pr Then z1(i) = 1
    If Abs(z1(i) + 1) < pr Then z1(i) = -1
    If Abs(z2(i) – 1) < pr Then z2(i) = 1
    If Abs(z2(i) + 1) < pr Then z2(i) = -1
    If Abs(z1(i)) < pr Then z1(i) = 0
    If Abs(z2(i)) < pr Then z2(i) = 0
    If z1(i) 0 Or z2(i) 0 Then
    If i = 0 Then
    If z2(0) = 0 Then
    If Abs(z1(0)) 1 Then
    cm = f2(z1(0))
    Else
    If gx 0 Then
    If z1(0) = -1 Then
    cm = "-"
    End If
    Else
    If z1(0) = -1 Then
    cm = Str$(-1)
    Else
    cm = Mid$(Str$(1), 2)

    Monografias.com

    24
    End If
    End If
    End If
    Else
    If gx 0 Then
    If z1(0) 0 Then
    cm = cm + "(" + f2(z1(0))
    End If
    If Abs(z2(0)) 1 Then
    If z1(0) 0 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " e )"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " e )"
    End If
    Else
    cm = cm + f2(z2(0)) + " e"
    End If
    Else
    If z2(0) = 1 Then
    cm = cm + " + e )"
    Else
    cm = cm + " – e )"
    End If
    End If
    Else
    cm = cm + f2(z1(0))
    If Abs(z2(0)) 1 Then
    If z2(0) > 0 Then
    cm = cm + " + " + f1(Mid$(Str$(z2(0)), 2)) + " e"
    Else
    cm = cm + " – " + f1(Mid$(Str$(z2(0)), 2)) + " e"
    End If
    Else
    If z2(0) = 1 Then
    cm = cm + "+ e"
    Else
    cm = cm + "- e"
    End If
    End If
    End If
    End If
    If gx 0 Then
    If gx = 1 Then
    cm = cm + " X "
    Else
    cm = cm + " X^" + Mid$(Str$(gx), 2)
    End If
    End If
    Else
    If Abs(z2(i)) 0 Then
    If i < gx Then
    If z1(i) 0 Then
    cd = cd + " + (" + f2((z1(i)))
    If Abs(z2(i)) 1 Then
    If z2(i) > 0 Then
    cd = cd + " + " + f1(Mid$(Str$(z2(i)), 2)) + " e )"
    Else
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " e )"
    End If
    End If
    Else
    If z2(i) = 1 Then
    cd = cd + " + e )"
    Else
    cd = cd + " – e )"
    End If
    End If
    Else
    If Abs(z2(i)) 1 Then
    If z2(i) < 0 Then
    cd = cd + " – " + f1(Mid$(Str$(z2(i)), 2)) + " e"
    Else
    If z2(i

    Partes: 1, 2

    Página siguiente 

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter