[Edellinen] [Seuraava] [Sisällys]

Polynomit

Kts. myös lyhyen oppaan polynomiosaa.

Polynomi esitetään kerroinvektorina korkeimman asteen termistä alkaen. Esim. polynomia

x2 + 2x + 1

edustaa kerroinvektori c=[1 2 1] .

Polynomiyhtälön ratkaisu

x2 + 2x + 1 = 0

saadaan funktiolla roots. Kyseessä on (tietenkin) numeerinen ratkaisu.

>> c=[1 2 1]
c =
     1     2     1
>> r=roots(c)
r =
    -1
    -1
Kun polynomin juuret tunnetaan, saadaan kertoimet funktiolla poly.
>> poly(r)       
ans =
     1     2     1
Laskumme osoitti siis, että x2 + 2x + 1 = (x+1)(x+1). Funktio roots suoritti (numeerisen) tekijöihin jaon ja poly puolestaan auki kertomisen, symboliohjelmien "expand"-toiminnon.

Astetta (+1) kiinnostavampi esimerkki: Bombielli-niminen matemaatikko tutki joskus 1500-luvulla yhtälöä x3 - 15x = 4.

>> c=[1 0 -15 -4];
>> r=roots(c)
ans =
    4.0000
   -3.7321
   -0.2679
>> format long
>> poly(r)
ans =
  Columns 1 through 2
   1.000000000000000   0.000000000000002
  Columns 3 through 4
 -15.000000000000007  -4.000000000000003

Polynomin arvon laskenta tapahtuu polyval-funktiolla. Kts. esimerkkejä ja "teoriaa" tästä lyhyestä (Tietysti myös >>help polyval.)

Teoriasta tässä vain senverran, että polynomiyhtälön ratkaisu suoritetaan Matlab:ssa (tietysti) numeerisesti, joten mitään periaatteellista rajoitusta asteluvulle ei ole. (Yllä viitatussa lyhyessä on asiasta hiukan tarkemmin.)
Symbolic toolbox:n avulla voidaan suorittaa myös symolilaskentaa. Alla pikku esimerkkitehtävä.

Tehtäviä

  1. Kokeile symbolisia operaatioita polynomeille, kun käytössä on "symbolic toolbox". Vaikka näin:
    >> syms x           % Julistetaan muuttuja x symboliseksi.
    >> expand((x+1)^2)  % Symbolisissa operaatioissa ei tarvita muotoa (.^),
                        %  mutta se on sallittu.
    >> factor(ans)
    
  2. Piirrä edellisen esimerkin polynomin x3 - 15x - 4 kuvaaja alueella, joka sisältää kaikki nollakohdat, mutta on jonkinverran laajempi. Käytä ihmeessä polyval-funktiota. Komento [grid on] kannattaa antaa tässä, niinkuin useissa kuvissa.
  3. Muodosta kaikki ykkösen n:nnet juuret ratkaisemalla yhtälö zn-1 = 0. Laske samalla n kuin kompleksilukuosan vastaavaassa tehtävässä ja vertaa. Piirrä yksikköympyrä ja merkitse juuret vaikka *:llä. Suorita axis equal . (Muista, että 1-ympyrän voi esittää paitsi (cos(t),sin(t))- esityksenä, myös
    eit-muodossa (vielä elegantimpaa).)

Polynomien kertominen ja jakaminen conv,deconv

Olkoon p1(x)=2x2+3x +1 ja p2(x)=5x - 2.

p1(x)p2(x)= (2x2+3x +1)(5x - 2) = 10x3+11x2-x - 2.

>> p1=[2 3 1];
>> p2=[5 -2];
>> p3=conv(p1,p2)
p3 =
         10.00      11.00     -1.00     -2.00
Jaetaan takaisin:
>> deconv(p3,p1)
ans =
          5.00         -2.00
>> deconv(p3,p2)         % Pelkkä osamäärä.
ans =
          2.00          3.00          1.00
>> [q,r]=deconv(p3,p2)   % Osamäärä ja jakojäännös, tässä 0-polynomi.
q =
          2.00          3.00          1.00
r =
             0           0           0        0.00

>> p3(2)=1               % Muutetaan p3:a, jotta jako ei mene tasan.
p3 =
         10.00          1.00        7.00      -2.00
>> [q,r]=deconv(p3,p1)
q =
          5.00          3.00     % Osamäärä: 5x + 3
r =
            0            0         5.00      -5.00  
                                  %jakojäännös: 5x - 5

>> conv(q,p1)+r                   % Tarkistus:
ans =
         10.00          1.00         7.00      -2.00
            % Jakoidentiteetti toteutui!
Huomaa: Polynomien yhteen- ja vähennyslaskussa on huolehdittava tavittaessa, että lyhempi vektori täytetään etunollilla, tässä etunollat tulivat automaattisesti mukaan. (Vrt. toukokuun kurssin polynomien yhteenlaskutehtävä.)






[Edellinen] [Seuraava] [Alkusivu]