Algoritmi polynomien euklidiseen jakamiseen
In algebran , synteettinen jako on menetelmä käsin suorittamiseksi jakoyhtälö polynomeja , joissa on vähemmän kirjoittaminen ja vähemmän laskutoimituksia kuin pitkä jako .
Sitä opetetaan useimmiten jakamiseen lineaarisilla moni -polynomeilla (tunnetaan Ruffinin sääntönä ), mutta menetelmä voidaan yleistää jakamiseen millä tahansa polynomilla .
Synteettisen jakamisen etuna on, että sen avulla voidaan laskea ilman muuttujien kirjoittamista, se käyttää vain vähän laskelmia ja vie huomattavasti vähemmän tilaa paperilla kuin pitkä jako. Myös pitkän jaon vähennykset muunnetaan lisäyksiksi vaihtamalla merkkejä heti alussa estäen merkkivirheet.
Säännöllinen synteettinen jako
Ensimmäinen esimerkki on synteettinen jako, jossa on vain monic lineaarinen nimittäjä .


Osoittaja voidaan kirjoittaa muodossa .

Nimittäjän nolla on .


Kerroimet on järjestetty seuraavasti, nolla vasemmalla:



Ensimmäinen kerroin jälkeen palkki on "pudotetaan" viimeiselle riville.

Laski numero kerrotaan numero ennen baari, ja sijoitetaan seuraavassa sarakkeessa .

Lisäys suoritetaan seuraavassa sarakkeessa.

Kaksi edellistä vaihetta toistetaan ja saadaan seuraava:

Tässä viimeinen termi (-123) on loppuosa, kun taas loput vastaavat osamäärän kertoimia.
Termit kirjoitetaan kasvavalla asteella oikealta vasemmalle, alkaen asteesta nolla lopulle ja tulokselle.

Siksi osamäärä ja loput ovat:


Polynomien arviointi loppuosan avulla
Yllä oleva synteettisen jaon muoto on hyödyllinen polynomi -jäännöslauseen yhteydessä yksimuuttujaisten polynomien arvioimiseksi . Yhteenvetona arvo on on yhtä suuri kuin jakojäännös on . Tämän arvon laskemisen etuna on, että se vaatii hieman yli puolet enemmän kertolaskuja kuin naiivi arviointi. Vaihtoehtoinen arviointistrategia on Hornerin menetelmä .



Laajennettu synteettinen jako
Tämä menetelmä yleistää jakamisen millä tahansa moni -polynomilla vain pienillä muutoksilla lihavoituna . Suorita seuraava jako käyttämällä samoja vaiheita kuin aiemmin:

Huolehdimme vain kertoimista. Kirjoita jaettavan polynomin kertoimet yläosaan.

Negatiivinen jakajan kertoimet.

Kirjoita jokainen kerroin, mutta ensimmäinen vasemmalla ylöspäin oikealle lävistäjälle (katso seuraava kaavio).

Huomaa merkin muutos 1: stä -1: een ja - 3: sta 3: een . "Pudota" ensimmäinen kerroin palkin jälkeen viimeiselle riville.

Kerro pudonnut luku vivulla ennen palkkia ja aseta tuloksena olevat merkinnät vinosti oikealle pudotetusta merkinnästä.

Suorita lisäys seuraavaan sarakkeeseen.

Toista kaksi edellistä vaihetta, kunnes ohitat ylhäällä olevat merkinnät seuraavan lävistäjän kanssa .

Lisää sitten kaikki jäljellä olevat sarakkeet.

Laske termit palkin vasemmalle puolelle. Koska niitä on kaksi, muilla on tutkinto yksi ja tämä on kaksi oikeinta äärimmäistä termiä palkin alla. Merkitse erotus pystypalkilla.

Termit kirjoitetaan kasvavalla asteella oikealta vasemmalle, alkaen asteesta nolla sekä loput että tulos.

Jakautumisen tulos on:

Ei-moni-jakajille
Pienellä proddingilla laajennettu tekniikka voidaan yleistää entisestään toimimaan minkä tahansa polynomin, ei vain moniikan, kanssa . Tavallinen tapa tehdä tämä olisi jakaa jakaja sen johtavalla kertoimella (kutsua sitä a ):


sitten käyttämällä synteettistä jakoa jakajana ja jakamalla osamäärä a : lla saadaksesi alkuperäisen jaon osamäärä (loput pysyvät samana). Mutta tämä tuottaa usein epämiellyttäviä fraktioita, jotka poistetaan myöhemmin ja on siten alttiimpia virheille. On mahdollista tehdä se pienentämättä ensin kertoimia .


Kuten voidaan havaita suorittamalla ensin pitkä jako tällaisella ei-monisella jakajalla, kerroimet jaetaan johtavalla kertoimella "pudottamisen" jälkeen ja ennen kertomista.


Havainnollistetaan suorittamalla seuraava jako:

Käytetään hieman muokattua taulukkoa:

Huomaa ylimääräinen rivi alareunassa. Tätä käytetään kirjoittamaan löydetyt arvot jakamalla pudotetut arvot johtavalla kertoimella (tässä tapauksessa /3 ; huomaa, että toisin kuin muut kertoimet , tämän numeron merkki ei muutu) .


Seuraavaksi ensimmäinen kerroin pudotetaan tavalliseen tapaan:


