Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Выделение кратных множителей

 

Если дан многочлен  с разложением (5.2) и если через  мы обозначим наибольший общий делитель  и его производной  то (5.3) будет разложением для . Деля (5.2) на (5.3), мы получим:

т.е. получим многочлен, не содержащий кратных множителей, причем всякий неприводимый множитель для , имеющего вообще говоря, меньшую степень и, во всяком случае, содержащего лишь простые множители. Если эта задача для  будет решена, то останется определить лишь кратность найденных неприводимых множителей в , что достигается применением алгоритма деления.

Усложняя изложенный сейчас метод, можно сразу перейти к рассмотрению нескольких многочленов без кратных множителей, причем, найдя неприводимые множители этих многочленов, мы не только найдем все неприводимые множители для , но и будем знать их кратность.

Пусть (5.2) будет разложением  на неприводимые множители, причем наивысшая кратность множителей есть , . Обозначим через  произведение всех однократных множителей многочлена , через  - произведение всех двукратных множителей, но взятых лишь по одному разу, и т.д., наконец  - произведение всех -кратных множителей, также взятых лишь по одному разу; если при этом для некоторого  в  отсутствуют -кратные множители, то полагаем . Тогда  будет делиться на - тую степень многочлена  и разложение (5.2) примет вид

 

а разложение (5.3) для  перепишется в виде

обозначая через  наибольший общий делитель многочлена  и его производной и вообще через  наибольший общий делитель многочленов  и , таким путем получим:

……………………………

.

Отсюда

,

……………………………

,

И поэтому, наконец,

, , …,

Таким образом, пользуясь лишь приемами, не требующими знания неприводимых множителей многочлена , а именно взятием производной, алгоритмом Евклида и алгоритмом деления, мы можем найти многочлены  без кратных множителей, причем всякий неприводимый множитель многочлена , будет -кратным для .

Пример. Разложить многочлен  на кратные множители.

 │

                   

 

       

 

 │

       

 

  

 

 │

             

 

 

                 

 

 

  

 

   

Многочлен  имеет разложение в виде .

Я составила программу для разложения многочлена на кратные множители.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

SGd1: TStringGrid;

Label2: TLabel;

 Button1: TButton;

Label3: TLabel;

SGd2: TStringGrid;

SGd3: TStringGrid;

SGd4: TStringGrid;

Edit6: TEdit;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

c,i,st1,st2,stiz,n_iz,n_nod,n,m,d_st,step,f:integer;

k,d,s:string;

kof1,kof2,k1,k2,izubst,a,b,a2,b2,buf,est,fxst:array[0..15] of integer;

izub,e,fx:array[0..50,0..50] of integer;

first:boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var i,j,k_1,st3,l:integer;

sokr:boolean;

k2_2,k1_1:array[0..10] of integer;

begin

st1:=StrToInt(Edit1.Text);

for i:=0 to st1 do begin

SGd4.Cells[i,0]:=SGd1.Cells[i,0];

end;

repeat

n_iz:=n_iz+1;

st2:=st1-1;

for i:=0 to st1 do begin

if SGd1.Cells[i,0]<>'' then

   kof1[st1-i]:=StrToInt(SGd1.Cells[i,0])

else MessageDlg('Внимание! Не введены значения коэффициентов!',mtWarning,[mbOK],0);

end;

s:='f(x)=';

for i:=st1 downto 0 do begin

if kof1[i]<>0 then begin

   if(kof1[i-1]<0)or(i=0) then begin

     str(kof1[i],d);

     str(i,k);

     s:=s+d+'x^'+k;

   end

   else begin

     str(kof1[i],d);

    str(i,k);

     s:=s+d+'x^'+k+'+';

   end;

end;

kof2[i-1]:=kof1[i]*i;

end;

//Edit2.Text:=s;

s:='f1(x)=';

for i:=st2 downto 0 do begin

SGd2.Cells[st2-i,0]:=inttostr(kof2[i]);

