Министерство Российской Федерации по связи и информатизации
Сибирский Государственный Университет Телекоммуникаций и Информатики
Межрегиональный центр переподготовки специалистов
Лабораторная работа № 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.
Достарыңызбен бөлісу: |