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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? adaptiveoptimaser.cpp

?? 路徑規劃源程序
?? CPP
字號:
//#include "StdAfx.h"
#include "AdaptiveOptimaser.h"
#ifndef USE_TRADITIONAL_AKF


CAdaptiveOptimaser::CAdaptiveOptimaser(void):m_iCovEstNum(4),m_mResidualCovStack(4),m_calResidualCoviarance(2,2)
,m_mTherioticalResCov(2,2),m_SumOfAllResCov(2,2),m_mDif_ResCov2TherResCov(2,2),m_mCovDifStack(3),m_mPreDeltaStep(2,2),
m_mAlterStepVal(2,2),m_mPreErDif(2,2),m_mNewModelNoise(4,4),m_mCurModeNoiseModStep(4,4)
//,m_dStableDifThres(2)
{
	m_iNumOfInputResidual=0;
	//m_bStableTag=false;
	m_bStableTag[0]=m_bStableTag[1]=false;
	for (int i=0;i<2;i++)
	{
		for (int j=0;j<2;j++)
		{
			m_SumOfAllResCov(i,j)=0;

			m_mPreDeltaStep(i,j)=0.9;
			m_mPreErDif(i,j)=1;
		}
	}
	for (int i=0;i<4;i++)
	{
		for (int j=0;j<4;j++)
		{
			m_mCurModeNoiseModStep(i,j)=0;
		}
	}

	//memset(m_mCurModeNoiseModStep.data(),0,m_mCurModeNoiseModStep.size1()*m_mCurModeNoiseModStep.size2());
	m_iNumOfCovDif=0;
}
CAdaptiveOptimaser::CAdaptiveOptimaser(int CovEstNum,size_t ObserveSize,size_t StateSize):m_iCovEstNum(CovEstNum),m_mResidualCovStack(CovEstNum),
m_calResidualCoviarance(ObserveSize,ObserveSize),m_mTherioticalResCov(ObserveSize,ObserveSize),m_SumOfAllResCov(ObserveSize,ObserveSize),
m_mDif_ResCov2TherResCov(ObserveSize,ObserveSize),m_mCovDifStack(3),//,m_dStableDifThres(ObserveSize)
m_mPreDeltaStep(CovEstNum,CovEstNum),m_mAlterStepVal(CovEstNum,CovEstNum),m_mPreErDif(CovEstNum,CovEstNum),m_mNewModelNoise(StateSize,StateSize),
m_mCurModeNoiseModStep(StateSize,StateSize)
{
	m_iNumOfInputResidual=0;
	for (int i=0;i<ObserveSize;i++)
	{
		for (int j=0;j<ObserveSize;j++)
		{
			m_SumOfAllResCov(i,j)=0;
	/*		m_mCurModeNoiseModStep(i,j)=0;
			m_mCurModeNoiseModStep(i+2,j+2)=0;*/
			m_mPreDeltaStep(i,j)=0.9;
			m_mPreErDif(i,j)=1;
		}
	}
	for (int i=0;i<ObserveSize+2;i++)
	{
		for (int j=0;j<ObserveSize+2;j++)
		{
			m_mCurModeNoiseModStep(i,j)=0;
		}
	}
	m_bStableTag[0]=m_bStableTag[1]=false;
	m_iNumOfCovDif=0;
}
#else
CAdaptiveOptimaser::CAdaptiveOptimaser(void):m_iCovEstNum(4),m_mResidualCovStack(4),m_calResidualCoviarance(2,2)
,m_mTherioticalResCov(2,2),m_SumOfAllResCov(2,2),m_mCovDifStack(3),m_mNewModelNoise(4,4)
//,m_mAlterStepVal(2,2),m_mPreErDif(2,2),m_mCurModeNoiseModStep(4,4),m_mDif_ResCov2TherResCov(2,2),m_mPreDeltaStep(2,2)
//,m_dStableDifThres(2)
{
	m_iNumOfInputResidual=0;
	for (int i=0;i<2;i++)
	{
		for (int j=0;j<2;j++)
		{
			m_SumOfAllResCov(i,j)=0;
		}
	}
}
#endif

