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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2012, 21:57   #1
$ereg@
Новичок
Джуниор
 
Регистрация: 18.12.2010
Сообщений: 2
По умолчанию Симплекс-метод (с++)

Добрый вечер, пожалуйста ответьте на вопросы:
1) Где в программе вычисляется вершины симплекса?
2) Как происходит "отражение" точки симплекса относительно центра тяжести?
3) Где в программе реализовано дробление симплекса?
4) При выполнении какого условия вычисления завершаются?

Спасибо!!!
Код:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h>

using namespace std;
long int t=0;
long double fx(long double x1,long double x2);
long double gradfx(long double x1,long double x2,short int r);
int i,j;
int main()

{
	cout<<"Metod simpleksa"<<endl;
	long double **x = new  long double *[2];
    for(int p=1;p<3;p++)
		x[p]=new long double[200];
	x[1][0]=-8;
	x[2][0]=-4;
	long double r=2.5, e=0.0003;
	x[1][1]=x[1][0];
	x[2][1]=x[2][0];
	x[1][2]=x[1][0];
	x[2][2]=x[2][0];
	//cout<<"x11="<<x[1][1]<<"  x21="<<x[2][1]<<endl;
	//cout<<"x12="<<x[1][2]<<"  x22="<<x[2][2]<<endl;
	long double *y=new long double[4];		//y3=y
	y[0]=fx(x[1][0],x[2][0]);
	y[1]=fx(x[1][1],x[2][1]);
	y[2]=fx(x[1][2],x[2][2]);
	long double c1,c2,u1,u2;
	int l1,l2;
	metka:
	l1=0,l2=0;
	for(int i=0;i<3;i++)
	{
		if(y[i]<y[l1]) l1=i;
	}
	for(int j=0;j<3;j++)
	{
		if(y[j]>y[l2]) l2=j;
	}

	if(r>e)
	{
		c1=0,c2=0;
		for(int i=0;i<3;i++)
			if(i!=l2)
			{
				c1=x[1][i];c2=x[2][i];
			}
			c1/=2;    c2/=2;
			u1=2*c1-x[1][l2];
			u2=2*c2-x[2][l2];
			y[3]=fx(u1,u2);
			//построение нового симплекса
			if(y[3]<y[l2])
			{
				x[1][l2]=u1;x[2][l2]=u2;y[l2]=y[3];
				cout<<""<<x[1][l2]<<","<<x[2][l2]<<endl;
			}
			else
			{   //cout<<"u1="<<u1<<"  u2="<<u2<<endl;
				for(int i=0;i<3;i++)
					if(i!=l1)
					{
						x[1][i]=(x[1][i]+x[1][l1])/2;
						x[2][i]=(x[2][i]+x[2][l1])/2;
						y[i]=fx(x[1][i],x[2][i]);
	//					cout<<""<<x[1][i]<<","<<x[2][i]<<endl;
					}
					r=r/2;
			}
			goto metka;
	}
	else
	{
		long double minx1,minx2,minf;
		minx1=x[1][l1];
		minx2=x[2][l1];
		minf=y[l1];
		cout<<"x1="<<minx1<<" x2="<<minx2<<" f(x1,x2)="<<minf<<endl;
		//cout<<"N="<<t<<endl;
		getch();
		return(0);
	}
}
long double fx(long double x1,long double x2)
{
	t++;
	long double f;
	f=(pow((x1),2))+(pow((x2),2));
	return(f);
}
$ereg@ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Симплекс метод BeZone Помощь студентам 1 24.11.2012 18:25
Симплекс метод kobe8241 Помощь студентам 0 01.12.2011 15:14
симплекс метод ASPknopixx Помощь студентам 1 16.05.2011 22:08
симплекс метод bakir Помощь студентам 3 11.04.2011 16:35
Симплекс метод bakir Помощь студентам 0 04.12.2009 00:39