if kof2[i]<>0 then begin

   if(kof2[i-1]<0)or(i=1) then begin

     str(kof2[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k;

   end

   else begin

     str(kof2[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k+'+';

   end;

end;

//Edit3.Text:=s;

end;

for i:=0 to st1 do begin

kof1[i]:=StrToInt(SGd1.Cells[i,0]);

k1[i]:=StrToInt(SGd1.Cells[i,0]);

end;

for i:=0 to st2 do begin

kof2[i]:=StrToInt(SGd2.Cells[i,0]);

k2[i]:=StrToInt(SGd2.Cells[i,0]);

end;

while kof2[0]<>0 do begin

repeat

   //Edit4.Text:='';

   stiz:=0;

   k_1:=k1[0];

   if k1[0]<>kof2[0] then begin

     if (k1[0] mod kof2[0])=0 then begin

       for j:=0 to st2 do

         k2[j]:=(k1[0] div kof2[0])*kof2[j];

       end

     else begin

       if k2[0]<>1 then

         for j:=0 to st1 do

           k1[j]:=kof2[0]*k1[j];

       if k_1<>1 then begin

         for j:=0 to st2 do

             k2[j]:=k_1*kof2[j];

       end;

     end;

   end;

   for i:=1 to st1 do begin

     k1[i-1]:=k1[i]-k2[i];

   end;

   st1:=st1-1;

until st1<st2;

if k1[0]<>0 then begin //Сокращение

sokr:=true;

for i:=1 to st1 do

   if k1[i]<>0 then begin

     if (k1[i] mod k1[0])<>0 then sokr:=false;

   end;

k_1:=k1[0];

if sokr=true then

   for i:=0 to st1 do

     k1[i]:=k1[i] div k_1;

end;

for i:=0 to st2 do    //Замена многочленов

k2_2[i]:=kof2[i];

for i:=0 to st1 do

k1_1[i]:=k1[i];

for i:=0 to 10 do begin

SGd3.Cells[i,0]:='';

SGd1.Cells[i,0]:='';

kof1[i]:=0;

k1[i]:=0;

kof2[i]:=0;

k2[i]:=0;

izub[n_iz,i]:=0;

end;

izubst[n_iz]:=st2;

for i:=0 to st2 do begin

k1[i]:=k2_2[i];

SGd1.Cells[i,0]:=inttostr(k1[i]);

izub[n_iz,i]:=k1[i];

if k1[i]<>0 then begin

   //Edit4.Text:=Edit4.Text+IntToStr(k1[i])+'x^'+IntToStr(st2-i);

end;

if (k2_2[i+1]>0)and(i<st2) then //Edit4.Text:=Edit4.Text+'+';

end;

for i:=0 to st1 do begin

k2[i]:=k1_1[i];

kof2[i]:=k1_1[i];

end;

st3:=st1;

st1:=st2;

st2:=st3;

end;

until (st1=0);

d_st:=StrToInt(Edit1.Text);

for i:=d_st+1 downto 1 do begin

kof1[i]:=StrToInt(SGd4.Cells[d_st-(i-1),0]);

end;

//Нахождение Е

first:=true;

for n_nod:=1 to n_iz do begin

n:=d_st;

m:=izubst[n_nod];

d_st:=m;

for i:=n+1 downto 1 do begin

a[i]:=kof1[i];

end;

for i:=m+1 downto 1 do begin

b[i]:=izub[n_nod,m-(i-1)];

kof1[i]:=b[i];

end;

s:='f1(x)=';

for i:=n+1 downto 1 do begin

if a[i]<>0 then begin

   if(a[i-1]<0)or(i=1) then begin

     str(a[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k;

   end

   else begin

     str(a[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k+'+';

   end;

end;

end;

//Edit3.Text:=s;

s:='f2(x)=';

for i:=m+1 downto 1 do begin

if b[i]<>0 then begin

   if(b[i-1]<0)or(i=1) then begin

     str(b[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k;

   end

   else begin

     str(b[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k+'+';

   end;

end;

end;

//Edit4.Text:=s;

for j:=n+1 downto 1 do begin

a2[j]:=a[j];

b2[j]:=0;

end;

step:=n-m;

f:=n+2;

for i:=step+1 downto 1 do begin

   f:=f-1;

   buf[i]:=a2[f];

for j:=m+1 downto 1 do begin

   b2[j]:=buf[i]*b[j];

end;

for j:=f downto 1 do begin

   a2[j]:=a2[j]*b[m+1];

end;

for j:=f downto 1 do begin

   a2[j]:=a2[j]-b2[j+1-i];

   b2[j]:=0;

   end;

end;

s:='h(x)=';

for i:=f+1 downto 1 do begin

e[n_nod,i]:=buf[i];

if buf[i]<>0 then begin

   if(buf[i-1]<0)or(i=1) then begin

     str(buf[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k;

   end

   else begin

     str(buf[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k+'+';

   end;

   buf[i]:=0;

end;

end;

est[n_nod]:=f;

//Edit5.Text:=s;

s:='r(x)=';

for i:=n downto 0 do begin

if a2[i]<>0 then begin

   if(a2[i-1]<0)or(i=1) then begin

     str(a2[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k;

   end

   else begin

     str(a2[i],d);

     str(i-1,k);

     s:=s+d+'x^'+k+'+';

   end;

end;

end;

Edit6.Text:=s;

first:=false;

end;

for n_nod:=1 to n_iz-1 do begin

n:=est[n_nod];

m:=est[n_nod+1];

d_st:=m;

for i:=n+1 downto 1 do begin

a[i]:=e[n_nod,i];

end;

for i:=m+1 downto 1 do begin

b[i]:=e[n_nod+1,i];

kof1[i]:=b[i];

if n_nod=n_iz-1 then fx[n_iz,i]:=b[i];

end;

s:='f1(x)=';

for i:=n+1 downto 1 do begin

if a[i]<>0 then begin if(a[i-1]<0)or(i=1) then begin

   str(a[i],d);

   str(i-1,k);

   s:=s+d+'x^'+k;

end

else begin

   str(a[i],d);

   str(i-1,k);

   s:=s+d+'x^'+k+'+';

end;

end;

end;

//Edit3.Text:=s;

s:='f2(x)=';

for i:=m+1 downto 1 do begin

if b[i]<>0 then begin if(b[i-1]<0)or(i=1) then begin

   str(b[i],d);

   str(i-1,k);

   s:=s+d+'x^'+k;

end

else begin

   str(b[i],d);

   str(i-1,k);

   s:=s+d+'x^'+k+'+';

end;

end;

end;

//Edit4.Text:=s;

for j:=n+1 downto 1 do begin

a2[j]:=a[j];

b2[j]:=0;

end;

step:=n-m;

f:=n+2;

for i:=step+1 downto 1 do begin

f:=f-1;

buf[i]:=a2[f];

for j:=m+1 downto 1 do begin

b2[j]:=buf[i]*b[j];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]*b[m+1];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]-b2[j+1-i];

b2[j]:=0;

end;

end;

s:='h(x)=';

for i:=f+1 downto 1 do begin

  fx[n_nod,i]:=buf[i];

  if buf[i]<>0 then begin if(buf[i-1]<0)or(i=1) then begin

    str(buf[i],d);

    str(i-1,k);

    s:=s+d+'x^'+k;

  end

  else begin

    str(buf[i],d);

    str(i-1,k);

    s:=s+d+'x^'+k+'+';

  end;

  buf[i]:=0;

end;

end;

//Edit5.Text:=s;

fxst[n_nod]:=f;

s:='r(x)=';

for i:=n downto 0 do begin

  if a2[i]<>0 then begin if(a2[i-1]<0)or(i=1) then begin

    str(a2[i],d);

    str(i-1,k);

    s:=s+d+'x^'+k;

  end

  else begin

    str(a2[i],d);

    str(i-1,k);

    s:=s+d+'x^'+k+'+';

  end;

end;

end;

Edit6.Text:=s;

end;

fxst[n_iz]:=est[n_iz]+1;

Edit6.Text:='';

s:='';

for i:=1 to n_iz do begin

s:=s+'(';

for j:=fxst[i] downto 0 do begin

if fx[i,j]<>0 then begin

if(fx[i,j-1]<0)or(j=1) then begin

   str(fx[i,j],d);

   str(j-1,k);

   s:=s+d+'x^'+k;

end

else begin

   str(fx[i,j],d);

   str(j-1,k);

   s:=s+d+'x^'+k+'+';

end;

end;

end;

s:=s+')^'+IntToStr(i)+' ';

Edit6.Text:=Edit6.Text+s;

s:='';

end;

for i:=0 to 10 do begin

SGd1.Cells[i,0]:=SGd4.Cells[i,0];

end;

end;

end.


Заключение

 

При выполнении дипломной работы я рассмотрела следующие вопросы:

– делимость многочленов;

– деление многочленов с остатком;

– наибольший общий делитель, алгоритм Евклида;

– кратные корни;

– кратные множители, выделение кратных множителей;

– производные от многочленов.

Составила программы для нахождения частного и остатка при делении многочленов; наибольшего общего делителя двух многочленов; производной многочлена.


Список использованной литературы

 

1. Алгебра и теория чисел. Под ред. Н. Я. Виленкина. Москва: Просвещение, 1984.

2. Архангельский А. Я. Программирование в Delphi 6. Москва: ЗАО Бином, 2003.

3. Архангельский А. Я. Delphi 7. Справочное пособие. Москва: ООО Бином-Пресс, 2004.

4. Курош А. Г. Курс высшей алгебры. Москва: Наука, 1971.

5. Ляпин Е. С., Евсеев А. Е. Алгебра и теория чисел. Часть II. Линейная алгебра и полиномы. Москва: Просвещение, 1978.

6. Мантуров О. В. и др. Математика в понятиях, определениях и терминах. Часть 2. Москва: Просвещение, 1982.

7. Попов В.Б. Turbo Pascal. Москва: Финансы и статистика, 2000.

8. Потапов М. К., Александров В. В., Пасиченко П. И. Алгебра и анализ элементарных функций. Москва: Наука, 1980.

9. Сабинина Л. В. Математика в понятиях, определениях и терминах. Часть I. Москва: Просвещение, 1978.

10. Сборник задач по алгебре. Под ред. А. И. Кострикина. Москва: Наука, 1987.

11. Смолин Ю. Н. Алгебра и теория чисел. Перемь:1996.

12. Солодовников А. С., Родина М. А. Задачник-практикум по алгебре. Часть IV. Москва: Просвещение, 1985.

13. Фадеев Д. К. Лекции по алгебре. Москва: Наука, 1984.

14. Фадеев Д. К., Соминский И. С. Сборник задач по высшей алгебре. Москва: Наука, 1968.

15.  Шварцбурд С. И. Избранные вопросы математики. Москва: Просвещение, 1980.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...