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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2013, 13:15   #1
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию Из консоли на форму (программа нахождения экстремума функции методом наискорейшего спуска)

Здравствуйте, у меня есть программа нахождения экстремума функции методом наискорейшего спуска в консоли С++ и в делфи(с формой). Помогите написать эту программу в С++ с формой, если не сложно.

В Делфи:
grad.rar
.FROST. вне форума Ответить с цитированием
Старый 17.06.2013, 13:18   #2
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию

Код в С++
Код:
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <iomanip.h>
#include <stdio.h>
#include <ctype.h>
#include <strstrea.h>
struct znach_x
{double x1,x2;
};
int N0=0,N1=0;
double f(double x1,double x2)
{double y;
N0++;
y=25*x1+0.9*x2+exp(0.35*pow(x1,2)+0.35*pow(x2,2));
return y;
}
double dfx1(double x1,double x2)
{double y;
N1++;
y=25+0.7*x1*exp(0.35*pow(x1,2)+0.35*pow(x2,2));
return y;
}
double dfx2(double x1,double x2)
{double y;
N1++;
y=0.9+0.7*x2*exp(0.35*pow(x1,2)+0.35*pow(x2,2));
return y;
}
void naisk_spusk()
{const int L=1500;
znach_x x[L];
znach_x x_;
double a,a1,a2,f1,f2,amin,eps,z1,z2,y1,d,y_,A,B,da,y2;
int k,i,N1,N,N0;
cout<<"Vvedite bazovuyu tochku:/n"<<endl;
cout<<"x0(x1,x2) ";cout<<endl;
cout<<"x1 = ";
cin>>x[0].x1;
cout<<"x2 = ";
cin>>x[0].x2;
cout<<"Vvedite tochnost':\n";
cout<<"eps = "; cin>>eps;
cout<<"Vvedite da:\n";
cout<<"da = "; cin>>da;
k=0;
N0=0;
z1=25+0.7*x[0].x1*exp(0.35*(pow(x[0].x1,2)+pow(x[0].x2,2)));
z2=0.9+0.7*x[0].x2*exp(0.35*(pow(x[0].x1,2)+pow(x[0].x2,2)));
N1=2;
m2:
 
y1=25*x[k].x1+0.9*x[k].x2+exp(0.35*(pow(x[k].x1,2)+pow(x[k].x2,2)));
//cout<<"y1= "<<y1<<endl;
i=0;
m1:
y2=25*(x[k].x1-((i+1)*da)*z1)+0.9*(x[k].x2-((i+1)*da)*z2)+exp(0.35*(pow((x[k].x1-((i+1)*da)*z1),2)+pow((x[k].x2-((i+1)*da)*z2),2)));
//cout<<"y2= "<<y2<<endl;
N0++;
if (y2<y1) {i++;y1=y2;goto m1;}
       else {B=(1+i)*da;
      if (i>0) A=(i-1)*da;
           else A=0;
      }
//cout<<"A="<<A<<" B="<<B<<endl;
 
//dich
d=eps/100;
 do
   {a=(A+B)/2.0;
    a1=a-d;
    a2=a+d;
    f1=25*(x[k].x1-a1*z1)+0.9*(x[k].x2-a1*z2)+exp(0.35*(pow((x[k].x1-a1*z1),2)+pow((x[k].x2-a1*z2),2)));
    f2=25*(x[k].x1-a2*z1)+0.9*(x[k].x2-a2*z2)+exp(0.35*(pow((x[k].x1-a2*z1),2)+pow((x[k].x2-a2*z2),2)));
    N=0;
    N=N+2;
    cout<<"a1 = "<<a1<<" f1 = "<<f1<<endl;
    cout<<"a2 = "<<a2<<" f2 = "<<f2<<endl;
    if (f1<f2) B=a2;
       else A=a1;
    }
   while (B-A>2*eps);
amin=(A+B)/2.0;
x[k+1].x1=x[k].x1-amin*z1;
x[k+1].x2=x[k].x2-amin*z2;
z1=25+0.7*x[k+1].x1*exp(0.35*(pow(x[k+1].x1,2)+pow(x[k+1].x2,2)));
z2=0.9+0.7*x[k+1].x2*exp(0.35*(pow(x[k+1].x1,2)+pow(x[k+1].x2,2)));
N1=N1+2;
if ((sqrt(z1*z1+z2*z2))>eps) {k=k+1; goto m2;}
    else {x_=x[k+1];
      y_=25*x_.x1+0.9*x_.x2+exp(0.35*(pow(x_.x1,2)+pow(x_.x2,2)));
     N=N1+N0;
     }
cout<<"Result:\n";
cout<<"x_(x1,x2) = x_( "<<x_.x1<<","<<x_.x2<<" )"<<endl;
cout<<"y_ = "<<y_<<endl;
cout<<"Kol-vo icpitanii: N1 = "<<N1<<endl;
cout<<"Kol-vo icpitanii: N0 = "<<N0<<endl;
cout<<"Kol-vo icpitanii: N = "<<N<<endl;
cout<<"Kol-vo iteracii: k = "<<k<<endl;
}
void main()
{int j;
 
while (true)
{clrscr();
cout<<endl;
cout<<"1.Naisk. spusk\n";
cout<<"0.Vihod iz programmi\n";
cout<<endl;
cout<<"Vash vibor 0 or 1: "; cin>>j;
switch(j)
{
case 1:naisk_spusk();getch(); break;
case 0: cout<<"GoodBy!"; getch();exit(0);
default:{cout<<"Net takogo punkta!";exit(1);}
getch(); }
 
}
 }
.FROST. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод наискорейшего спуска в 3D(виснет программа) .FROST. Мультимедиа в Delphi 10 23.04.2013 13:57
Метод наискорейшего спуска RocBoy-D Помощь студентам 0 26.03.2013 18:05
Поиск экстремума функции методом Фибоначчи naty7773 Помощь студентам 0 19.11.2012 16:15
Метод наискорейшего спуска Михаил1800 Помощь студентам 1 19.07.2011 13:30
Алгоритм наискорейшего спуска для любого количества аргументов целевой функции Evil Sun Общие вопросы C/C++ 5 08.05.2009 13:18