Лабораторная работа №5 По дисциплине: Вычислительная математика



Дата22.02.2016
өлшемі44.5 Kb.
#258
түріЛабораторная работа
Министерство Российской Федерации по связи и информатизации
Сибирский Государственный Университет Телекоммуникаций и Информатики
Межрегиональный центр переподготовки специалистов

Лабораторная работа № 5

По дисциплине: Вычислительная математика



Выполнил:

Группа:
Проверил:

2011
Написать программу для нахождения максимального значения функции на отрезке [0, 0.5] методом золотого сечения с точностью 0.0001. Считается, что требуемая точность достигнута, если выполняется условие, (e – заданная точность, ak, bk – границы интервала неопределенности, k = 0,1,2,… ), при этом, ,

N – последняя цифра пароля = 1.
Программа

Максимум найден не верно. Минимум искать не требовалось.

Исходный код программы
program Lab5;
uses

crt;


const

N=1;


a0=0;

b0=0.5;


e=0.0001;

{функция из условия}

function f(x:real):real;

begin


f:=exp(sqrt(x))*(x-1)*(x-10)*(x-1-N)*(x-0.5);

end;
var

x1,x2,f1,f2,b,a,x:real;

begin


clrscr; {ищу max}

a:=a0; {начальный интервал}

b:=b0;

x1:=0.618*a+0.382*b; {выбираю точки на интервале}



x2:=0.382*a+0.618*b;

f1:=f(x1); {нахожу в точках значения}

f2:=f(x2);

while (b-a)>e do {цикл поиска максимума с погрешность е}

begin

if f1>f2 then {функция возрастает}



begin

b:=x1; {передвигаю границы интервала}Не туда

F2:=f1;

x2:=x1;


x1:=0.618*a+0.382*b; {нахожу новую точку на интервале}

f1:=f(x1); {ее значение}

end

else


begin {функция убывает}

a:=x2; {передвигаю границы интервала} Не туда

f1:=f2;

x1:=x2;


x2:=0.382*a+0.618*b; {нахожу новую точку на интервале}

f2:=f(x2); {ее значение}

end;

end;


x:=(b+a)/2; {значение максимум}

writeln('Максимум:');

writeln('x=',x:3:3); {вывожу результат}

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

{поиск минимума такой же только меняю знак сравнения}

a:=a0;


b:=b0;

x1:=0.618*a+0.382*b;

x2:=0.382*a+0.618*b;

f1:=f(x1);

f2:=f(x2);

while (b-a)>e do

begin

if f1

begin

b:=x1;


F2:=f1;

x2:=x1;


x1:=0.618*a+0.382*b;

f1:=f(x1);

end

else


begin

a:=x2;


f1:=f2;

x1:=x2;


x2:=0.382*a+0.618*b;

f2:=f(x2);

end;

end;


x:=(b+a)/2;

writeln;


writeln('Минимум:');

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



writeln('y=',f(x):3:3);
readln;

end.

Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет