亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? simplex.cpp

?? 改進(jìn)的單純形算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//單純形法類cpp文件
//Edit by Wang Shimin
//2004.8.25~2004.9.10
//本文件為最新文件,修改于2006.3.12

// Simplex.cpp: implementation of the Simplex class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Simplex.h"
#include "math.h"
#include "fstream"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Simplex::Simplex()
{
	/*	初始化參數(shù)值 */
	m_precisionnum = 0; /* 連續(xù)多少步不進(jìn)化則終止 */
	m_maxnumlap = 10;   /* 最大循環(huán)次數(shù) */
	m_numlap = 1;       /* 循環(huán)次數(shù) */
	m_precision = 0.000001;  /* 收斂精度 */

//	m_sidelength = 1.0;  /* 單純形邊長 */
	m_oldfitness = 0.0; /* 上一步最優(yōu)目標(biāo)值 */
//	m_parametereq = (sqrt((double)m_numvar+1.0)+(double)m_numvar-1.0)/((double)m_numvar*sqrt(2.0))*m_sidelength;   /* 參數(shù)Q */
//	m_parameterep = m_parametereq-m_sidelength/sqrt(2.0);   /* 參數(shù)P */
	m_parameterep = 0.1; /* 參數(shù)P */
	m_parametereq = 0.2;/* 參數(shù)Q */
	m_alfa = 1.0;   /* 反射系數(shù),大于0 */
	m_beta = 0.5;   /* 收縮系數(shù),大于0,小于1 */
	m_gamma = 1.0;  /* 延伸系數(shù),大于0 */

	/*將指針置零*/
	p_Bndload = NULL;
	p_BAKindflag = NULL;
	p_iparameter = NULL;
	p_jparameter = NULL;
	m_constriction = NULL;
	p_prolongation = NULL;
	p_center = NULL;
	p_echo = NULL;
	p_variable = NULL;
	p_bestobjvalue = NULL;
	p_fitness = NULL;
	p_observation = NULL;
	p_calculation = NULL;

	m_blErrorExit = false;
}

Simplex::~Simplex()
{
	/*釋放內(nèi)存空間*/
	for(int i=0; i<=m_numvar; i++)
	{
		delete[]p_variable[i];
	}
	delete[]p_variable;

	delete[]m_constriction;
	delete[]p_prolongation;
	delete[]p_center;
	delete[]p_echo;
	delete[]p_bestobjvalue;
	delete[]p_fitness;
	delete[]p_observation;
	delete[]p_calculation;
	delete[]p_BAKindflag;
	delete[]p_iparameter;
	delete[]p_jparameter;
 	delete[]p_Bndload;
}

/* 計(jì)算 */
void Simplex::Compute()
{
	/* 初始化函數(shù) */
	Initialization();
	if(m_blErrorExit)return;
	
	while(Criterion())
	{
		m_oldfitness = m_lowvalue;
		/* 反射 */
		Echo();
		if(m_blErrorExit)return;

		if(fabs((m_oldfitness-m_lowvalue)/m_oldfitness)<m_precision)
			m_precisionnum++;
	
		/* 輸出反分析優(yōu)化結(jié)果 */
		WriteResult();
		if(m_blErrorExit)return;

		m_numlap++;
	}
}

