Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2011, 18:56   #1
маленький монстрик
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию итерации методом градиента

Здрасте всем! прошу помощи с программкой. :( Она решается по определенному алгоритму (если надо будет - вышлю).

Задание: Выполните итерации методом градиента для следующей задачи: min F(x)=(x2-x1 2)2+(1-x1)2 , x0=(x01;x02)=(-2;1), h0=1, v=0.7

Цитата:
Program Grad;
Uses Crt, Printer;
var E,x1,x2,kx1,kx2,dR,dx1,dx2,h,norma, yk,yx,s1,s2,r1,r2,g:real;
k,k1:integer;
const v=0.7;

Procedure dx(x1,x2:real);
var g,dx1,dx2:real;
begin
dx1:=((-4*x1)*(x2-(sqr(x1)))-2*(1-x1));
dx2:=(2*(x2-(sqr(x1))));
g:=(sqrt(sqr(dx1))+(sqr(dx2)));
end;

function f(x1,x2:real):real;
begin
f:=(sqr(x2-(sqr(x1)))+(sqr(1-x1)));
end;

function s(r1,r2:real):real;
begin
s:=r1-r2;
end;

function N(h,g:real):real;
begin
N:=v*h*g;
end;

begin
writeln ('vvedite nachalnoe priblizhenie:');
write('X0=');
readln(x1);
write('X0=');
readln(x2);
write ('zadaite nachalnii shag h=');
readln(h);
write('zadaite tochnost E=', E:7:6);
write('nachalnoe priblizhenie x=(',x1:5:3,',',x2:5:3,').');
writeln('*****Rezultati rascheta*****');
writeln('');
k:=1;
dx(x1,x2);
writeln('dR/dx=[',dx1:5:3,'].');
norma:=n(h,g);
writeln('NORMA=',norma:8:6);

begin
repeat
k1:=0;
writeln(k:4,'-ya iterachiya:');
writeln(k1:4,'-i shag',k:4,'-i iterachii:');
s1:=dx1/g;
s2:=dx2/g;
kx1:=x1+h*s1;
kx2:=x2+h*s2;

r1:=(sqr(x2-(sqr(x1)))+(sqr(1-x1)));
r2:=(sqr(kx2-(sqr(kx1)))+(sqr(1-kx1)));

if norma<s(r1,r2) then

h:=v*h;
x1:=kx1;
x2:=kx2;

writeln('h=', h:5:3,'x1=',kx1:4,'x2=',kx2:4);
Yk:=(kx1);
yx:=(kx2);
inc(k);
inc(k1);
until norma<=E;
end;
writeln ('Zadannoe znachenie yavlyaetsya resheniem');
writeln('Reshenie zadachi:minF(x)=');
readln (yk);
Readln(yk);
writeln('x=[',x1:5:3,';',x2:5:2,';','],');
writeln('Zadannaya tochnost dostignyta na ',k:4,'-i'+'iteracii');
readln;
end.
в каком то месте прога циклится , хоть убейте, не могу понять почему(((
маленький монстрик вне форума Ответить с цитированием
Старый 03.01.2011, 19:03   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Трудно понатыкать везде?

Код:
Writeln(Участок номер [i]. Нажми для продолжения...); Readln;
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 03.01.2011, 19:25   #3
маленький монстрик
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

"везде" конкретней можно?
маленький монстрик вне форума Ответить с цитированием
Старый 03.01.2011, 19:32   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Ты писал:

Цитата:
в каком то месте прога циклится , хоть убейте, не могу понять почему(((
Я предлагаю найти "где она циклиться" понатыкав в интересующих местах строку:

Код:
Writeln('Участок номер [i]. Нажми для продолжения...'); Readln;
Доходя до этой строки программа выдаст что до этой точки она дошла. Как только программа зациклиться, ты сможешь посмотреть номер последней пройденой точки и уже будешь знать где конкртено идёт зацикливание.

----------------------------------

Код:
begin
Writeln('Участок номер 1. Нажми для продолжения...'); Readln;
writeln ('vvedite nachalnoe priblizhenie:');
write('X0=');
readln(x1);
write('X0=');
readln(x2);
Writeln('Участок номер 2. Нажми для продолжения...'); Readln;
write ('zadaite nachalnii shag h=');
readln(h);
write('zadaite tochnost E=', E:7:6);
write('nachalnoe priblizhenie x=(',x1:5:3,',',x2:5:3,').');
writeln('*****Rezultati rascheta*****');
Writeln('Участок номер 3. Нажми для продолжения...'); Readln;
writeln('');
k:=1;
dx(x1,x2);
writeln('dR/dx=[',dx1:5:3,'].');
norma:=n(h,g);
writeln('NORMA=',norma:8:6);

begin - ??
repeat
k1:=0;
writeln(k:4,'-ya iterachiya:');
writeln(k1:4,'-i shag',k:4,'-i iterachii:');
s1:=dx1/g;
s2:=dx2/g;
kx1:=x1+h*s1;
kx2:=x2+h*s2;
.....
И проверь ещё раз свой код....
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 03.01.2011, 19:39   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

norma в цикле не меняется, условие всегда ложно - цикл вевчый
p51x вне форума Ответить с цитированием
Старый 03.01.2011, 19:39   #6
маленький монстрик
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

Спасибо) щас попробую)
маленький монстрик вне форума Ответить с цитированием
Старый 03.01.2011, 19:43   #7
маленький монстрик
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

поменяла некоторые части программы:

Program Grad;
Uses Crt;
var E,x1,x2,kx1,kx2,dR,dx1,dx2,h,norma, yk,yx,s1,s2,r1,r2,g,hh,ss,f1,N1:rea l;
k,k1:integer;
const v=0.7;



Procedure f(x1,x2:real);
begin
f1:=(sqr(x2-(sqr(x1)))+(sqr(1-x1)));
end;

procedure dx(dx1,dx2:real);
begin
dx1:=((-4*x1)*(x2-(sqr(x1)))-2*(1-x1));
dx2:=(2*(x2-(sqr(x1))));
g:=(sqrt(sqr(dx1))+(sqr(dx2)));
end;

Procedure s(r1,r2:real);
begin
ss:=r1-r2;
end;

Procedure sr(s1,s2:real);
begin
s1:=((-4*x1)*(x2-(sqr(x1)))-2*(1-x1))/g;
s2:=dx2/g;
end;
Procedure N(h,g:real);
begin
N1:=v*h*g;
end;

begin
writeln ('vvedite nachalnoe priblizhenie:');
write('X0=');
readln(x1);
write('X0=');
readln(x2);
write ('zadaite nachalnii shag h=');
readln(h);
writeln('*****Rezultati rascheta*****');

k:=1;

repeat
k1:=0;
writeln(k:4,'-ya iterachiya:');
writeln(k1:4,'-i shag',k:4,'-i iterachii:');
dx(dx1,dx2);
sr(s1,s2);

kx1:=x1+h*s1;
kx2:=x2+h*s2;

writeln ('s=');
readln(s1,s2);

s(r1,r2);
r1:=(sqr(x2-(sqr(x1)))+(sqr(1-x1)));
r2:=(sqr(kx2-(sqr(kx1)))+(sqr(1-kx1)));



Writeln('Ó÷àñòîê íîìåð [i]. Íàæìè äëÿ ïðîäîëæåíèÿ...'); Readln;

if N1<ss then

h:=v*h;
x1:=kx1;
x2:=kx2;
hh:=h;
h:=hh;


writeln('h=', h:1:3,'x1=',kx1:3:3,'x2=',kx2:3:3);
Yk:=(kx1);
yx:=(kx2);
inc(k);
inc(k1);
until N1<=ss;

writeln ('Zadannoe znachenie yavlyaetsya resheniem');
writeln('Reshenie zadachi:minF(x)=');
readln (yk);
Readln(yk);
writeln('x=[',x1:5:2,';',x2:5:2,';','],');
writeln('Zadannaya tochnost dostignyta na ',k:4,'-i'+'iteracii');
readln;
end.


теперь при проверке выделенные строки вообще проскакивают(((


пожалуйста, помогите, иначе точно пойду покупать веревку и мыло(

Последний раз редактировалось маленький монстрик; 03.01.2011 в 20:27.
маленький монстрик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ методом итерации (Pascal) mambr Помощь студентам 9 08.02.2011 21:29
Подсчет градиента яркости (математический расчет градиента) Hellrazah Помощь студентам 0 04.06.2010 20:21
Решение СЛАУ методом простой итерации (Delphi) giga_person Помощь студентам 8 06.03.2010 21:11
Программа решения СЛУ методом простой итерации (Delphi) giga_person Помощь студентам 4 25.02.2010 23:03