Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач.docx
Скачиваний:
96
Добавлен:
28.03.2015
Размер:
148.22 Кб
Скачать

11 Microsoft Excel. Шаговый метод

x

f(x)

0

1

0,5

-0,58579

1

-2

1,5

-3,17157

2

-4

2,5

-4,34315

3

-4

3,5

-2,68629

4

0

4,5

4,627417

5

12

Подбор параметра

x

f(x)

0,309909

-5E-06

4

0

Поиск решения

0,309907

-3,7E-07

4

0

12 Microsoft Excel. Метод половинного деления Алгоритм

  1. Заполнить ячейки A1:H1 последовательно следующим образом: a, b, c=(a+b)/2, f(a), f(b), f(c), |b-a|<=e.

  2. Ввести в ячейку A2 число 0, в ячейку B2 - число 0.5.

  3. В ячейку C2 ввести формулу: =(A2+B2)/2.

  4. В ячейку D2 ввести формулу: =2^A2-4*A2, скопировать эту формулу в ячейки E2:F2.

  5. Ввести в ячейку G2 формулу: =ЕСЛИ(ABS(B2-A2)<=2*$H$2;C2; "-").

  6. Ввести в ячейку H2 число 0,001.

  7. В ячейку A3 ввести формулу: =ЕСЛИ(D2*F2<0;A2;C2).

  8. В ячейку B3 ввести формулу: =ЕСЛИ(D2*F2<0;C2;B2).

  9. Диапазон ячеек C2:G2 скопировать в диапазон ячеек C3:G3.

  10. Выделить диапазон ячеек A3:G3 и с помощью маркера заполнения заполнить все нижестоящие ячейки до получения результата в одной из ячеек столбца G (это ячейки A3:G53).

13

14

Pascal. Шаговый метод

Блок-схема

Начало

F(x)=sin(3.14x)+x2-1

c,d,h

k=0

a=e

b=a+h

F(a)*F(b)<=0

k=k+1

k,a,b

a=b

b>d

конец.

Программа

Program ex_1;

Uses crt;

Var c,d,h,a,b:real ; k:integer ;

Function F(x:real ):real ;

Begin

F:= exp(x*ln(2))-4*x

End ;

Begin

Writeln ('vvedite c,d,h');

Readln (c,d,h);

k:= 0 ;

a:=c;

Repeat

b:=a+h;

If F(a)*F(b)<= 0 then

begin

k:=k+1 ;

Writeln ('k=',k,' a=',a:5 :2 ,' b=',b:5 :2 );

end ;

a:=b;

until b>d;

end.

Ответ: k=1 a=0 b=0.5

k=2 a=3.5 b=4

k=3 a=4 b=4.5

16

Pascal. Метод половинного деления

Блок-схема

Начало

a,b,e

f(a)

c

f(a)*f(c)<0

a=c

b=c

b-a >=e

x

конец.

17

Программа

program mdp;

function f(x: real): real;

begin

f:=exp(x*ln(2))-4*x;

end;

var

a, b, e, c, x: real;

begin

write('a=');

read(a);

write('b=');

read(b);

write ('e=');

read(e);

c:=(a+b)/2;

while(b-a)>e do

begin

if(a)*f(c)<0 then

b:=c

else

a:=c;

writeln('a=', a:3:4, 'b=', b:3:4, 'f(a)=', f(a):6:9, 'f(b)=',f(b):6:9);

c:=(a+b)/2;

18

end;

x:=(a+b)/2;

writeln ('x=',x:3:3,' f(x)=',f(x):4:4);

readln;

end.

Ответ:

a=0

b=0.5

e=0.001

a=0.2500b=0.5000f(a)=0.189207115f(b)=-0.585786438

a=0.2500b=0.3750f(a)=0.189207115f(b)=-0.203160445

a=0.2500b=0.3125f(a)=0.189207115f(b)=-0.008142188

a=0.2813b=0.3125f(a)=0.090247360f(b)=-0.008142188

a=0.2969b=0.3125f(a)=0.040980536f(b)=-0.008142188

a=0.3047b=0.3125f(a)=0.016401064f(b)=-0.008142188

a=0.3086b=0.3125f(a)=0.004124898f(b)=-0.008142188

a=0.3086b=0.3105f(a)=0.004124898f(b)=-0.002009781

a=0.3096b=0.3105f(a)=0.001057274f(b)=-0.002009781

x=0.310 f(x)=-0.0005

19

a=3.5

b=4

e=0.001

a=3.9000b=3.9500f(a)=-0.671472135f(b)=-0.345018737

a=3.9000b=3.9250f(a)=-0.671472135f(b)=-0.510526065

a=3.9000b=3.9125f(a)=-0.671472135f(b)=-0.591564328

a=3.9000b=3.9063f(a)=-0.671472135f(b)=-0.631658927

a=3.9000b=3.9031f(a)=-0.671472135f(b)=-0.651600629

a=3.9000b=3.9016f(a)=-0.671472135f(b)=-0.661545147

a=3.9000b=3.9008f(a)=-0.671472135f(b)=-0.666510831

x=3.900 f(x)=-0.6690