CAdaptiveOptimaser::~CAdaptiveOptimaser(void)
{
}
#ifdef USE_TRADITIONAL_AKF
VARIANCE& CAdaptiveOptimaser::ModelNoiseAdapter(RESIDUAL_STYLE Residual,VARIANCE& PredictVar,VARIANCE& StateVar,matrix_type& KalmanGain)
{
	
		if(CalculateTheroticalCovOfResidual(Residual))//若計算得到理論殘差方差
		{
			//__asm int 3;
			ConventionalAdapter( PredictVar,StateVar,m_mTherioticalResCov,KalmanGain);
		}
		else
		{
			//目前沒有什么做的
		}		
		return m_mNewModelNoise;
}
#endif
#ifndef USE_TRADITIONAL_AKF
VARIANCE& CAdaptiveOptimaser::ModelNoiseAdapter(RESIDUAL_STYLE Residual, VARIANCE ResidualCoviarance)
{
	//VARIANCE QStep();
	range Line(0,2);
	range Row(0,2); 
	range Line2(2,4);
	range Row2(2,4); 
#ifdef  DEBUG_USE_FLAG
	ViewMatrix(m_mNewModelNoise);
	m_mSigma_Viewer;
#endif
	if(CalculateTheroticalCovOfResidual(Residual,ResidualCoviarance))//若計算得到理論殘差方差
	{
		if(CalculateDifOfError())//若計算得到誤差的導數
		{
//			__asm int 3;
			if ((!m_bStableTag[0])||(!m_bStableTag[1]))//更改為逐位判斷是否穩態,有一位不穩定則尋幽
			{
				for (unsigned i=0;i<m_mCurrentErDif.size1();i++)
				{
					if (!m_bStableTag[i])//不穩定
					{
					
					//for (int j=0;j<m_mCurrentErDif.size2();j++)//因m_mNewModelNoise為對角陣,故去掉此部分
					//{
						unsigned j=i;
						m_mAlterStepVal(i,j)=1+RPPOP_DeltaStepSeek(m_mCurrentErDif(i,j),m_mPreErDif(i,j),m_mPreDeltaStep(i,j));//為提高效率將matlab程序中的1+步長值放這運算了。
					}
#ifdef  DEBUG_USE_FLAG

				ViewMatrix(m_mAlterStepVal);
				m_mSigma_Viewer;
#endif
					//}
				}
				
				project(m_mCurModeNoiseModStep, Line, Row)=m_mAlterStepVal;//將結果重復組合成Q陣的變化陣
				project(m_mCurModeNoiseModStep, Line2, Row2)=m_mAlterStepVal;         
//#ifdef  DEBUG_USE_FLAG
//
//				ViewMatrix(m_mCurModeNoiseModStep);
//				m_mSigma_Viewer;
//#endif
//
//#ifdef  DEBUG_USE_FLAG
//
//				ViewMatrix(m_mNewModelNoise);
//				m_mSigma_Viewer;
//#endif
//
				m_mNewModelNoise=element_prod(m_mCurModeNoiseModStep,m_mNewModelNoise);	
				LimitModifiedModelNoise(m_mNewModelNoise);
//#ifdef  DEBUG_USE_FLAG
//
//				ViewMatrix(m_mNewModelNoise);
//				m_mSigma_Viewer;
//#endif
			}		
			OptmiseInStableCheck(m_mAlterStepVal);//判斷尋優是否穩定,本次調整步長的變化值放在
		}

	}
	else
	{
		//目前沒有什么做的
	}		
	return m_mNewModelNoise;
}

bool CAdaptiveOptimaser::CalculateTheroticalCovOfResidual(RESIDUAL_STYLE& Residual,VARIANCE ResidualCov)
{
#ifdef  DEBUG_USE_FLAG

	ViewVector(Residual);
	m_mSigma_Viewer;
#endif
	if(m_iNumOfInputResidual>=m_iCovEstNum)//已經傳了足夠多的Residual供計算的話才開始尋優
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod

		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		std::vector<VARIANCE>::iterator EndOfStack=m_mResidualCovStack.end();
//#ifdef  DEBUG_USE_FLAG
//
//		ViewMatrix(*(EndOfStack-1));
//		m_mSigma_Viewer;
//#endif
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_SumOfAllResCov=m_SumOfAllResCov-(*(--EndOfStack));//用上一次算得的和減去要擠出m_mResidualCovStack的末項,再加上新插入的項即得總和 
		m_SumOfAllResCov+=m_calResidualCoviarance;
		m_mTherioticalResCov=(m_SumOfAllResCov)/m_iCovEstNum;

		m_mResidualCovStack.pop_back();//刪除最后一個	
		/////////////////////////計算差值,并按位取絕對值/////////////////////////////////////////////////
		m_mDif_ResCov2TherResCov=ResidualCov-m_mTherioticalResCov;//ls-TheroResidulCov
		MatElemABS(m_mDif_ResCov2TherResCov);
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_mDif_ResCov2TherResCov);
		m_mSigma_Viewer;
