Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Vitaly Slobodskoy                    2:5015/128.22  30 Mar 2003  00:55:06
 To : Alexandr Taloverov
 Subject : Re^2:  полином n-й степени
 -------------------------------------------------------------------------------- 
 
 потекло 27.03.03... *ТЫ хочешь поговорить об этом??*
 
  VT>> Хехехе: x^n-1. Чем не полином энной степени? =)
  AT> нужно ,найти не сам полином, а его коpни ;)
 
  Вот мой исходник, переделанный с паскаля на дельфи (захотелось мне, помню, 32
 бита поюзать, чтобы точнее было). Там используется метод Лобачевского,
 небольшие мои доработки по округлению числа. Писалось давно, классе в 10-том.
 Hаходит все корни, довольно точно. Глючит, если есть комплексные корни. Знаю,
 как улучшить, применив метод Штурма... однако что-то всё никак...
 
 {$APPTYPE CONSOLE}
 program rab;
 uses sysutils,math;
 var n,i,j,k,l,u:integer;
     a,b,c,d,e:array [0..10] of extended;
     z,h,t,mem,m1,m:extended;
     s:string;
 label 1,2,3;
 begin
  write('Введите степень многочлена    '); readln(n);
  for i:=n downto 0 do read(e[i]);
  for i:=0 to n do begin
   a[i]:=e[i]/e[n]; b[i]:=a[i];
  end;
 for u:=1 to n do begin
 l:=0; h:=1;
 3: z:=1;
  for i:=0 to n do begin
   for j:=0 to n do begin
    k:=(i+j) div 2;
    if k+k=i+j then c[k]:=c[k]+a[i]*a[j]*z;
   end;
   z:=-z;
  end;
  m:=abs(c[n-1]);
 1: inc(l); m1:=m;
  for i:=1 to l do m1:=sqrt(m1);
  h:=h*m1;
  s:=floattostr(h);
  if (m1=1) or (pos('0000',s)<>0) then begin
   if pos('0000',s)<>0 then delete(s,pos('0000',s),length(s)-pos('0000',s)+1);
   if length(s)<>16 then h:=strtofloat(s);
   z:=0;
   for i:=0 to n do begin
     mem:=power(h,i);
     mem:=mem*b[i];
     if (i=n) then begin
      mem:=-mem;
      if floattostr(mem)=floattostr(z) then z:=0;
     end
     else z:=z+mem;
   end;
  if s[length(s)]=',' then delete(s,length(s),1);
  if z=0 then writeln(s)
  else begin writeln('-',s); h:=-h; end;
  t:=0;
  for i:=n downto 1 do begin
   d[i-1]:=(b[i]-t);
   t:=d[i-1]*(-h);
  end;
  dec(n);
  for i:=0 to n do begin
   a[i]:=d[i]; b[i]:=d[i]; c[i]:=0;
  end;
  end
  else begin
   for i:=0 to n do begin
   a[i]:=c[i]/power(m,(n-i)); c[i]:=0;
   end;
   goto 3;
  end;
 end;
 readln; readln;
 -----------------
 Hадеюсь, хоть чем-то мог быть полезен! И, это... в следующий раз закрывайте
 кран!
 
 Slobodskoy Vitaly
 e-mail: slvv@uic.nnov.ru
 fido: 2:5015/128.22
 
 --- WP/95 Rel 1.78E (215.0) Reg.
  * Origin: Эллипс - круг, вписанный в квадрат 2x4 ((с) военная кафедра)
 (2:5015/128.22)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 полином n-й степени   Alexandr Taloverov   16 Mar 2003 23:12:19 
 полином n-й степени   Stanislav Shwartsman   17 Mar 2003 22:00:34 
 RE: полином n-й степени   Alexandr Taloverov   19 Mar 2003 18:22:44 
 полином n-й степени   Vladislav Terehov   19 Mar 2003 18:25:51 
 RE: полином n-й степени   Alexandr Taloverov   27 Mar 2003 14:49:46 
 RE: полином n-й степени   Mike Girkin   29 Mar 2003 22:06:16 
 Re: полином n-й степени   Eugene Kilachkoff   30 Mar 2003 00:35:39 
 полином n-й степени   Stanislav Shwartsman   30 Mar 2003 08:20:17 
 Re^2: полином n-й степени   Vitaly Slobodskoy   30 Mar 2003 00:55:06 
 Re: полином n-й степени   Oleg Bunin   31 Mar 2003 15:46:52 
Архивное /ru.algorithms/39085309e68b.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional