Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ решение систем методом градиентов

Автор: malena 28.03.2006 13:28

Здравствуйте!!!!! Не знаю уже что и делать, всю голову себе сломала mega_chok.gif !!!Нужно решеть систему нелинейных уравнений методами градиентов и наискорейшего спуска: 4*x^2+y^2+2*x*y-y-2=0
2*x^2+3*x*y+y^2-3=0.
Если сможете помочь, буду очень благодарна.

Автор: Ozzя 28.03.2006 14:26

По http://e-docs.net.ru/articles/lowering.bls сможете написать сами?

Автор: malena 28.03.2006 14:40

Попробую!!! Спасибо за помощь!!! smile.gif

У меня файл не открывается, пишет, что "файл неверен или поврежден" blink.gif

Автор: Ozzя 28.03.2006 14:46

Приложил сюда:
Для просмотра блок-схемы понадобится также
http://alglib.sources.ru/aboutbls.php


Прикрепленные файлы
Прикрепленный файл  lowering.rar ( 2.12 килобайт ) Кол-во скачиваний: 458

Автор: malena 28.03.2006 16:28

Я сделала метод градиентов!!!!Ура! lol.gif !!! Прикрепляю файл может кому еще понадобится


А вот с наискорейшим спуском совсем плохо nea.gif !help.gif


Прикрепленные файлы
Прикрепленный файл  grad.pas ( 1.92 килобайт ) Кол-во скачиваний: 1082

Автор: Ozzя 28.03.2006 16:36

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


Прикрепленные файлы
Прикрепленный файл  opt3_.rar ( 3.7 килобайт ) Кол-во скачиваний: 719

Автор: malena 28.03.2006 17:16

Вы обо мне слишком хорошего мнения! smile.gif Она такая большая и главное ничего не понятно! Что делатьcray.gif

Автор: Ozzя 28.03.2006 17:41

Еще тут посмотрите
http://nsft.narod.ru/Programming/fastfall.html

Автор: malena 28.03.2006 20:05

Чё-то я окончательно запуталась в этом методе!Ничего не выходит wacko.gif

Автор: Ozzя 29.03.2006 11:44

malena
Вы будете смеяться unsure.gif , но та блок-схема, которую я приводил и есть метод наискорейшего спуска.
Еще методы поиска минимума: сопряженного градиента и наискорейшего спуска

http://pascal.sources.ru/math/opt.htm

Автор: malena 29.03.2006 23:02

Да,бывает! yes2.gif Но я по вашей блок-схеме ничего не делала.Спасибо за ссылку, но мне нужно не найти минимум, а решить систему. В этом вся проблема!

Автор: Smertnik7320 13.04.2010 21:57

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

#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:;
}

Автор: Lapp 13.04.2010 22:53

Круто. Встрять в чужую старинную тему с программой на С и без тэгов!.. Я пальцы устал загибать, считая нарушения.
Smertnik7320, читай правила.
Закрыто.