#endif
////////////////////////////將計算出來的差值保存起來,并且總共只保存3個,因此要存一個,出一個,第一個最新的//////////////////////////////////////////////
		m_mCovDifStack.insert(m_mCovDifStack.begin(),m_mDif_ResCov2TherResCov);
		m_mCovDifStack.pop_back();//刪除最后一個h
		if (m_iNumOfCovDif>2)
		{
			return true;
		}
		else
		{
			m_iNumOfCovDif++;
			return false;
		}		
	}
	else
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod
		m_iNumOfInputResidual++;
		m_SumOfAllResCov+=m_calResidualCoviarance;
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		m_mResidualCovStack.pop_back();//刪除最后一個	
		return false;
	}
}
#endif
#ifdef USE_TRADITIONAL_AKF
bool CAdaptiveOptimaser::CalculateTheroticalCovOfResidual(RESIDUAL_STYLE& Residual)
{
#ifdef  DEBUG_USE_FLAG

	ViewVector(Residual);
	m_mSigma_Viewer;
#endif
	if(m_iNumOfInputResidual>=m_iCovEstNum)//已經傳了足夠多的Residual供計算的話才開始尋優
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod

		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		std::vector<VARIANCE>::iterator EndOfStack=m_mResidualCovStack.end();
		//#ifdef  DEBUG_USE_FLAG
		//
		//		ViewMatrix(*(EndOfStack-1));
		//		m_mSigma_Viewer;
		//#endif
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_SumOfAllResCov=m_SumOfAllResCov-(*(--EndOfStack));//用上一次算得的和減去要擠出m_mResidualCovStack的末項,再加上新插入的項即得總和 
		m_SumOfAllResCov+=m_calResidualCoviarance;
		m_mTherioticalResCov=(m_SumOfAllResCov)/m_iCovEstNum;

		m_mResidualCovStack.pop_back();//刪除最后一個	
		return true;
				
	}
	else
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod
		m_iNumOfInputResidual++;
		m_SumOfAllResCov+=m_calResidualCoviarance;
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		m_mResidualCovStack.pop_back();//刪除最后一個	
		return false;
	}
}
#endif 
#ifndef USE_TRADITIONAL_AKF

bool CAdaptiveOptimaser::CalculateDifOfError()
{
	std::vector<VARIANCE>::iterator HeadOfStack=m_mCovDifStack.begin();
//	std::vector<VARIANCE>::iterator p2Stack;
//#ifdef  DEBUG_USE_FLAG
//
//	ViewMatrix(VARIANCE(*HeadOfStack));
//	m_mSigma_Viewer;
//#endif
//#ifdef  DEBUG_USE_FLAG
//
//	ViewMatrix(VARIANCE(*(++HeadOfStack)));
//	m_mSigma_Viewer;
//#endif
	//p2Stack=HeadOfStack+1;
	size_t Size=(*HeadOfStack).size1();
	VARIANCE aTmp=(*HeadOfStack);
	VARIANCE bTmp=(*(++HeadOfStack));	
	m_mCurrentErDif=aTmp-bTmp;//當前時刻的誤差函數的導數,用差值代替,而且由于RPPOD算法僅用到了導數的符號,所以沒有考慮時間長度
	
	aTmp=*(++HeadOfStack);

	for (int i=0;i<Size;i++)
	{
		for (int j=0;j<Size;j++)
		{
			if (m_mPreErDif(i,j)!=0)//防止因外部傳遞過來的0被忽略
			{
				m_mPreErDif(i,j)=bTmp(i,j)-aTmp(i,j);//前一時刻的誤差函數的導數,用差值代替,而且由于RPPOD算法僅用到了導數的符號,所以沒有考慮時間長度
			}
		}
		
	}
	
	return true;
}
bool CAdaptiveOptimaser::OptmiseInStableCheck(VARIANCE& CovAlterStep)
{
	//double a=fabs(CovAlterStep(0,0)-1);//尋優步長的變化值即為最終步長值減去基準1
	//double b=fabs(CovAlterStep(1,1)-1);//尋優步長的變化值即為最終步長值減去基準1
	//double c=a+b;
	for (unsigned iii=0;iii<2;iii++)
	{
		double a=fabs(CovAlterStep(iii,iii)-1);//尋優步長的變化值即為最終步長值減去基準1
		if ((!m_bStableTag[iii])&&a<STABLE_THRES)// %進入穩定  
		{
			m_dStableDifThres[iii]=m_fStableDifAmplitudeParm*m_mDif_ResCov2TherResCov(iii,iii);//%記錄方差偏差的當前值*m_fStableDifAmplitudeParm作為判斷是否跳出穩定的閾值
			//m_dStableDifThres[0]=m_fStableDifAmplitudeParm*m_mDif_ResCov2TherResCov(0,0);//%記錄方差偏差的當前值*m_fStableDifAmplitudeParm作為判斷是否跳出穩定的閾值
			//m_dStableDifThres[1]=m_fStableDifAmplitudeParm*m_mDif_ResCov2TherResCov(1,1);//%記錄方差偏差的當前值*m_fStableDifAmplitudeParm作為判斷是否跳出穩定的閾值
			m_bStableTag[iii]=true;
		}
		else if (
			m_bStableTag[iii] && 
			(m_mDif_ResCov2TherResCov(iii,iii)>m_dStableDifThres[iii])
			)// %退出穩定,則重設本優化器  
		{
			m_bStableTag[iii]=false;
			m_mNewModelNoise(iii,iii)=m_mNodelNoiseOriginalVal(iii,iii);//%重置初始值,并重開始一輪尋優
			m_mNewModelNoise(iii+2,iii+2)=m_mNodelNoiseOriginalVal(iii+2,iii+2);//%重置初始值,并重開始一輪尋
			m_mPreDeltaStep(iii,iii)*=0;
			m_mPreErDif(iii,iii)*=0;
			m_mPreErDif(iii,iii)=0.9;
			m_mPreDeltaStep(iii,iii)=0.9;
			//for (int i=0;i<m_mPreErDif.size1();i++)//%重置初始值,并重開始一輪尋優
			//{
			//	m_mPreErDif(i,i)=0.9;
			//	m_mPreDeltaStep(i,i)=0.9;
			//}
		}
	}
	if (m_bStableTag[0]&&m_bStableTag[1])
	{
		return true ;//所有位都穩定則返回鎮
	}
	else
	{
		return false;
	}
	
}
#endif
bool CAdaptiveOptimaser::initAdapter(VARIANCE& NodelNoiseOriginalVal,float StableDifAmplitudeParm)
{
	m_mNodelNoiseOriginalVal=NodelNoiseOriginalVal;
	m_fStableDifAmplitudeParm=StableDifAmplitudeParm;
	m_mNewModelNoise=m_mNodelNoiseOriginalVal;

	return true;
}