/* 初始化函數(shù) */
void Simplex::Initialization()
{
	double ** pobjvalue;     /* 存儲目標(biāo)值,計(jì)算值與觀測值之間的差值  */
	pobjvalue = NULL;

	CString csBaaFileName = mGcsFileName+_T(".BAA");
	ifstream cBaaFile;
	cBaaFile.open((LPCSTR)csBaaFileName); 
	if (cBaaFile.fail())
	{
		AfxMessageBox("Cannot open input BAA file!!!",MB_OK);
		m_blErrorExit = true;
		return;
	}
	
	int itemp;
	cBaaFile >> itemp;
	cBaaFile >> m_numvar;   /* 待反演參數(shù)的個(gè)數(shù) */
	cBaaFile.close();


	CString csMEAFileName = mGcsFileName+_T(".MEA");
	ifstream cMEAFile;
	cMEAFile.open((LPCSTR)csMEAFileName); 
	if (cMEAFile.fail())
	{
		AfxMessageBox("Cannot open input MEA file!!!",MB_OK);
		m_blErrorExit = true;
		return;
	}
	
	cMEAFile >> m_numpoint;  /* 從MEA文件中讀取觀測點(diǎn)的個(gè)數(shù) */
	cMEAFile.close();

	int i,j;

	/* 為存儲識別待反演參數(shù)性質(zhì)的數(shù)組分配內(nèi)存空間 */

	if(p_BAKindflag)
		delete[]p_BAKindflag;

	if(p_iparameter)
		delete[]p_iparameter;

	if(p_jparameter)
		delete[]p_jparameter;

	p_BAKindflag = new int[m_numvar];
	p_iparameter = new int[m_numvar];
	p_jparameter = new int[m_numvar];

	/* 存儲量測值與計(jì)算值之差 */
	if(pobjvalue)
		delete[]pobjvalue;
	pobjvalue = new double *[m_numvar+1]; 
	for(i=0; i<=m_numvar; i++)
		pobjvalue[i]=new double[m_numpoint];
	/* 存儲量測值與計(jì)算值之差 */

	/* 為單純形分配動(dòng)態(tài)內(nèi)存空間 */
	if(p_variable)
		delete[]p_variable;
	p_variable = new double *[m_numvar+1];

	for(i=0; i<=m_numvar; i++)
		p_variable[i]=new double[m_numvar];

	/* *********** 建立初始單純形 ************* */
	
	/* 從BAA文件中讀入初始點(diǎn) */
	ReadBAA();
	if(m_blErrorExit)return;

	/* 形成單純形 */
	for(i=1; i<=m_numvar; i++)
	{
		for(j=0; j<m_numvar; j++)
		{
			if(j==(i-1))
				p_variable[i][j] = p_variable[0][j]*(1.0+m_parameterep);
			else
				p_variable[i][j] = p_variable[0][j]*(1.0+m_parametereq);
		}
	}

	if(m_constriction)
		delete[]m_constriction;
	m_constriction = new double[m_numvar];  /* 為收縮點(diǎn)變量分配動(dòng)態(tài)內(nèi)存空間 */

	if(p_prolongation)
		delete[]p_prolongation;
	p_prolongation = new double[m_numvar];  /* 為延伸點(diǎn)變量分配動(dòng)態(tài)內(nèi)存空間 */

	if(p_center)
		delete[]p_center;
	p_center = new double[m_numvar];  /* 為中心點(diǎn)變量分配動(dòng)態(tài)內(nèi)存空間 */

	if(p_echo)
		delete[]p_echo;
	p_echo = new double[m_numvar];   /* 為反射點(diǎn)變量分配動(dòng)態(tài)內(nèi)存空間 */ 

	if(p_bestobjvalue)
		delete[]p_bestobjvalue;
	p_bestobjvalue = new double[m_numpoint]; /* 存儲量測值與計(jì)算值之差 */
	
	if(p_fitness)
		delete[]p_fitness;
	p_fitness = new double[m_numvar+1]; /* 存儲單純形中的目標(biāo)值 */

	if(p_observation)
		delete[]p_observation;
	p_observation = new double[m_numpoint]; /* 存儲觀測值 */
	
	if(p_calculation)
		delete[]p_calculation;
	p_calculation = new double[m_numpoint]; /* 存儲計(jì)算值 */

	/* 讀入測點(diǎn)的觀測值 */
	ReadMEA();
	if(m_blErrorExit)return;

	for(i=0; i<=m_numvar; i++)
	{
		p_fitness[i] = 0.0;

		/* 將參數(shù)存儲到文件 */
		WriteToFem(p_variable[i]);
		if(m_blErrorExit)return;
		/* 有限元計(jì)算 */
		ObjFunction();
		if(m_blErrorExit) return;
		/* 讀入測點(diǎn)的計(jì)算值 */
		ReadFromFem(p_calculation);
		if(m_blErrorExit)return;
		
		/* 計(jì)算測點(diǎn)的觀測值與計(jì)算值之差的平方和,即一組參數(shù)的目標(biāo)值 */
		for(j=0; j<m_numpoint; j++)
		{
			pobjvalue[i][j] = p_observation[j]-p_calculation[j];
			p_fitness[i] += pow(pobjvalue[i][j],2.0);
		}
	}
	
	/* 求最大值和最小值 */
	m_highvalue = p_fitness[0];
	m_lowvalue = p_fitness[0];
	m_highnumber = 0;
	m_lownumber = 0;
	
	for(i=1; i<=m_numvar; i++)
	{
		if(p_fitness[i]>m_highvalue)
		{
			m_highvalue = p_fitness[i];
			m_highnumber = i;
		}
		
		if(p_fitness[i]<m_lowvalue)
		{
			m_lowvalue = p_fitness[i];
			m_lownumber = i;
		}
	}
	
	m_oldfitness = m_lowvalue;
	
	for(i=0;i<m_numpoint;i++)
	{
		p_bestobjvalue[i] = pobjvalue[m_lownumber][i];
	}
	
	delete [] pobjvalue;
}

