![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
DeeMas |
![]()
Сообщение
#1
|
Гость ![]() |
Люди помогите решить задачу,
условие выглядит так - найти экстремум двух функций при спуске по антиградинту. Заранее очень благодарен. |
samec |
![]()
Сообщение
#2
|
|||
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Реальное имя: Юра Репутация: ![]() ![]() ![]() |
вот пара ссылок в тему: Яндекс - найдётся всё
![]()
|
|||
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
найти экстремум двух функций при спуске по антиградинту. Как это "экстремум двух функций"? Может, экстремум функции двух переменных? ПОжалуйста, выражайся точнее и полнее. И вообще - что тебя интересует? Прога на паскале? Начни, покажи тут наработки, мы поможем. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
samec |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Реальное имя: Юра Репутация: ![]() ![]() ![]() |
ладно, попробую исправиться.
Вот программа на паскале, находит экстремум функции : 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(r)>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 |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 2:41 |