Descargar

Construcción y utilización de las series de polinomios Sturm en un ordenador

Enviado por Aladar Peter Santha


Partes: 1, 2

    Mirando la gráfica de una función polinomio en la pantalla de un ordenador, a veces podría ser difícil decir si el polinomio tiene, en un intervalo dado, un cero simple, varios ceros simples muy cercanos o bien varios ceros simples o múltiples muy cerca uno de otro. En estos casos difíciles, sería bien disponer de un procedimiento seguro para determinar el número de los ceros reales distintos de la función polinomio en un intervalo dado.

    Se recuerda que los anillos de polinomios con coeficientes racionales o reales son anillos euclídeos y que dos polinomios de estos anillos tienen siempre máximo común divisor y mínimo común múltiplo. Aunque los polinomios con coeficientes enteros no forman un anillo euclideo, los polinomios con coeficientes enteros se pueden considerar como con coeficientes racionales y se puede demostrar que tendrán máximo común divisor y mínimo común múltiplo con coeficientes enteros.

    Si edu.redes la función polinomio asociada al polinomio edu.redsea edu.redla función polinomio asociada al polinomioedu.reddonde edu.redes un máximo común divisor del polinomioedu.redy de su polinomio derivado edu.redEntonces edu.redyedu.redtienen los mismos ceros reales, pero los ceros deedu.redson simples.

    Definición: Se dice que la sucesión finita de funciones polinomios (no nulas)

    edu.red (1)

    , es una sucesión de Sturm asociada a la función polinomioedu.redsi cumple las condiciones siguientes:

    1) edu.red

    2) edu.redno tiene ceros reales.

    3) edu.redno tienen ceros reales comunes.

    4) Si edu.rededu.redentonces edu.red

    5) Si edu.redes un cero real de edu.redentonces edu.redcambia de signo, de – a +,

    , cuando edu.redpasa por edu.redde manera creciente.

    Teorema 1: Cualquiera que sea la función polinomio edu.redexiste una sucesión de Sturm asociada a ella.

    Demostración: Sean edu.redy edu.redTeniendo en cuenta que edu.redes un anillo euclideo, edu.redtienen un máximo común divisor. Según el algoritmo modificado de Euclides,

    edu.red

    edu.red

    …………………………………………………………………… (2)

    edu.red

    edu.red

    , se obtiene la sucesión de polinomios,

    edu.red (3)

    , donde (obviamente) edu.redes un máximo común divisor de edu.redyedu.redy la sucesión (3) cumple las condiciones siguientes:

    edu.red

    edu.red

    …………………………. (4)

    edu.red

    Hay que demostrar que la sucesión (3) así definida es una sucesión Sturm. En efecto, la condición 1) se cumple obviamente. Teniendo ahora en cuenta que los ceros reales de edu.redson simples y que edu.redes un máximo común divisor de edu.redy de su derivada, resulta que edu.redno tiene ceros reales y por tanto, la sucesión considerada cumple también la condición 2).

    Evidentemente, edu.redy edu.redno pueden tener un cero real común, puesto que edu.redno tiene ceros reales. Si edu.redfuera un cero común de edu.redy edu.rededu.redentonces de

    edu.red

    , resultaría que edu.redes también un cero de edu.redy así sería un cero común de edu.redy edu.redRepitiendo el razonamiento anterior de un número finito de veces, se llegaría a la conclusión de que edu.redes un cero real de edu.redLa contradicción obtenida demuestra que edu.redy edu.redno pueden tener raíces reales comunes y por tanto, la sucesión considerada cumple la condición 3).

    Si edu.redy edu.redentonces, según la condición 3),

    edu.red

    Por otra parte,

    edu.red

    Así pues, la sucesión considerada cumple también la condición 4).

    Sea ahora edu.redun cero real de edu.redSegún las hipótesis, edu.redes un cero simple de edu.redy así no será un cero para edu.redPor tanto,

    edu.red

    edu.red

    , donde edu.redDe lo anteriormente expuesto resulta que

    edu.red

    , donde edu.red

    Al ser edu.reduna función continua en R, resulta que existe un entornoedu.redde edu.redtal que para x perteneciente a este entorno se cumpla la desigualdad edu.redAsí, el signo de edu.reden el intervaloedu.redserá tal como se indica en la tabla siguiente:

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    0

    +

    edu.red

    +

    +

    edu.red

    0

    +

    , de donde resulta que la sucesión considerada cumple también la condición 5) para que sea una sucesión de Sturm.

    Si edu.redno es un cero de la función polinomio edu.redentonces a la sucesión de Sturm (3) se le puede asociar la sucesión numérica siguiente:

    edu.red (5)

    Eliminando en la sucesión (5) a todos los términos nulos y sustituyendo los restantes términos con sus respectivos signos, se obtiene una sucesión de signos. Cuando dos términos consecutivos de esta sucesión son de signos distintos diremos que hay un cambio en la sucesión de signos. Si edu.redes el número de los cambios en la sucesión de signos, se dice que edu.redes el número de los cambios de signo en la sucesión (5). Con otras palabras, edu.redes el número de los cambios de signo en la sucesión de Sturm considerada en el punto r.

    Teorema 2 (de Sturm): Si los números reales edu.redy edu.redno son ceros de la función polinomio edu.redy edu.redentonces edu.redy el número de los ceros reales distintos de edu.reden el intervalo edu.redserá edu.red

    Demostración: Si edu.redes el número de los cambios de signo en la sucesión de Sturm para edu.redestá claro que este número solo puede variar, cuando edu.redpasa por un cero real edu.redde alguna de las funciones polinomios de esta sucesión, ya que las funciones continuas no pueden cambiar de signo sin pasar por el valor cero.

    A continuación se distinguen dos casos, según que edu.redes un cero de un polinomioedu.rededu.redo bien del polinomio edu.red

    a) Si edu.redes un cero del polinomio edu.rededu.redsegún las propiedades 3) y 4) de la sucesión de Sturm resulta que

    edu.red (6)

    Dado que las funciones edu.redy edu.redson continuas se puede encontrar edu.redtal que estas dos funciones no tengan ceros reales en el intervaloedu.redAsí, en este intervalo, edu.redy edu.redconservan el signo de edu.redy edu.redrespectivamente.

    Por tanto, de la desigualdad (6) se obtienen las dos desigualdades siguientes:

    edu.red (7)

    edu.red (8)

    Por consiguiente, en la sucesión

    edu.red (9)

    , habrá un solo cambio de signo, puesto que, según la relación (7), edu.redy edu.redson de signos distintos y así uno de ellos tendrá el signo de edu.red

    De la misma manera, de (8) resulta que en la sucesión

    edu.red

    , habrá un solo cambio de signo.

    Así pues, edu.redno cambia cuando edu.redpasa, de manera creciente, por un cero de una función polinomio que ocupa una posición intermedia en la sucesión de Sturm.

    b) Si edu.redes un cero real del polinomio edu.rededu.redno puede ser un cero para edu.redya que edu.redes un cero simple de edu.redPor tanto, existe tal que en el intervaloedu.rededu.redno tenga ningún cero real y así edu.redno cambiará de signo en este intervalo. Suponiendo que edu.redes de signo positivo en el intervaloedu.redresulta que edu.redes creciente en este intervalo y así cuando edu.redpasa por el cero edu.redde manera creciente, edu.redcambiará de signo, de menos en más. Así, en la sucesión de Sturm correspondiente al punto edu.redhabrá un cambio de signo entre los términos:

    edu.red

    , sin embargo, entre los términos

    edu.red

    , de la sucesión de Sturm correspondiente al punto edu.redno habrá cambio de signo. Por consiguiente, cuando edu.redpasa de manera creciente por edu.reden la sucesión de Sturm se pierde un cambio de signo.

    Razonando de manera análoga, se llega a la misma conclusión cuando se supone que edu.redes de signo negativo sobre el intervaloedu.redDe esta manera, cuando edu.redcrece, desde el valor edu.redhasta el valor edu.rededu.redse disminuirá en uno, cada vez que edu.redpasa por un cero de edu.redy así la diferencia edu.redserá igual con el número de los ceros reales de la función polinomio edu.reden el intervalo edu.red

    Ejemplo 1: Sea edu.redla función polinomio asociada al polinomio

    edu.red

    Se verifica fácilmente que 1 es un máximo común divisor del polinomio edu.redy edu.redAsí la sucesión de Sturm asociada a edu.redestá formada de las funciones siguientes:

    edu.red (10)

    , definidas por:

    edu.red

    Es fácil averiguar que 3 es una cota superior de los ceros positivos de edu.redy que edu.redes una cota inferior de los ceros negativos de la misma función. Así los ceros reales de edu.redpertenecen al intervalo edu.redLos signos de los valores de las funciones (10), calculadas en las extremidades de este intervalo, se exponen en la tabla siguiente:

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    -2

    +

    +

    +

    4

    3

    +

    +

    +

    +

    +

    0

    Así pues, el número de los ceros reales distintos de edu.redes edu.red.

    Dado que

    edu.red, edu.redy edu.red

    , los números 1, 0 y 1 no son ceros de edu.redy así, para obtener más información sobre los ceros, podemos considerar la tabla:

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    -2

    +

    +

    +

    4

    -1

    +

    +

    +

    3

    0

    +

    +

    +

    +

    2

    1

    +

    +

    +

    1

    3

    +

    +

    +

    +

    +

    0

    Puesto que

    edu.red

    , edu.redtiene dos ceros positivos y dos negativos. Luego, de las igualdades

    edu.red

    , resulta que edu.redtiene un cero único en cada uno de los intervalos:

    edu.red

    Ejemplo 2: Seaedu.redla función polinomio asociada al polinomio

    edu.red

    El máximo común divisor de edu.redes edu.redy

    edu.red

    La sucesión de Sturm asociada a edu.redestá compuesta de las funciones polinomios

    edu.red

    , definidas por:

    edu.rededu.red

    Puesto que edu.redes una cota inferior de los ceros negativos de edu.redy 4 es una cota superior para los ceros positivos de edu.redlos ceros reales de edu.redpertenecen al intervalo edu.redCalculando los valores de la función edu.reden los puntos:

    edu.red

    , se observa que ninguno de ellos es un cero de edu.redPara hallar el número de los ceros reales de edu.redy para ver la distribución de estos ceros en el intervalo anterior, consideremos la tabla:

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    -4

    +

    +

    +

    5

    -2

    +

    +

    +

    5

    -1.5

    +

    +

    +

    +

    4

    -1

    +

    +

    3

    0

    +

    +

    +

    3

    1

    +

    +

    +

    2

    1.5

    +

    +

    +

    1

    2

    +

    +

    +

    +

    +

    +

    0

    4

    +

    +

    +

    +

    +

    +

    0

    Puesto que

    edu.red

    , edu.redtiene 5 ceros reales distintos. Por otra parte, de

    edu.red

    , resulta que edu.redno tiene ceros reales en los intervalos edu.red

    Así, todas los ceros reales de edu.reddeben pertenecer al conjunto:

    edu.red

    Dado que

    edu.red

    , resulta que edu.redtiene dos ceros negativos y tres positivos.

    Finalmente, de las igualdades

    edu.red

    , resulta que cada uno de los intervalos siguientes contiene exactamente un cero de edu.red

    edu.red

    Ejemplo 3: Sea edu.redla función polinomio asociada al polinomio

    edu.red

    Se puede averiguar que los polinomios P(X) y P'(X) son primos entre sí, es decir, 1 es un máximo común divisor de ellos. La sucesión de Sturm asociada a edu.redestá compuesta de las funciones polinomios edu.red, definidas por:

    edu.red

    Puesto que -1 y 1 son una cota inferior de los ceros negativos y una cota superior de los ceros positivos de edu.redrespectivamente, los ceros reales de edu.redpertenecen al intervalo edu.redLos signos de los valores de las funciones polinomios de la sucesión de Sturm, calculadas en las extremidades del intervalo anterior, quedan expuestos en la tabla:

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    edu.red

    -1

    +

    +

    2

    1

    +

    +

    +

    2

    Puesto que edu.redresulta que edu.redno tiene ceros reales.

    Durante mucho tiempo el teorema de Sturm era considerado como un teorema muy interesante pero de poca utilidad, debido al volumen de los cálculos. Con la llegada de la informática se puede decir que ha llegado la hora del teorema de Sturm, en el sentido que su utilización en los ordenadores ha llegado a ser tan sencilla y cómoda como la de los otros teoremas.

    A continuación se exponen los procedimientos para hallar la serie de polinomios Sturm asociada a un polinomio con coeficientes enteros. Si se trata de un polinomio con coeficientes decimales, antes de introducirlo en el ordenador, hay que multiplicar el polinomio con una potencia de 10, para que el polinomio obtenido tenga coeficientes enteros. En el caso de un polinomio con coeficientes fraccionarios, hay que multiplicar el polinomio con el mínimo común múltiplo de los denominadores de sus coeficientes.

    El programa siguiente determina la serie de polinomios Sturm asociado a un polinomio dado, calcula una cota superior de los ceros positivos y una cota inferior de los negativos y finalmente halla el número de los ceros reales. Los coeficientes del polinomio tienen que ser enteros y contenidos en los elementos de una matriz unidimensional de tipo String. Las cotas de los ceros mencionadas se determina por un método anónimo y simple para programarlo, aunque existen métodos mejores, cuya programación necesita un poco más de esfuerzo.

    Public Function AlgoritmoSturm(ByRef p0() As String, ByVal n As Integer) As String

    Dim i As Integer, i0 As Integer, k1 As Integer, j0 As Integer, js As Integer

    Dim g0 As Integer, g1 As Integer, g2 As Integer, gz As Integer, gx As Integer

    Dim sw2 As Integer, gc As Integer, s1 As Integer, sr As Integer, ist As Integer

    Dim si As Integer, sd As Integer, fp() As Integer, ai As Double, bi As Double

    Dim m2 As String, m11 As String, rp As String, p1() As String, x(2) As String

    Dim rr() As String, pd() As String, pi() As String, rc As String, x0() As String

    Dim ps() As String, sci As String, scs As String, s() As String, rrr As Integer

    Dim mcd() As String, pd0() As String, cotas() As Double, cx1 As String

    Dim cx2 As String, c1() As String, c2() As String, q0() As String, pr As String

    Dim ra As String, cxp0 As String, cxp0d As String, cx0 As String, cxpd As String

    rc = Chr$(13) + Chr$(10): q0() = p0(): cxp0 = FormatoPol(q0())

    ' Derivada del polinomio

    g0 = UBound(p0())

    ReDim pd0(g0 – 1)

    For i = 0 To g0 – 1

    x(1) = Mid$(Str$(g0 – i), 2): x(2) = p0(i): pd0(i) = Multiplicar(x(), n)

    Next i

    cxp0d = FormatoPol(pd0())

    mcd() = CalculoMCDPOL(q0(), pd0(), n)

    cx0 = FormatoPol(mcd())

    If UBound(mcd()) <> 0 Then

    c1() = DivisionEspecialPOL(p0(), mcd(), n)

    Else

    c1() = p0()

    End If

    cx1 = FormatoPol(c1())

    g1 = UBound(c1())

    cotas() = CotasCeros(c1())

    ai = cotas(2): bi = cotas(1)

    ReDim pd(g1 – 1)

    For i = 0 To g1 – 1

    x(1) = Mid$(Str$(g1 – i), 2): x(2) = c1(i): pd(i) = Multiplicar(x(), n)

    Next i

    cxpd = FormatoPol(pd())

    c2() = pd(): g2 = g1 – 1: js = 0: ist = 1

    sr = (g1 + 2) * (g1 + 3) / 2

    ReDim s(sr), z(g1), fp(g1 + 2)

    For i = 0 To g1

    s(js) = c1(i): js = js + 1

    Next i

    fp(0) = -1: fp(ist) = js – 1

    ist = ist + 1: gz = g2 + 1

    c2() = RutinaSturm(c2(), n)

    For i = 0 To gz – 1

    s(js) = c2(i): js = js + 1

    Next i

    fp(ist) = js – 1

    ist = ist + 1

    Do

    gz = 0: s1 = 0: gc = g1 – g2

    For i0 = 0 To gc

    If c1(i0) <> "0" Then

    x(1) = c1(i0): x(2) = c2(0): x(1) = MinComMult(x(), n): x(2) = c1(i0)

    rr() = DivisionEuclidea(x(), n): m11 = rr(1)

    If Left$(m11, 1) = "-" Then m11 = Mid$(m11, 2)

    If m11 <> "1" Then

    For k1 = i0 To g1

    x(1) = c1(k1): x(2) = m11: c1(k1) = Multiplicar(x(), n)

    Next k1

    End If

    x(1) = c1(i0): x(2) = c2(0): rr() = DivisionEuclidea(x(), n): m2 = rr(1)

    For k1 = i0 To i0 + g2

    x(1) = c2(k1 – i0): x(2) = m2: rp = Multiplicar(x(), n)

    x(1) = c1(k1): x(2) = rp: c1(k1) = Restar(x(), n)

    Next k1

    End If

    Next i0

    ReDim z(g1)

    j0 = gc + 1: j = j0

    For i = j0 To g1

    If c1(i) <> "0" Then

    z(i – j) = c1(i): gz = gz + 1

    If s1 = 0 Then s1 = s1 + 1

    Else

    If s1 = 1 Then

    z(i – j) = c1(i): gz = gz + 1

    Else

    j = j + 1

    End If

    End If

    Next i

    sw2 = 0

    For i = 0 To gz – 1

    If z(i) <> "0" Then

    ReDim p1(gz – 1)

    For j = 0 To gz – 1: p1(j) = z(j): Next j

    c1() = c2(): g1 = UBound(c1())

    For i0 = 0 To gz – 1

    If Left$(p1(i0), 1) = "-" Then

    p1(i0) = Mid$(p1(i0), 2)

    Else

    If p1(i0) <> "0" Then p1(i0) = "-" + p1(i0)

    End If

    Next i0

    c2() = p1()

    g2 = UBound(c2())

    c2() = RutinaSturm(c2(), n)

    For i0 = 0 To gz – 1

    s(js) = c2(i0): js = js + 1

    Next i0

    fp(ist) = js – 1: ist = ist + 1

    c2() = RutinaSturm(c2(), n)

    sw2 = 1: Exit For

    End If

    Next i

    If sw2 = 0 Then Exit Do

    Loop

    cx2 = ""

    For i = 0 To ist – 2

    cx2 = cx2 + "Polinomio"

    cx2 = cx2 + " (" + Str$(i + 1) + ") = "

    gx = fp(i + 1) – fp(i) – 1

    ReDim x0(gx)

    For j = 0 To gx: x0(j) = s(fp(i) + 1 + j): Next j

    cx2 = cx2 + FormatoPol(x0()) + rc

    Next i

    ' =========== Número de todos los ceros reales ===========

    ' Valores de los polinomios Sturm en el punto ai.

    ReDim pi(ist – 1), ps(ist – 1)

    For i = 1 To ist – 2

    pi(i) = s(fp(i – 1) + 1)

    For j = fp(i – 1) + 2 To fp(i)

    x(1) = pi(i): x(2) = ai: pi(i) = MultiplicarDec(x(), n)

    x(1) = pi(i): x(2) = s(j): pi(i) = SumarDec(x(), n)

    Next j

    If pi(i) <> "0" Then

    If Left$(pi(i), 1) <> "-" Then pi(i) = "1" Else pi(i) = "-1"

    End If

    Next i

    pi(i) = s(js – 1)

    'Valores de los polinomios Sturm en el punto bi.

    For i = 1 To ist – 2

    ps(i) = s(fp(i – 1) + 1)

    For j = fp(i – 1) + 2 To fp(i)

    x(1) = ps(i): x(2) = bi: ps(i) = MultiplicarDec(x(), n)

    x(1) = ps(i): x(2) = s(j): ps(i) = SumarDec(x(), n)

    Next j

    If ps(i) <> "0" Then

    If Left$(ps(i), 1) <> "-" Then ps(i) = "1" Else ps(i) = "-1"

    End If

    Next i

    ps(i) = s(js – 1)

    For i = 1 To ist – 2

    If pi(i) <> "0" Then

    If Val(pi(i)) * Val(pi(i + 1)) < 0 Then si = si + 1

    Else

    If Val(pi(i – 1)) * Val(pi(i + 1)) <= 0 Then si = si + 1

    End If

    Next i

    For i = 1 To ist – 2

    If ps(i) <> "0" Then

    If Val(ps(i)) * Val(ps(i + 1)) < 0 Then sd = sd + 1

    Else

    If Val(ps(i – 1)) * Val(ps(i + 1)) <= 0 Then sd = sd + 1

    End If

    Next i

    rrr = Abs(si – sd)

    ' Sucesiones de signos Sturm

    sci = "": scs = ""

    For i = 1 To ist – 1

    If pi(i) <> "0" Then

    If pi(i) = "1" Then sci = sci + " + " Else sci = sci + " – "

    End If

    Next i

    For i = 1 To ist – 1

    If ps(i) <> "0" Then

    If ps(i) = "1" Then scs = scs + " + " Else scs = scs + " – "

    End If

    Next i

    ra = rc + "Polonomio:" + rc

    ra = ra + "P( X ) = " + cxp0 + rc + " " + rc

    ra = ra + "Polinomio derivado:" + rc

    ra = ra + "P'( X ) = " + cxp0d + rc + " " + rc

    ra = ra + "M.C.D.[ P( X ) ; P' ( X ) ) = " + cx0 + rc + " " + rc

    If cx0 <> "1" Then

    ra = ra + "P0(X) = P( X ) / M.C.D.[ P( X ) ; P'( X ) ] " + rc

    ra = ra + rc + "P0(X)= " + cx1 + rc

    ra = ra + "P0'(X) = " + cxpd + rc

    Else

    ra = ra + rc + "P0(X)=P(X) , P0'(X)=P'(X)" + rc

    End If

    ra = ra + rc + "Cota inferior de los ceros negativos = " + Str$(ai) + rc

    ra = ra + "Cota superior de los ceros positivos = " + Str$(bi) + rc

    ra = ra + rc + "Sucesión de polinomios Sturm:" + rc

    ra = ra + rc + cx2 + rc

    ra = ra + rc + "Suceciones de signos:" + rc

    ra = ra + rc + sci + rc

    ra = ra + scs + rc

    ra = ra + rc + "Número total de los ceros reales distintos = " + Str$(rrr) + rc

    AlgoritmoSturm = ra

    End Function

    "= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

    Public Function RutinaSturm(ByRef c2() As String, ByVal n As Integer)

    Dim i As Integer, rr() As String

    Dim rr0 As String, x(2) As String

    Dim g2 As Integer

    g2 = UBound(c2())

    rr0 = c2(0)

    For i = 0 To g2

    If c2(i) <> "0" Then

    x(1) = rr0: x(2) = c2(i)

    rr0 = MaxComDiv(x(), n)

    If rr0 = "1" Then Exit For

    End If

    Next i

    If rr0 <> "1" Then

    For i = 0 To g2

    x(1) = c2(i): x(2) = rr0

    rr() = DivisionEuclidea(x(), n)

    c2(i) = rr(1)

    Next i

    End If

    RutinaSturm = c2()

    End Function

    "= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

    Public Function CotasCeros(ByRef q() As String) As Variant

    ' TRANSFORMACIONES DEL POLINOMIO

    Dim i As Integer, z As Integer, e As Integer, gq As Integer

    Dim a As Double, b As Double, r(2) As Double, ct() As Double

    gq = UBound(q())

    ReDim ct(gq, 2) As Double

    For i = 0 To gq

    ct(i, 1) = Val(q(i))

    Next i

    ' Transformación de X en -X

    e = gq Mod 2

    For i = 0 To gq

    If e <> 0 Then

    ct(i, 2) = (-1) ^ (i + 1) * ct(i, 1)

    Else

    ct(i, 2) = (-1) ^ i * ct(i, 1)

    End If

    Next i

    ' r(1) cota superior de los ceros positivos

    ' r(2) cota inferior de los ceros negativos

    ' Método Anónimo

    a = Abs(ct(1, 1))

    For i = 2 To gq

    If Abs(ct(i, 1)) > a Then

    a = Abs(ct(i, 1))

    End If

    Next i

    b = Abs(ct(0, 1))

    For i = 1 To gq – 1

    If Abs(ct(i, 1)) > b Then

    b = Abs(ct(i, 1))

    End If

    Next i

    r(1) = 1 + a / Abs(ct(0, 1))

    r(2) = -r(1)

    r(1) = (Int(r(1) * 100) + 1) / 100

    r(2) = (Int(r(2) * 100) – 1) / 100

    CotasCeros = r()

    End Function

    "= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

    Public Function FormatoPol(ByRef x0() As String) As String

    Dim i As Integer, gx As Integer, ax As String, cx As String

    gx = UBound(x0())

    For i = 0 To gx

    If x0(i) <> "0" Then

    If i = 0 Then

    If x0(0) <> "1" And x0(0) <> "-1" Then

    cx = x0(0)

    Else

    If gx <> 0 Then

    If x0(0) = "-1" Then

    cx = "-"

    End If

    Else

    If x0(0) = "-1" Then

    cx = Str$(-1)

    Else

    cx = Mid$(Str$(1), 2)

    End If

    End If

    End If

    If gx <> 0 Then

    If gx = 1 Then

    cx = cx + " X"

    Partes: 1, 2
    Página siguiente