metody numeryczne wartosc funkcji, Automatyka i Robotyka, Semestr IV, Metody Numeryczne, Lab, lab2


POLITECHNIKA ŚLĄSKA GLIWICE 11.10.04

WYDZIAŁ: AEiI

KIERUNEK: AUTOMATYKA I ROBOTYKA SEM.3

Laboratorium metod numerycznych

Temat: Metody numerycznego obliczania wartości funkcji

GR 4

Sekcja 2

Batrosz Sztajer

Rafał Selega

..

1. CEL ĆWICZENIA.

Celem ćwiczenia było napisanie trzech programów dokonujących :

  1. Obliczania wartości wielomianu za pomocą schematu Hornera i wzoru ogólnego.

  2. Wyznaczania przedziału, w którym zawarte są pierwiastki rzeczywiste wielomianu.

  3. Obliczenia wartości funkcji cos(x) dla zadanego x, wykorzystując rozwinięcie w szereg Taylora przy określonej dokładności obliczeń.

Należało przy tym dołączyć do każdego programu przykłady i wyniki.

2. OBLICZANIA WARTOŚCI WIELOMIANU ZA POMOCĄ SCHEMATU HORNERA.

  1. Kod źródłowy programu :

program lab1_1;

uses crt;

var a:array[0..100] of real;

n,i:integer;

x0,wh,wo:real;

procedure wprowadz;

begin

for i:=n downto 0 do

begin

write('Podaj wspolczynnik a[',i,']: ');

readln(a[i]);

end;

end;

procedure horner;

var b:array[0..100] of real;

begin

b[n]:=a[n];

for i:=n-1 downto 0 do b[i]:=a[i]+(b[i+1]*x0);

wh:=b[0];

end;

procedure ogolny;

var j:integer;

x:real;

begin

wo:=0;

for i:=n downto 1 do

begin

x:=1;

for j:=1 to i do x:=x*x0;

wo:=wo+a[i]*x;

end;

wo:=wo+a[0];

end;

begin

clrscr;

write('Podaj rzad wielomianu (n): ');

readln(n);

write('Podaj wartosc x0: ');

readln(x0);

wprowadz;

horner;

ogolny;

writeln('wynik z obliczen schematem Hornera: ',wh:5:5);

writeln('Wynik z obliczen ogolnym sposobem: ',wo:5:5);

readkey;

end.

  1. Przykłady własne, wyniki i wnioski:

-W(X1)=0x01 graphic
0x01 graphic
dla X1=0.5

-W(X2)=0x01 graphic
dla X2=3.14

-W(X3)=0x01 graphic
dla X3=-1

HORNER

WZOR OGÓLNY

W(X1) X1=0.5

14.50000

14.50000

W(X2) X2=3.14

641.24359

641.24359

W(X3) X3=-1

0.00000

0.00000


Schemat
Hornera znacznie zmniejsza ilość obliczeń przy wyznaczaniu wartości wielomianu w stosunku do schematu ogólnego, a błędy z tego wynikające powstają w wyniku zaokrągleń.

3. WYZNACZANIE PRZEDZIAŁU, W KTÓRYM ZAWARTE SĄ PIERWIASTKI RZECZYWISTE WIELOMIANU.

a) Kod źródłowy programu :

program lab1_2;

uses crt;

var n,i,m:integer;

a,b:array[0..100] of real;

inf,sup,x,x1,x0:real;

procedure wprowadz;

begin

for i:=n downto 0 do

begin

write('Podaj wspolczynnik a[',i,']: ');

readln(a[i]);

end;

end;

procedure horner;

begin

b[n]:=a[n];

for i:=n-1 downto 0 do b[i]:=a[i]+(b[i+1]*x);

end;

begin

clrscr;

write('Podaj rzad wielomianu (n): ');

readln(n);

wprowadz;

x0:=0;

repeat

x0:=x0+0.1;

x:=x0;

horner;

m:=0;

for i:=n downto 0 do if b[i]>=0 then inc(m);

until (m=n+1) or (x>maxint);

sup:=x;

for i:=0 to n do

