Arytmetyka FL
Obliczyć wartość wielomianu (x+2)^6 na siatce równoodległej ze 101 punktami na przedziale [-2 - 3e-4, -2 + 3e-4] dwoma algorytmami - pierwszym takim wprost z rozwinięcia w bazie potęgowej, tzn. licząc kolejno x^6 + 12*x^5 + ... + 64 i drugim obliczając x=x+2 i potem x^6. Dostaniemy dwa wektory x1 i x2 obliczonych wartości obu algorytmami i obliczyć wektor y=(x1-x2)/m2 dla m2=max_k |x2[k]| czyli norma max od x2. Policzyć normę maksimum y.
W raporcie: norma max wektora y.
program zad1;
var a,b,h,m2,maks,x:real;
x1,x2,y:array[1..101] of real;
i,k:integer;
function p1(x:real):real;
begin
p1:=(x*x*x*x*x*x + 12*x*x*x*x*x + 60*x*x*x*x + 160*x*x*x + 240*x*x + 192*x + 64);
end;
function p2(x:real):real;
begin
p2:=(x+2)*(x+2)*(x+2)*(x+2)*(x+2)*(x+2);
end;
procedure norma_max_x2;
begin
m2:=abs(x2[1]);
for k:=2 to 101 do
if abs(x2[k]) > m2 then m2:=abs(x2[k]);
end;
procedure maksimum_y;
begin
maks:=abs(y[1]);
for k:=2 to 101 do
if abs(y[k]) > maks then maks:=abs(y[k]);
end;
begin
a:=-2.0003;
b:=-1.9997;
h:=(b - a)/100;
for i:=1 to 101 do begin
x:=(a + (i-1)*h);
x1[i]:=p1(x);
x2[i]:=p2(x);
end;
norma_max_x2;
for i:=1 to 101 do y[i]:=(x1[i] - x2[i])/m2;
maksimum_y;
writeln(maks);
end.Wynik z konsoli:
maniek@maniek:~$ ./zad1
2.284409508390987E+005
HTML w komentarzach jest wyłączony, możesz jednak skorzystać z Textile Lite.