Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
practikumporesheniyuzadachnaibm (1).doc
Скачиваний:
6
Добавлен:
14.07.2019
Размер:
665.6 Кб
Скачать

4) Тестирование

Для тестирования выбираются такие уравнения, у которых корень можно найти аналитически. Значения a  и b выбираются таким образом, чтобы [a,b] содержал искомый корень и притом только один.

№ теста

f(x)

a

b

Прогнозируемый результат

Полученный результат

1

x3 - 1

0

1.5

1

0.9999

2

x2 + 2x

-2.5

-1

-2

-1.9999

3

ex - 1

-0.5

1

0

0.0001

Ручная  трассировка:

исходные данные f(x)= х3 + 0,5 x2 - 2, a=0, b=2, E=0.1

c=(a+b)/2

f(a)*f(c)

a

b

b-a

b-a<e

(0+2)/2=1

f(0)*f(1)>0

1

2

1

false

(1+2)/2=1.5

f(1)*f(1.5)<0

1

1.5

0.5

false

(1+1.5)/2=1.25

f(1)*f(1.25)>0

1.25

1.5

0.25

false

(1.25+1.5)/2=1.38

f(1.25)*f(1.38)>0

1.38

1.5

0.12

false

(1.38+1.5)/2=1.44

f(1.38)*f(1.44)>0

1.44

1.5

0.06

true

x=(1.44+1.5)/2= 1.47

Пример 2.

Найти площадь заштрихованной фигуры методом Монте- Карло. Вычисление площади оформить как процедуру, в основной программе вводится число точек и выводится результат.

1) постановка задачи

Дано: фигура, ограниченная y=x2  и y=2

Надо: найти площадь фигуры.

2) математическая модель

Метод Монте-Карло позволяет находить приближенно площадь произвольной фигуры.

Для этого фигура помещается внутрь прямоугольника или квадрата, площадь которого известна и равна S. Прямоугольник (квадрат) случайным образом заполняется N точками. Если внутрь фигуры F попали М точек, то отношение M/N приближенно равно отношению площадей SF/S.

= , отсюда SF =S*M/N.

В данном примере фигура, площадь которой необходимо найти, ограничена линией y=x2 и помещена в прямоугольник ABCD. AB=1, AD=2.

Для решения задачи необходимо задать: N - общее число точек, S - площадь прямоугольника, содержащего фигуру, x,y - координаты точки, выбранные случайным образом внутри прямоугольника (-1<x<1, 0<y<1).

Чтобы подсчитать количество точек (x,y), принадлежащих фигуре (переменная  M), необходимо проверить условие y>x2.

3) блок-схема

4) программа

Program Pr2;

  Var

       S, SF: real;

       M,N: integer;

Procedure MonteKarlo(N: integer; S: real; Var SF:real);

    Var

          M, I: integer;

          X,Y: real;

     Begin

        M:=0;

        For i:=1 to n do

              Begin

                 X:=Random(20)/10-1;

                 Y:=Random(10)/10;

                 If   y<x*x   then  M:=M+1;

              End;

        SF:=S*M/N;

End;

BEGIN    {основная программа}

    randomize;

    Write('N='); Readln(n); S:=2;

     MonteKarlo(N, S, SF);

     writeln('SF=', SF:6:3);

END.

Результат выполнения программы: при N=100    SF=1.226

5) тестирование

Для тестирования можно изменить исходные данные, например, общее количество точек N и размеры прямоугольника, содержащего фигуру.

№ теста

N

S

X

Y

SF

1

1000

4

[-2,2]

[0,1]

1.204

2

1000

4

[-1,1]

[-1,1]

1.212

 

Пример 3.

Найти значение суммы + + + ... с точностью E=0.00001 и определить количество слагаемых этой суммы.

1) постановка задачи

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

Дано:

Найти: S, n такие, что

-

   < E

2) математическая модель

-

 

=

< E - условие прекращения суммирования

3) блок-схема

n- номер очередного слагаемого,    E - точность,   f - факториал  знаменателя,   S -сумма

4) программа

Program Pr3;

   Procedure Fakt(k: integer; Var f: integer);

       Var i: integer;

        Begin

              f:=1;

              For i:=1 to k do f:=f*i;

        End;

Var    S, E:  real;

         n, f: integer;

BEGIN {основная программа}

      S:=0;  n:=0;  f:=2;  E:=0.00001;

      while 1/f>=E do

          begin

               S:=S+1/f;   n:=n+1;   Fakt(2*(n+1),f);

          end;

      writeln(‘S=‘,s:8:5,’n=‘,n)

