![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Catty |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
вот программа которую я написала по тому алгоритму который дал нам препод на лекции
но почему то она не исправно работает! помогите найти ошибку!! Код 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! |
Romtek |
![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
А как должно быть?
Я отформатировал код, а то uses Sysutils;
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;
writeln (FloatToStr(y1));
readln;
End.
Сообщение отредактировано: Romtek - 11.09.2005 19:10 -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
Romtek |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Кстати, а что такое
b := b; и a := a; ? ![]() -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
Romtek |
![]()
Сообщение
#4
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Есть сомнение также насчёт записи самой функции:
ты уверена, что F(x) = 5 * (sin(x))^2 - (1 / (x^2 + 1)) + 4; ? -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
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.
|
Romtek |
![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
volvo
Это, конечно, хорошо, но ты привёл свой рабочий пример, а Catty просила найти ошибку в её примере. Надо учиться на своих ошибках, иначе никакого результата не будет. Цитата(Catty) a := x1;
b := b;
x2 := a+s*(b-a);
b := x2;
a := a;
x2 := x1;
Цитата(моя) Кстати, а что такое b := b; и a := a; ? А теперь хорошо взглянуть на реализацию в коде, приведённом volvo. ![]() -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
Catty |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
бррррр так тихо давай те раберемся
Romtek я же сказала что написала прогу по блок-схеме которую дал на лекции препод, так что претензии не ко мне! Спсибо что отформатировал код! ![]() у Volvo хороший код, только я не поняла что такое l := x2-a ?? -------------------- 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! |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Catty, а вот это:
l := b-a;
ты поняла? ;) l := x2-a;
...
l := b-x1;
- это вычисление длины интервала на каждом очередном шаге, чтобы разбить его на 2 части согласно алгоритму "золотого сечения" :yes: |
Catty |
![]()
Сообщение
#9
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
да я это поняла после того как написала предыдущее сообщение!!
![]() Спасибо всем ребята за помощь! :flowers: :molitva: -------------------- 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! |
![]() ![]() |
![]() |
Текстовая версия | 7.08.2025 6:20 |