/* 判別函數(shù) */
bool Simplex::Criterion()
{
	bool flag;
	flag = TRUE;

	if((m_numlap>m_maxnumlap)||(m_precisionnum>0))
		flag = FALSE;

	return flag;
}

/* 反射 */
void Simplex::Echo()
{
	int i,j;
	double sum;
	double * peobjvalue;
	peobjvalue = new double[m_numpoint];
	bool flag;
	flag=TRUE;

	/* 求最大值和最小值 */
	m_highvalue = p_fitness[0];
	m_lowvalue = p_fitness[0];
	m_highnumber = 0;
	m_lownumber = 0;

	for(i=1; i<=m_numvar; i++)
	{
		if(p_fitness[i]>m_highvalue)
		{
			m_highvalue = p_fitness[i];
			m_highnumber = i;
		}
		
		if(p_fitness[i]<m_lowvalue)
		{
			m_lowvalue = p_fitness[i];
			m_lownumber = i;
		}
	}
	
	for(i=0; i<m_numvar; i++)
	{
		sum = 0.0;
		
		for(j=0; j<=m_numvar; j++)
			sum += p_variable[j][i]-p_variable[m_highnumber][i];
	
		p_center[i] = fabs(sum/double(m_numvar));

		if(p_variable[m_highnumber][i]>p_variable[m_lownumber][i])
			p_echo[i] = p_variable[m_lownumber][i]-m_alfa*p_center[i];
		else
			p_echo[i] = p_variable[m_lownumber][i]+m_alfa*p_center[i];
	}

	/****************** 求中心點(diǎn)的目標(biāo)值 *******************/

	/* 將參數(shù)存儲到文件 */
	WriteToFem(p_center);
	if(m_blErrorExit)return;
	/* 有限元計(jì)算 */
	ObjFunction();
	if(m_blErrorExit) return;
	/* 讀入測點(diǎn)的計(jì)算值 */
	ReadFromFem(p_calculation);
	if(m_blErrorExit)return;
	
	m_centervalue = 0.0;

	/* 計(jì)算測點(diǎn)的觀測值與計(jì)算值之差 */
	for(i=0; i<m_numpoint; i++)
		m_centervalue += pow((p_observation[i]-p_calculation[i]),2.0);

	/****************** 求中心點(diǎn)的目標(biāo)值 *******************/

	/****************** 求反射點(diǎn)的目標(biāo)值 *******************/

	/* 將參數(shù)存儲到文件 */
	WriteToFem(p_echo);
	if(m_blErrorExit)return;
	/* 有限元計(jì)算 */
	ObjFunction();
	if(m_blErrorExit) return;
	/* 讀入測點(diǎn)的計(jì)算值 */
	ReadFromFem(p_calculation);
	if(m_blErrorExit)return;
	
	m_echovalue = 0.0;

	/* 計(jì)算測點(diǎn)的觀測值與計(jì)算值之差 */
	for(i=0; i<m_numpoint; i++)
	{
		peobjvalue[i] = p_observation[i]-p_calculation[i];
		m_echovalue += pow(peobjvalue[i],2.0);
	}

	/****************** 求反射點(diǎn)的目標(biāo)值 *******************/
	
	if(m_echovalue<=m_lowvalue)
	{
		/* 去掉原來的最大值點(diǎn),取而代之以原來的最小點(diǎn),
		并用反射點(diǎn)替換單純形中目標(biāo)值最小的點(diǎn) */
		for(i=0; i<m_numvar; i++)
		{
			p_variable[m_highnumber][i] = p_variable[m_lownumber][i];
			p_variable[m_lownumber][i] = p_echo[i];
		}

		p_fitness[m_highnumber] = p_fitness[m_lownumber];
		m_highvalue = m_lowvalue;

		p_fitness[m_lownumber] = m_echovalue;
		m_lowvalue = m_echovalue;
		
		for(i=0;i<m_numpoint;i++)
		{
			p_bestobjvalue[i] = peobjvalue[i];
		}
		
		/* 延伸 */
		Prolongation();
		if(m_blErrorExit)return;
	}
	else
	{
		for(i=0; i<m_numvar; i++)
		{
			if((i!=m_highnumber)&&(p_fitness[i]>m_echovalue))
				flag=FALSE;
		}
		
		if(flag=TRUE)
		{
			if(m_echovalue>=m_highvalue)
			{
				/* 收縮 */
				Constriction();
				if(m_blErrorExit)return;
			}
			else
			{
				/* 用反射點(diǎn)替換單純形中目標(biāo)值最大的點(diǎn) */
				for(i=0; i<m_numvar; i++)
					p_variable[m_highnumber][i] = p_echo[i];
				
				p_fitness[m_highnumber] = m_echovalue;
				m_highvalue = m_echovalue;
				
				/* 收縮 */
				Constriction();
				if(m_blErrorExit)return;
			}
		}
		else
		{
			/* 用反射點(diǎn)替換單純形中目標(biāo)值最大的點(diǎn) */
			for(i=0; i<m_numvar; i++)
				p_variable[m_highnumber][i] = p_echo[i];
			
			p_fitness[m_highnumber] = m_echovalue;
			m_highvalue = m_echovalue;
		}
	}

	delete [] peobjvalue;
}