ja sitten pudonnut arvo jaetaan 3: lla ja sijoitetaan alla olevaan riviin:

Seuraavaksi uutta (jaettua) arvoa käytetään ylärivien täyttämiseen 2- ja 1 -kertoimilla, kuten laajennetussa tekniikassa:

5 pudotetaan seuraavaksi, ja pakollinen 4 lisätään sen alle, ja vastaus jaetaan uudelleen:

Sitten 3 käytetään ylärivien täyttämiseen:

Jos tässä vaiheessa, kun saisimme kolmannen summan, yrittäisimme käyttää sitä ylärivien täyttämiseen, "putoaisimme" oikealta puolelta, joten kolmas summa on jäljellä olevan kerroin, kuten normaalisti synteettinen jako. Mutta loput arvot eivät jakaudu jakajan johtavalla kertoimella:

Nyt voimme lukea vastauksen kertoimet. Kuten laajennetussa synteettisessä jaossa, kaksi viimeistä arvoa (2 on jakajan aste) ovat jäännöksen kertoimet ja loput arvot ovat kertoimen kertoimet:

ja tulos on

Kompakti laajennettu synteettinen osasto
Yllä oleva diagonaalimuoto muuttuu kuitenkin vähemmän tilaa säästäväksi, kun jakajan aste ylittää puolet osingon asteesta. On helppo nähdä, että meillä on täydellinen vapaus kirjoittaa jokainen tuote mille tahansa riville, kunhan se on oikeassa sarakkeessa. Joten algoritmi voidaan compactified jonka ahne strategia , kuten on esitetty jako alla.


Seuraavassa kuvataan, miten algoritmi suoritetaan; Tämä algoritmi sisältää vaiheet ei-monisten jakajien jakamiseksi:
- Kirjoita osingon kertoimet palkkiin
- Jätä huomiotta jakajan ensimmäinen (johtava) kerroin, kumoa kaikki kertoimet ja aseta ne palkin vasemmalle puolelle.
- Laske palkin vasemmalle puolelle sijoitettujen kertoimien määrästä osingokertoimien määrä palkin yläpuolella oikeasta sarakkeesta alkaen. Aseta sitten pystysuora palkki sarakkeen vasemmalle puolelle ja alla oleva rivi. Tämä pystysuora palkki merkitsee eron osamäärän ja muun osan välillä.
- Laske osingon ensimmäinen kerroin palkin alle.
-
- Jaa aiemmin pudonnut/summattu luku jakajan johtavalla kertoimella ja aseta se alla olevalle riville (tätä ei tarvitse tehdä, jos johtava kerroin on 1). Tässä tapauksessa .

- Kerro aiemmin pudonnut/summattu luku (tai jaettu pudonnut/summattu luku) jokaiseen negatiiviseen jakajakertoimeen vasemmalla (alkaen vasemmasta eniten); ohita, jos pudonnut/summattu luku on nolla. Aseta jokainen tuote seuraavien sarakkeiden päälle.
- Suorita sarakekohtainen lisäys seuraavaan sarakkeeseen.
- Toista kaksi edellistä vaihetta. Pysäytä, kun olet suorittanut kaksi edellistä vaihetta numerolle juuri ennen pystypalkkia. Anna .
Anna .
Anna .





- Suorita loput sarakekohtaiset lisäykset seuraaviin sarakkeisiin (laskemalla loput).
- Alimmat tulokset vaakasuoran palkin alapuolella ovat polynomien kertoimet, loput ja osamäärä, missä osamäärän kertoimet ovat pystysuoran palkinerotuksen vasemmalla puolella ja loput kertoimet oikealla. Näillä kertoimilla tulkitaan olevan kasvava aste oikealta vasemmalle alkaen asteesta nolla sekä loput että osamäärä. Tulkitsemme tulokset saadaksemme:
Python -toteutus
Seuraava katkelma toteuttaa laajennetun synteettisen divisioonan mielivaltaisille yksimuuttujaisille polynoomeille:
def expanded_synthetic_division(dividend, divisor):
"""Fast polynomial division by using Expanded Synthetic Division.
Also works with non-monic polynomials.
Dividend and divisor are both polynomials, which are here simply lists of coefficients.
E.g.: x**2 + 3*x + 5 will be represented as [1, 3, 5]
"""
out = list(dividend) # Copy the dividend
normalizer = divisor[0]
for i in range(len(dividend) - len(divisor) + 1):
# For general polynomial division (when polynomials are non-monic),
# we need to normalize by dividing the coefficient with the divisor's first coefficient
out[i] /= normalizer
coef = out[i]
if coef != 0: # Useless to multiply if coef is 0
# In synthetic division, we always skip the first coefficient of the divisor,
# because it is only used to normalize the dividend coefficients
for j in range(1, len(divisor)):
out[i + j] += -divisor[j] * coef
# The resulting out contains both the quotient and the remainder,
# the remainder being the size of the divisor (the remainder
# has necessarily the same degree as the divisor since it is
# what we couldn't divide from the dividend), so we compute the index
# where this separation is, and return the quotient and remainder.
separator = 1 - len(divisor)
return out[:separator], out[separator:] # Return quotient, remainder.
Katso myös
Viitteet
Ulkoiset linkit