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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2013, 15:14   #1
.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:"<<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;

// cout<<endl;

//cout<<"Result:  "<<"amin= "<<amin<<endl;

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 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод перебора, Метод дихотомии, Метод золотого сечения Delphi !!! OneBri Помощь студентам 0 03.10.2012 08:42
Не работает метод оптимизации unijkoder C# (си шарп) 1 06.03.2012 18:13
Методы оптимизации: метод Ньютона и метод наискорейшего спуска ruslanGacurap Помощь студентам 0 30.01.2012 13:54
Симплекс метод оптимизации LorenZo Помощь студентам 0 22.06.2010 19:44
задачи оптимизации kirasir Microsoft Office Excel 2 08.08.2007 00:40