/* 延伸 */
void Simplex::Prolongation()
{
	int i,flag;

	flag = 0;

	double * ppobjvalue;
	ppobjvalue = new double[m_numpoint];
	
    for(i=0; i<m_numvar; i++)
	{
		if(p_variable[m_highnumber][i]>p_variable[m_lownumber][i])
			p_prolongation[i] = p_variable[m_lownumber][i]-m_gamma*p_center[i];
		else
			p_prolongation[i] = p_variable[m_lownumber][i]+m_gamma*p_center[i];
	}
	
	/* 將參數(shù)存儲到文件 */
	WriteToFem(p_prolongation);
	if(m_blErrorExit)return;
	/* 有限元計(jì)算 */
	ObjFunction();
	if(m_blErrorExit) return;
	/* 讀入測點(diǎn)的計(jì)算值 */
	ReadFromFem(p_calculation);
	if(m_blErrorExit)return;
	
	m_prolongationvalue = 0.0;
	
	/* 計(jì)算測點(diǎn)的觀測值與計(jì)算值之差 */
	for(i=0; i<m_numpoint; i++)
	{
		ppobjvalue[i] = p_observation[i]-p_calculation[i];

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲天堂a在线| 国产精品久久久久一区二区三区| 日本一区二区免费在线观看视频| 日韩在线观看一区二区| 972aa.com艺术欧美| 久久久久久毛片| 免费在线观看不卡| 91精品国产91热久久久做人人| 一区二区不卡在线视频 午夜欧美不卡在| 国产东北露脸精品视频| 国产亚洲欧美日韩俺去了| 国产a久久麻豆| 国产精品久久一级| 日韩精品一区二区三区老鸭窝| 日本麻豆一区二区三区视频| 精品国产免费久久| 国产精品一线二线三线| 国产精品欧美久久久久无广告| jlzzjlzz亚洲女人18| 国产精品夫妻自拍| 久久中文娱乐网| 91啪九色porn原创视频在线观看| 亚洲综合偷拍欧美一区色| 欧美日韩一卡二卡三卡| 午夜影院久久久| 欧美sm美女调教| 成人久久久精品乱码一区二区三区| 欧美激情一区二区三区全黄| 一本高清dvd不卡在线观看| 一区二区三区波多野结衣在线观看 | 丁香六月综合激情| 久久国产精品一区二区| 欧美国产综合一区二区| 精品动漫一区二区三区在线观看| 777久久久精品| 国产大陆亚洲精品国产| 日本在线不卡一区| 亚洲第一av色| 亚洲午夜激情网站| 欧美刺激午夜性久久久久久久| 欧美日韩在线不卡| 欧美三级在线播放| 欧美日韩电影一区| 成人福利视频在线| 免费成人你懂的| 日本不卡一二三| 美女视频黄免费的久久| 亚洲激情自拍视频| 久久精品免费在线观看| 久久久久久久久久美女| 久久精品一区二区三区av| 欧美精品一区二| 国产婷婷一区二区| 中文字幕不卡的av| 综合激情成人伊人| 亚洲一级电影视频| 日日夜夜免费精品| 久久超碰97中文字幕| 国产精品一二三在| 99免费精品在线| 欧美亚日韩国产aⅴ精品中极品| 国产精品一区二区在线观看网站 | 最新中文字幕一区二区三区| 日韩一区二区三区视频在线观看| 成人黄色电影在线 | 亚洲三级久久久| 一区二区三区在线免费播放| 亚洲网友自拍偷拍| 久久精品国产久精国产爱| 国产精品一区二区免费不卡| 99精品偷自拍| 在线成人免费观看| 欧美日韩五月天| 日韩片之四级片| 国产欧美日韩精品a在线观看| 国产精品久久久久久久久动漫 | 亚洲欧美另类久久久精品| 精品国产亚洲在线| 欧美极品另类videosde| 一区二区欧美在线观看| 美日韩一区二区| 成人av网站在线| 欧美人与z0zoxxxx视频| 久久久高清一区二区三区| 亚洲精品日韩一| 美女一区二区久久| 成人黄页毛片网站| 欧美日韩国产综合一区二区三区| 精品处破学生在线二十三| 亚洲青青青在线视频| 免费不卡在线视频| 色综合天天综合色综合av| aaa欧美日韩| 欧美一区二区免费| 中文字幕字幕中文在线中不卡视频| 亚洲大片免费看| 成人午夜免费视频| 日韩欧美亚洲国产另类| 日本欧美加勒比视频| 99久久精品99国产精品| 日韩精品在线一区二区| 一区二区三区四区亚洲| 国产成人精品一区二区三区四区| 欧美日韩一区二区三区不卡| 中文成人av在线| 麻豆免费看一区二区三区| 在线观看亚洲成人| 91国产福利在线| 欧美精品乱码久久久久久按摩| 欧美极品xxx| 久久精品999| 欧美日韩久久一区| 亚洲欧美另类久久久精品| 成人国产精品视频| 精品国产91洋老外米糕| 水野朝阳av一区二区三区| 一本到三区不卡视频| 国产精品欧美综合在线| 国产精品一级片在线观看| 精品国产一区二区三区忘忧草| 亚洲电影一级黄| 在线一区二区三区| 综合久久久久综合| 不卡免费追剧大全电视剧网站| 精品久久久久久久久久久院品网| 五月激情综合色| 精品影视av免费| 成人国产亚洲欧美成人综合网| 精品91自产拍在线观看一区| 日韩av一区二区在线影视| 欧美日本一区二区| 亚洲影院久久精品| 91国产成人在线| 一区二区不卡在线视频 午夜欧美不卡在 | 日韩欧美一卡二卡| 污片在线观看一区二区| 欧美日韩久久久一区| 亚洲精品乱码久久久久久久久| 成人av影视在线观看| 国产人久久人人人人爽| 国产成人在线观看| 国产视频不卡一区| 成人一区在线看| 国产精品乱码一区二区三区软件 | 激情小说欧美图片| 色婷婷av一区二区三区软件| 亚洲欧美一区二区久久| 99re热这里只有精品视频| 国产精品国产成人国产三级 | 午夜伊人狠狠久久| 在线成人av网站| 日产欧产美韩系列久久99| 欧美一区二区三区男人的天堂| 免费一级欧美片在线观看| 日韩欧美一级二级三级久久久| 美女视频一区二区三区| 久久婷婷久久一区二区三区| 国产福利91精品一区二区三区| 欧美国产日韩亚洲一区| 99久久精品免费精品国产| 亚洲欧美日韩综合aⅴ视频| 在线免费观看日本欧美| 日韩电影在线一区二区三区| 日韩视频在线你懂得| 国产高清在线观看免费不卡| 中文字幕在线播放不卡一区| 色欧美日韩亚洲| 日本aⅴ免费视频一区二区三区| 精品久久免费看| 99视频在线精品| 午夜精品久久久久久久蜜桃app| 欧美一区二区三区色| 国产风韵犹存在线视精品| 一区二区日韩av| 久久看人人爽人人| 在线日韩国产精品| 蜜桃视频一区二区| 国产精品伦理在线| 欧美一级一区二区| 国产suv精品一区二区6| 亚洲444eee在线观看| 国产亚洲一区二区三区四区| 色婷婷av一区二区三区gif| 久久国产精品色| 亚洲欧美日韩国产综合在线 | 亚洲伦理在线精品| 欧美一区二区三区免费在线看| 国产成人精品一区二| 日韩精品91亚洲二区在线观看 | 欧美三片在线视频观看 | 精品一区二区在线视频| 自拍偷拍国产精品| 日韩一区二区三区av| av不卡一区二区三区| 强制捆绑调教一区二区| 亚洲欧美日韩国产中文在线| 欧美大肚乱孕交hd孕妇| 色哟哟国产精品| 国产精品一二三四五| 同产精品九九九|