begin

if (n mod 2)=1 then a[i]:=-a[i];

if (i mod 2)=1 then a[i]:=-a[i];

end;

x1:=0;

repeat

x1:=x1+0.1;

for i:=n downto 0 do

x:=x1;

horner;

m:=0;

for i:=n downto 0 do if b[i]>=0 then inc(m);

until (m=n+1) or (x>maxint);

inf:=-x;

writeln('Przedzial w ktorym znajduja sie pierw. rzecz. to [',inf:5:2,',',sup:5:2,']');

readkey;

end.

  1. Przykłady własne i wyniki:

Wielomian

Pierwiastki wielomianu

Przedział wyznaczony przez program

0x01 graphic

-1; -0.5; 0.5; 1

( -1,2; 1,2 )

0x01 graphic

-5; 0; 5; 1

( -5,1; 1 )

0x01 graphic

-0.4; 0; 2

( -0,4; 2 )

Program wykonywał krok dx=0.1 - dokładność przedziałów zależy od tego kroku, choć nie zawsze błędy są mniejsze bądź równe temu krokowi.

4. OBLICZENIA WARTOŚCI FUNKCJI COS(X) DLA ZADANEGO X, WYKORZYSTUJĄC ROZWINIĘCIE W SZEREG TAYLORA PRZY OKREŚLONEJ DOKŁADNOŚCI OBLICZEŃ.

  1. Kod źródłowy programu :

program lab2_3;

uses crt;

const x0=0;

var x,e,fx,fx1,wyn_pot,reszta,wyn_sil:extended;

i,n,m:longint;

procedure potega;

var j:integer;

begin

wyn_pot:=1;

if n=0 then wyn_pot:=1;

if n>0 then for j:=1 to n do wyn_pot:=(wyn_pot)*(x-x0);

end;

procedure silnia;

var j:integer;

begin

wyn_sil:=1;

if n=0 then wyn_sil:=1 else for j:=1 to n do wyn_sil:=wyn_sil*j;

end;

begin

clrscr;

writeln;

write('Podaj wartosc x: ');

readln(x);

x:=x*pi/180;

write('Podaj dokladnosc: ');

readln(e);

fx1:=0;

i:=0;

repeat;

n:=i*2;

potega;

silnia;

if (i mod 2)=1 then fx:=-wyn_pot/wyn_sil else fx:=wyn_pot/wyn_sil;

fx1:=fx1+fx;

n:=(i*2)+1;

potega;

silnia;

reszta:=(wyn_pot)/(wyn_sil);

inc(i);

until abs(reszta)<e;

writeln('Wartosc cos(x) wynosi: ',fx1:5:8);

writeln('Ilosc rozwiniec: ',i-1);

writeln('Dla porownania wynik za pomoca polecenia wynosi: ',cos(x):5:8);

readkey;

end.

  1. Przykłady własne, wyniki i wnioski:

X1=0.2

X2=1

X3=20

X4=100

E1=0.001

N=1

N=1

N=2

N=4

E2=0.0000001

N=1

N=2

N=4

N=7

Porównanie wyników rozwinięcia Taylora z wartością funkcji cos(x):

TAYLOR

cos

X1=0.2 E=0.001

0.99999391

0.99999391

X1=0.2 E=0.0000001

0.99999391

0.99999391

X2=1 E=0.001

0.99984769

0.99984770

X2=1 E=0.0000001

0.99984770

0.99984770

X3=20 E=0.001

0.93969513

0.9396262

X3=20 E=0.0000001

0.93969262

0.9396262

X4=100 E=0.001

-0.17357754

-0.17364818

X4=100 E=0.0000001

-0.17364818

-0.17364818

N-ilość wyrazów w rozwinięciu szeregu Taylora

X-punkt w którym liczymy wartość cos(x)

E-dokładność

Na ilość wyrazów zdecydowany wpływ ma wartość X (ilość wyrazów rośnie wraz z oddalaniem się od osi współrzędnych) oraz zadana dokładność.

Błędy są zdecydowanie mniejsze od zadanych dokładności.



Wyszukiwarka