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

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

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

> решение систем методом градиентов, решение систем методом градиентов
malena
сообщение 28.03.2006 9:28
Сообщение #1





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

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


Здравствуйте!!!!! Не знаю уже что и делать, всю голову себе сломала mega_chok.gif !!!Нужно решеть систему нелинейных уравнений методами градиентов и наискорейшего спуска: 4*x^2+y^2+2*x*y-y-2=0
2*x^2+3*x*y+y^2-3=0.
Если сможете помочь, буду очень благодарна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
Smertnik7320
сообщение 13.04.2010 17:57
Сообщение #2





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

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


помогите плиз исправить ошибки
программа написана на С++ "Метод скорейшего спуска"

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 2
#define K 2
int l;
float absgrad,el,h,hl,z,s[N+1], x[N+1];
float f (float x[N+1])
{float a,b,y;
a=x[1]*x[1]+x[2]-11;
b=x[1]+x[2]*x[2]-7;
y=a*a+b*b;
return y;}
void graddirection (void)
{float gradx, grady;
gradx=(4*x[1]*x[1]*x[1]+4*x[1]*x[2]+2*x[2]*x[2]-42*x[1]-14);
grady=4*x[2]*x[2]*x[2]+4*x[1]*x[2]+2*x[1]*x[1]-
26*x[2]-22;
absgrad=sqrt(gradx*gradx+grady*grady);
if(absgrad !=0)
{s[1]=gradx/absgrad;
s[2]=grady/absgrad;
};
};
void scanforonedim (void)
{short a;
float dl,zl;
z=f(x);
graddirection();
do
{dl=fabs(hl);
for (i=l;i<=N;i++) x[i]+=hl*s[i];
zl=f(x);
a=(zl<z);
if(!a) hl/=-K;
z=zl;
}
while (a||dl>=el);
}
void pausa()
{printf("\n Нажмите любую клавишу для продолжения ...\n");
getch();
}
void outputresult(void)
{clrscr();
printf("Вектор приближения (O1,O2) на данном шаге");
printf ("вычислений N");
printf ("x1=%f x2=%f\n",x[1],x[2]);
printf("f(x1,x2)=%\n",f(x));
pausa();
}
void main()
{float d,t;
char finish;
clrscr();
printf("Введите координаты начального");
printf("вектора xl,x2)\n");
for (i=l; i<=N;i++) scanf ("%f",&x[1]);
graddirection();
if(!absgrad)
{printf("Стационарная точка x1=%f",x[1]);
printf("x2=%f",x[2]
);
pausa(); goto flnish;};
printf( "Задайте точность");
printf("нахождения точки min f(x)\n");
scanf("%f",&e);
outputresult(); h=0.2; el=e/K;
do

{d=fabs(h);
hl=h; scanforonedim();
outputresult();
h/=K;
}
while (d>=e);
printf ("Точка минимума xl=%f x2=%f\n",x[l],x[2]);
printf (" Погрешность =%f\n",d);
pausa();
finish:;
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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