END.

Результат выполнения программы: S= 0.54308 n=4

5) тестирование

Для тестирования вычислим вручную значение суммы и количество слагаемых для различных значений Е.

№ теста

Проверяемый случай

Прогнозируемый результат

Полученный результат

S

N

S

N

1

Е=0.1

0.5

1

0.5

1

2

Е=0.01

0.54167

2

0.54167

2

1) Е=0.1                                              

1/2! = 1/2 = 0.5 >0.1 -суммируем          n=1                

1/4!= 1/24=0.04167 < 0.1 - завершаем суммирование                           

Результат :    S = 0.5    n=1                                                 

2) E=0.01

1/2! = 1/2 = 0.5 >0.01 -    суммируем           n=1

1/4!= 1/24=0.04167 > 0.01 - суммируем       n=2

1/6!= 1/720 =0.00139< 0.001- завершаем суммирование 

Результат : S=0.54167  n=2

Пример 4.

Вычислить значение многочлена p(x)=3,4х5 - 2х4 +5,7х3 -0,4х+3 при х=15,35 по схеме Горнера.

1) математическая  модель

Преобразуем многочлен anxn + an-1xn-1 + an-2xn-2... + a1x + a0, группируя его члены и вынося за скобки х:

anxn + an-1xn-1 + an-2xn-2 +... +а2х2 + a1x + a0 = (anxn-1 + an-1xn-2 + an-2xn-3 +... +а2х + a1)x + a0 = ((anxn-2 + an-1xn-3 + an-2xn-4 +... +а2)х + a1)x + a0 = …

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

((...(anx + an-1)x + an-2)x +...)x +a1)x +a0. Тогда последовательно находятся:

p= an

p= anx + an-1

p=(anx + an-1)x + an-2

...................................................

p= (...(anx + an-1)x + an-2)x +...)x +a1)x +a0

Каждое следующее значение получается из предыдущего домножением на х и прибавлением очередного коэффициента многочлена:

p=p*x + ak

2) программа

Program Pr4;

   Сonst

          n=5;

   Type

          mas=array[1..100] of real;

   Var

       a: mas;   p, x: real;     k: integer;

  Procedure Gorner(x: real; a: mas; Var p: real);

      Var

           i: integer;

     Begin

          p:=a[n];    For i:=n-1 downto 0 do

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

     End;

BEGIN     {основная   программа}

      Writeln('Введите коэффициенты'); For k:=0 to n do Readln(a[k]);

      Write('Введите x '); Readln(x); Gorner(x,a,p);

      Writeln('p=',p:6:3);

END.

Результат выполнения программы: 

р=2807059.189

3) тестирование

№ теста

Проверяемый случай

Прогнозируемый результат

Полученный результат

1

х=0

р(0)=3

р(0)=3

2

х=1

р(1)=9.7

р(1)=9.7

3

х=-1

р(-1)=-7.7

р(-1)=-7.7

П ример 5.

Найти площадь криволинейной трапеции, ограниченной линиями:

y=f(x),  x=a,  x=b, если

f(x) = , a=0,  b=4.

 

1) математическая модель

Можно найти приближенное значение площади криволинейной трапеции, ограниченной линиями y=f(x), x=a, x=b, используя метод трапеций. Для этого разобьем отрезок [a, b] на n равных частей и через точки разбиения проведем вертикальные прямые до пересечения с графиком функции y=f(x). Соединив точки пересечения отрезками, получим n прямоугольных трапеций с высотой h= .

Тогда SABCD = , где Si = . Чем больше n, тем точнее результат вычисления.  =h ( + + + + +...+ + ) =

= h( +f(x1) +f(x2)+...+ f(xn-1) + )

2) программа

Program Pr5;

    Function F(x: real): real;

      Begin

            F:=sqrt(x);

     End;

   Var

       a, b, h, x, s: real;    n: integer;

BEGIN  {основная  программа}

      write('a, b = '); Readln(a, b); write('n = '); Readln(n);

      h:=(b-a)/n; s:=(f(a)+f(b))/2;   x:=a+h;

      while x<b do

          begin

               s:=s+f(x); x:=x+h;

         end;

      writeln('s=', s*h:8:4);

END.

3) тестирование

Исходные данные следует подобрать таким образом, чтобы площадь криволинейной трапеции можно было вычислить аналитически (площадь криволинейной трапеции  равна значению определенного интеграла)

№ теста

Проверяемый случай

Прогнозируемый результат

Полученный результат

f(x)

a

b

1

x2

0

1

0,33

0,3333

2

ex

-1

1

2,35

2,3504