IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Метод золотого сечения
Catty
сообщение 11.09.2005 16:39
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 239
Пол: Женский
Реальное имя: Юлия

Репутация: -  3  +


вот программа которую я написала по тому алгоритму который дал нам препод на лекции
но почему то она не исправно работает! помогите найти ошибку!!
Код

const
e=0.1;
s=0.618;
var
a,b,xz,x1,x2,y1,y2,f1,f2:real;
i:integer;
begin
a:=0;
b:=10;
x1:=a+(1-s)*(b-a);
x2:=a+s*(b-a);
f1:= 5*sin(x1)*sin(x1)-1/(sqr(x1)+1)+4;
f2:= 5*sin(x2)*sin(x2)-1/(sqr(x2)+1)+4;;
repeat
begin
if f1>f2 then
begin
a:=x1;
b:=b;
x2:=a+s*(b-a);
f1:=f2;
f2:= 5*sin(x2)*sin(x2)-1/(sqr(x2)+1)+4;;
end
else
begin
b:=x2;
a:=a;
x2:=x1;
x1:=a+(1-s)*(b-a);
f2:=f1;
f1:=   5*sin(x1)*sin(x1)-1/(sqr(x1)+1)+4;
end;
end;
until (b-a)<e;

xz:=(a+b)/2;
y1:=  5*sin(xz)*sin(xz)-1/(sqr(xz)+1)+4;;

Label1.Caption:=FloatToStr(y1);

end;
end.


--------------------
For every evil under the sun
There is a remedy or there is none
If there is one - try to find it
If there is none - never mind it!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 11.09.2005 22:37
Сообщение #2


Гость






Catty, вот, нашел у себя реализацию "золотого сечения". Эта реализация (при хорошо подобранном интервале [a, b]) дает правильное значение локального минимума функции...
function f(x: double): double;
begin
result := 5 * sqr(sin(x)) - (1/(sqr(x) + 1)) + 4
end;

var
a, b, x1, x2: double;
f_x1, f_x2: double;
l: double;

const
sigma = 0.01;
begin

a := -5;
b := 10;

l := b-a;
x1 := a+l*0.3819660113; x2 := a+l*0.6180339887;
f_x1 := f(x1); f_x2 := f(x2);

while(l > sigma) do begin
if f_x1 < f_x2 then begin
l := x2-a; b := x2; x2 := x1; x1 := a+l*0.3819660113;
f_x2 := f_x1; f_x1 := f(x1);
end
else begin
l := b-x1; a := x1; x1 := x2; x2 := a+l*0.6180339887;
f_x1 := f_x2; f_x2 := f(x2);
end
end;
writeln('x = ', (b+a)*0.5, ' f(x) = ', f((b+a)*0.5));
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 5:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"