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

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

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

 
 Ответить  Открыть новую тему 
> спуск по антиградиенту
DeeMas
сообщение 19.04.2007 21:34
Сообщение #1


Гость






Люди помогите решить задачу,
условие выглядит так - найти экстремум двух функций при спуске по антиградинту.
Заранее очень благодарен.
 К началу страницы 
+ Ответить 
samec
сообщение 20.04.2007 5:18
Сообщение #2


Бывалый
***

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

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


вот пара ссылок в тему: Яндекс - найдётся всё smile.gif и Градиентные методы

М
samec, не лучше ли промолчать, если нечего сказать?..
Обучать пользованью поисковиками будешь на другом форуме! И если тема в разделе Паскаль - Задачи, то нужно ли давать ссылки на общую теорию? mad.gif
Lapp

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 20.04.2007 6:32
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(DeeMas @ 19.04.2007 22:34) *

найти экстремум двух функций при спуске по антиградинту.

Как это "экстремум двух функций"? Может, экстремум функции двух переменных?
ПОжалуйста, выражайся точнее и полнее.
И вообще - что тебя интересует? Прога на паскале? Начни, покажи тут наработки, мы поможем.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 20.04.2007 13:18
Сообщение #4


Бывалый
***

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

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


ладно, попробую исправиться.
Вот программа на паскале, находит экстремум функции : F(z1,z2)=exp(z1*z1+z2*z2)+2*z1-3,5*z2

program gradien;
uses crt;
type vec=array[1..8] of real;
var
i,k,n:integer;
e,a,r,f0:real;
z:vec;

function F(var z:vec):real; {функция}
begin
r:=exp(sqr(z[1])+sqr(z[2]));
F:=r+2*z[1]-3.5*z[2];
end;

procedure G(var z,p:vec); {градиент}
begin
r:=2*r;
p[1]:=z[1]*r+2;
p[2]:=z[1]*r-3.5;
end;
{спуск}
procedure GRAD(e,a:real;var n,k:integer; var f0:real;var z:vec);
var
b:boolean;
l:integer;
r,f1:real;
p,y:vec;
begin
k:=1;
f0:=F(z);
b:=true;
repeat
l:=1;
if b then
begin
f1:=f0;
G(z,p);
for i:=1 to n do
y[i]:=z[i];
end
else a:=a/2;
for i:=1 to n do
begin
r:=a*p[i];
z[i]:=y[i]-r;
if abs®>e then l:=0;
end;
k:=k+1;
f0:=f(z);
b:=f0<f1;
until l=1;
end;

begin
clrscr;
write('n,e,a? ');
readln(n,e,a);
for i:=1 to n do
begin
write('z(',i,')? ');
readln(z[i]);
end;
GRAD(e,a,n,k,f0,z);
for i:=1 to n do
writeln('z(',i,')=',z[i]:1:10);
writeln('F=',F0:1:10,' IT=',k);
readkey;
end.



n - кол-во переменных в функции (в нашем случае две)
e- погрешность
a - начальный шаг спуска
z1,z2 - начальная точка

и результаты работы проги:
n,e,a? 2
0.0001
0.2
z(1)? 0
z(2)? 0
z(1)=-0.4116900475
z(2)=0.8258770912
F=-1.3706464633 IT=18
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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