Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Березиков..М.Ук2.doc
Скачиваний:
2
Добавлен:
04.08.2019
Размер:
509.95 Кб
Скачать

Текст программы

program sls;

const g=0.618034;

var a,b,eps,xl,xr,x,yl,yr:real;

k:integer;

{ - - - - - - - - - - - - - -}

function f(x:real):real;

begin f:=sqr(((2*x-10)*x+3)*x+4)

end;

{ - - - - - - - - - - - - - -}

begin a:=3.6; b:=4.8; eps:=1e-4; k:=0;

xl:=b-(b-a)*g; yl:=f(xl);

xr:=a+(b-a)*g; yr:=f(xr);

repeat k:=k+1;

if yl<yr then

begin b:=xr;xr:=xl;yr:=yl; xl:=b-(b-a)*g; yl:=f(xl)

end else

begin a:=xl;xl:=xr;yl:=yr; xr:=a+(b-a)*g; yr:=f(xr)

end

until abs(b-a)<eps; x:=(a+b)/2;

writeln(' корень x=',x:7:4 );

writeln(' значение функции y=',f(x):6:3);

writeln('количество приближений k=',k:2);

end.

Результат

корень x=4.5768

значение функции y=0.000

количество приближений k=20

Метод дробления шага

Наиболее простой метод минимизации. В качестве исходной точки расчета принимается произвольная точка принадлежащая отрезку [a, b] . Задается начальное значение шага h и вычисляется значение функции y=f2(x).

Делается один шаг x1=x+h и вычисляется новое значение функции

y1=f2(x1). Предыдущее значение функции y и последующее значение y1

сравниваются . Если y1 < y то процесс повторяется без изменений.

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

| h |  

Недостатком метода является неопределенность выбора величины и степени уменьшения шага h, что компенсируется простотой метода.

Пример решения уравнения 2x3-10x2+3x+4=0 на отрезке [3.6, 4.8] с точностью 1 методом дробления шага.

Текст программы

program drosh;

var eps,h,x,y:real;k:integer;

{ - - - - - - - - - - - - - }

function f(x:real):real;

begin f:=sqr(((2*x-10)*x+3)*x+4)

end;

{ - - - - - - - - - - - - - }

begin eps:=1e-5;h:=1;x:=4.0; k:=0;

repeat k:=k+1;y:=f(x);x:=x+h;

if y<f(x) then h:=-h/2

until abs(h)<=eps;

writeln(' корень x=',x:7:4 );

writeln(' значение функции y=',f(x):6:3);

writeln('количество приближений k=',k:2);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]