// 限制模型噪聲不太大也別太小,
//bool CAdaptiveOptimaser::LimitModNoiseInSafeVal(double&ModelNoise)
//{
//
//}
// 對尋優調整的結果(模型噪聲)進行限幅,不能太大也不能太小,輸入為尋優的結果矩陣的引用
//void CAdaptiveOptimaser::LimitModifiedModelNoise(VARIANCE& ModifyResult)
//{
//
//}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆精品theporn| 精品成人一区二区三区| 91精品国产一区二区三区香蕉| 精品国产一区二区三区忘忧草| 日韩成人免费电影| 99精品视频一区| 精品国产乱码久久久久久久| 亚洲亚洲精品在线观看| 成人免费毛片aaaaa**| 精品理论电影在线| 丝袜美腿亚洲一区| 一本久久a久久免费精品不卡| 日韩精品一区二区三区四区视频| 一个色在线综合| 91在线porny国产在线看| 国产调教视频一区| 国产一区在线不卡| 日韩欧美国产综合| 久色婷婷小香蕉久久| 欧美日韩激情一区二区三区| 1000精品久久久久久久久| 国产乱码精品一区二区三区忘忧草| 欧美丰满嫩嫩电影| 日韩精品高清不卡| 欧美久久久久免费| 三级亚洲高清视频| 91精品国产一区二区三区香蕉| 亚洲一区二区在线免费看| av不卡在线观看| 亚洲人精品一区| 一本大道久久a久久综合婷婷| 国产精品视频第一区| 国产精品一线二线三线精华| 久久久精品免费网站| 国产河南妇女毛片精品久久久| 精品国产91乱码一区二区三区| 国内成人精品2018免费看| 26uuu精品一区二区在线观看| 激情综合网天天干| 久久女同精品一区二区| 国产999精品久久久久久| 欧美高清一级片在线观看| 成人福利视频网站| 亚洲女爱视频在线| 777午夜精品视频在线播放| 日本成人在线看| 久久久久久影视| 不卡欧美aaaaa| 亚洲国产精品人人做人人爽| 欧美精三区欧美精三区| 日韩av一级片| 2017欧美狠狠色| 91亚洲男人天堂| 亚洲成人一区二区| 久久这里只有精品首页| 不卡视频在线观看| 亚洲电影第三页| 精品福利一区二区三区| 成人动漫精品一区二区| 亚洲综合清纯丝袜自拍| 精品裸体舞一区二区三区| 国产高清精品在线| 亚洲电影一级黄| 久久免费看少妇高潮| 91福利在线免费观看| 日韩高清不卡一区二区三区| 精品亚洲欧美一区| 久久久噜噜噜久噜久久综合| 精品无人码麻豆乱码1区2区 | 国内精品第一页| 中文字幕欧美一| 欧美一区二区女人| 成人动漫一区二区| 奇米色一区二区| 亚洲欧美精品午睡沙发| 日韩美女视频在线| 一本久久a久久精品亚洲| 麻豆精品视频在线| 亚洲黄网站在线观看| 日韩欧美一区电影| 色婷婷综合久久久久中文| 激情综合亚洲精品| 亚洲电影在线免费观看| 国产精品区一区二区三区| 欧美狂野另类xxxxoooo| 成人v精品蜜桃久久一区| 麻豆成人免费电影| 亚洲v日本v欧美v久久精品| 欧美国产成人精品| www成人在线观看| 欧美日韩第一区日日骚| 97久久精品人人爽人人爽蜜臀 | 国内精品久久久久影院薰衣草| 最新不卡av在线| 亚洲精品第一国产综合野| 国产调教视频一区| 日韩美女一区二区三区| 9191国产精品| 欧美性色欧美a在线播放| www.亚洲精品| 岛国精品在线观看| 国产精品一区二区久激情瑜伽| 日本美女一区二区| 日韩激情一区二区| 午夜久久久影院| 亚洲一二三专区| 亚洲电影在线免费观看| 亚洲综合成人在线视频| 亚洲另类春色校园小说| 亚洲精选在线视频| 中文字幕一区二区三区精华液 | 国产福利精品导航| 国产真实精品久久二三区| 蜜桃在线一区二区三区| 蜜臀av一区二区在线观看| 欧美aⅴ一区二区三区视频| 日一区二区三区| 日本不卡一二三区黄网| 日韩激情视频网站| 麻豆国产一区二区| 精品亚洲欧美一区| 国产精品一区二区三区四区| 国产精品456| 国产成人免费视频精品含羞草妖精| 国产一区二区三区不卡在线观看| 国内精品久久久久影院薰衣草| 国产剧情一区二区三区| 成人av在线网站| 在线免费观看日本一区| 欧美人狂配大交3d怪物一区 | 欧美在线一区二区| 欧美亚洲综合一区| 欧美一区二区三区小说| 2023国产精品视频| 国产女主播一区| 亚洲人成精品久久久久久| 亚洲bt欧美bt精品777| 伦理电影国产精品| 成人免费毛片嘿嘿连载视频| 91影院在线免费观看| 欧美日韩精品欧美日韩精品一综合| 欧美一级黄色片| 国产偷v国产偷v亚洲高清| 亚洲老司机在线| 亚洲成av人**亚洲成av**| 久草精品在线观看| 99久久精品免费看| 91精品久久久久久久91蜜桃| 久久久亚洲国产美女国产盗摄 | 国产欧美一区二区精品仙草咪| 亚洲色图在线视频| 日本vs亚洲vs韩国一区三区二区 | 91在线云播放| 日韩午夜激情视频| 亚洲欧美综合网| 美女网站在线免费欧美精品| 国产精品一卡二卡| 欧美性受xxxx| 国产欧美精品一区| 日韩中文字幕1| 成人av免费在线播放| 欧美精品乱人伦久久久久久| 久久久精品黄色| 石原莉奈一区二区三区在线观看| 成人一区在线观看| 日韩色视频在线观看| 亚洲精品视频在线观看免费| 九九热在线视频观看这里只有精品| 99精品国产热久久91蜜凸| 亚洲精品在线电影| 日韩av网站免费在线| 色综合天天天天做夜夜夜夜做| 欧美精品一区二区三区蜜桃视频| 一区二区三区中文字幕| av一区二区三区黑人| 精品久久五月天| 日韩av在线发布| 精品视频全国免费看| 亚洲精品成a人| 成人精品免费网站| 国产亚洲精品aa| 九九**精品视频免费播放| 欧美日韩国产精品自在自线| 亚洲精品乱码久久久久久久久 | jlzzjlzz欧美大全| 国产色综合久久| 国产综合色在线| 精品国产一区二区三区四区四| 天天影视涩香欲综合网 | 日韩欧美一级二级三级| 亚洲地区一二三色| 欧美在线观看视频在线| 一级精品视频在线观看宜春院| 成人h动漫精品| 国产精品久线观看视频| 成人在线一区二区三区| 国产精品久久久久四虎| 成人av电影在线播放| 18成人在线观看| 一本大道久久a久久综合婷婷|