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

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

?? levenbergmarquardt.cpp

?? it is a good programe to use in nonlinear optical aspect
?? CPP
字號:
// 驗證使用Levenberg-Marquardt方法求解非線性方程組 

// OUT:	-0.315639,  	2.95443,	2.13672
//	         	0,  +(-)1.54919,	      0
//----
//----
//			    1,            5,         -4

#include <stdlib.h>					// exit函數
#include <stdio.h>
#include <math.h>


const int DIM_VARS=3;				// 方程組(未知變量)個數
const int DIM_EQUS=4;

const double EPSILON=0.000001;
const unsigned MAXITER = 10000;


void ffOfExample(double x[DIM_VARS],double F[DIM_EQUS]);
void fdOfExample(double x[DIM_VARS],double Fjac[DIM_EQUS][DIM_VARS]);
double chiSquared(double x[DIM_VARS],int equnums);
void Levenberg_Marquardt(double x[DIM_VARS], double lambda, double term_epsilon,int equnums,int varnums);
int gcpelim2( int process, double A[DIM_VARS][DIM_VARS], double xx[DIM_VARS] );
bool CheckSolvs(double x[DIM_VARS]);


int main(int argc, char *argv[])
{
	double x[DIM_VARS]={100,   500,  -100};		// 初始值

	double lambda=1;
	double term_epsilon=1e-12;


	int i = 0, count = 0;

	// 此處必須添加遍歷條件
	do {
		printf("\n迭代次數:(%d)\t中間最小值:\t", count++);
		if (count>=MAXITER) exit(1);
		for(i=0; i<DIM_VARS; i++) {
			printf("%12.9f\t",x[i]);
			x[i]+=2.5;				// 類似遺傳算法交叉、變異
		}
		Levenberg_Marquardt(x,lambda,term_epsilon,DIM_EQUS,DIM_VARS);
	} while(CheckSolvs(x)==false);	//非線性解發生陷入局部錯誤情況,繼續搜索


	printf("\n全局優化結果\t");
	for(i=0; i<DIM_VARS; i++) printf("%12.9f\t",x[i]);
	printf("\n\n");

	return 0;
}

/*用到求解非線性方程組Levenberg_Marquardt*/
void Levenberg_Marquardt(double x[DIM_VARS], double lambda, double term_epsilon,int equnums,int varnums)
{
/**
* Minimize E = sum {(y[k] - f(x[k],x)) / s[k]}^2
* @param y corresponding array of values
* @param x the parameters/state of the model
* @param vary false to indicate the corresponding x[k] is to be held fixed
* @param s2 sigma^2 for point i
* @param lambda blend between steepest descent (lambda high) and
*	jump to bottom of quadratic (lambda zero).
* 	Start with 0.001.
* @param term_epsilon termination accuracy (0.01)
* @param maxiter	stop and return after this many iterations if not done
	*/
	
	double e1;
    double e0 = chiSquared(x,equnums);		// 定精度,y1^2+...yn^2
	
    bool done = false;
	
    // g = gradient, H = hessian, d = step to minimum
    // H d = -g, solve for d
	double Fjac[DIM_EQUS][DIM_VARS];
    double H[DIM_VARS][DIM_VARS];
    double g[DIM_VARS];
    double F[DIM_EQUS];
	double na[DIM_VARS];
	
	int i,row,col;

    int iter = 0;
    int term = 0;	// termination count test
	
	
	
    do {
		ffOfExample(x,F);		// 求解當前x向量對應的函數
		fdOfExample(x,Fjac);	// -------------------Jacobi矩陣
		
		++iter;
		
		// hessian approximation
		for(row = 0; row < varnums; row++ ) 
		{
			for(col = 0; col < varnums; col++ )
			{
				H[row][col] = 0.;
				for( int i = 0; i < equnums; i++ ) 
				{
					// 此處計算 H=J'J 正確,本來是A[row][k]*B[k][col]
					// 前面的Jacobi矩陣轉置了,因此正確
					H[row][col] += Fjac[i][row]*Fjac[i][col];
				}  //equnums
			} //col
		} //row
		
		// boost diagonal towards gradient descent
		for( row = 0; row < varnums; row++ )
			H[row][row] *= (1. + lambda);
		
		// gradient
		for(row = 0; row < varnums; row++ ) 
		{
			g[row] = 0.;
			for( i = 0; i < equnums; i++ )		// 此處修改為方程個數
			{
				g[row] += Fjac[i][row]*F[i];
			}
		} //equnums
		
		
		// solve H d = -g, evaluate error at new location
		// 求解...注意解出的d存放在g的位置,
		// d也就是誤差error.
		if(gcpelim2(0,H,g)==1)
		{
			//AfxMessageBox("The x0 isn't good so the matrix Fjac is singular!");
			return ;
		}
		for(i=0;i<varnums;i++)
		{
			na[i]=x[i]-g[i];
		}
		e1 = chiSquared(na,equnums);		// 計算前后兩次運算的殘差
		
		
		// termination test (slightly different than NR)
		if (fabs(e1-e0) > term_epsilon)
		{
			term = 0;      
		}
		else
		{
			term++;
			if (term == 4)		// 連續4次滿足極小情況
				done = true;
		}
		if (iter >= MAXITER)
			done = true;
		
		// in the C++ version, found that changing this to e1 >= e0
		// was not x good idea.  See comment there.
		//
		if (e1 > e0)
		{	
			// new location worse than before
			//調節到新的引導位置,調節步長的方法與算法略有差異,單結果相同
			lambda *= 10.;
		}
		else 
		{
			// new location better, accept new parameters
			lambda *= 0.1;
			e0 = e1;
			// simply assigning x = na will not get results copied back to caller
			for( int i = 0; i < varnums; i++ ) x[i] = na[i];
		}
		
    } while(!done);
	
}

/**
   * calculate the current sum-squared-error
   * (Chi-squared is the distribution of squared Gaussian errors,
   * thus the name)
   */
/**
   * 計算當前步驟的平方和誤差
   * (高斯誤差)
   */
double chiSquared(double x[DIM_VARS],int equnums)
{
    double sum = 0.;
	double F[DIM_EQUS];

	ffOfExample(x,F);		// 求解當前x向量對應的函數

    for( int i = 0; i < equnums; i++ ) sum += F[i]*F[i];

    return sum;
} //chiSquared



// 求解結果放在xx[]向量中
int gcpelim2( int process, double A[DIM_VARS][DIM_VARS], double xx[DIM_VARS] )
{
	int k,i,j,i0;
	double pelement;
	if( process == 1 ) printf("The process of elimination\n");
	/* elimination step */
	for(k=0;k<DIM_VARS;k++)
	{
		/* for principal element*/
		// 查找主元
		pelement=fabs(A[k][k]);       i0=k;
		for(i=k;i<DIM_VARS;i++)
			if( fabs(A[i][k]) > pelement ) { pelement=fabs(A[i][k]); i0=i; }
			if( i0 != k )
			{
				for(j=0;j<DIM_VARS;j++)
				{ pelement=A[k][j]; A[k][j]=A[i0][j]; A[i0][j]=pelement; }
				pelement=xx[k]; xx[k]=xx[i0]; xx[i0]=pelement;
			}
			if( fabs(A[k][k]) < EPSILON ) return(1);
			for(i=k+1;i<DIM_VARS;i++)
			{
				A[i][k]=A[i][k]/A[k][k];
				for(j=k+1;j<DIM_VARS;j++) A[i][j]=A[i][j]-A[i][k]*A[k][j];
				xx[i]=xx[i]-A[i][k]*xx[k];
			}
			if(process == 1 )
			{
				for(i=0;i<DIM_VARS;i++)
				{
					for(j=0;j<DIM_VARS;j++) printf("%10.6f",A[i][j]);
					printf("   | %10.6f\n",xx[i]);
				}
				printf("\n");
			}
	}
	/* backward step */
	// 回溯求解
	for(i=DIM_VARS-1;i>=0;i--)
	{
		for(j=i+1;j<DIM_VARS;j++) xx[i]=xx[i]-A[i][j]*xx[j];
		xx[i]=xx[i]/A[i][i];
	}
	return(0);
}

// 此處存放非線性方程組,x為變量,F為函數值
void ffOfExample(double x[3],double F[4])
{
	F[0]=x[0]-5.0*x[1]*x[1]+7.0*x[2]*x[2]+12.0;
	F[1]=3.0*x[0]*x[1]+x[0]*x[2]-11.0*x[0];
	F[2]=2.0*x[1]*x[2]+40.0*x[0];

	F[3]=9.0*x[0]*x[0]-x[1]+x[2];
}


// 殘余運算的Jacobi矩陣,手工計算.
void fdOfExample(double x[3],double Fjac[4][3])
{
	// 此處注意和絕大多數Fortran類比,
	// 此處是行先,但存放一致

	// Fjac[i][j]=D(F[i])/D(X[j])


	Fjac[0][0]= 1.0;					Fjac[0][1]=-10.0*x[1];		Fjac[0][2]= 14.0*x[2];
	Fjac[1][0]= 3.0*x[1]+x[2]-11.0;		Fjac[1][1]= 3.0*x[0];		Fjac[1][2]= x[0];
	Fjac[2][0]= 40.0;					Fjac[2][1]= 2.0*x[2];		Fjac[2][2]= 2.0*x[1];

	Fjac[3][0] = 18.0*x[0];				Fjac[3][1] = -1.0;			Fjac[3][2] = 1.0;

}


//------------------------------------------
bool CheckSolvs(double x[DIM_VARS])
{
	bool bval;
	
	register int i;
	double F[DIM_EQUS];


	ffOfExample(x,F);		// 求方程值

	
	bval=true;

	for(i=0; i<DIM_EQUS; i++) {
		if(fabs(F[i]) > 1e-3) {
			bval=false;
			break;
		}
	}

	return bval;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本道色综合久久| 久久亚洲一级片| 日韩午夜在线影院| 欧美激情在线一区二区| 五月激情六月综合| 91在线视频18| 国产色产综合色产在线视频| 亚洲一二三专区| 成人av网在线| 国产欧美一区在线| 美女尤物国产一区| 欧美精品少妇一区二区三区| 国产精品卡一卡二卡三| 国产精品一区二区三区网站| 欧美精品乱码久久久久久| 亚洲婷婷综合久久一本伊一区| 久久精品国内一区二区三区| 欧美日本不卡视频| 一片黄亚洲嫩模| 一本到不卡精品视频在线观看| 欧美成人伊人久久综合网| 五月天国产精品| 欧美日韩视频在线观看一区二区三区 | 国产高清成人在线| 日韩免费福利电影在线观看| 日韩精品一二三四| 欧美丝袜自拍制服另类| 亚洲综合999| 色综合 综合色| 亚洲精品国产一区二区三区四区在线| 成人动漫一区二区在线| 国产精品丝袜91| av一区二区三区四区| 欧美极品美女视频| 成人h动漫精品| 国产精品久久久久久久久图文区| 国产精品1区二区.| 中文天堂在线一区| caoporn国产一区二区| 综合欧美亚洲日本| 欧美一区日本一区韩国一区| 亚洲另类春色国产| 欧美性生交片4| 日韩在线a电影| 2020国产精品| 成人免费毛片aaaaa**| 中文幕一区二区三区久久蜜桃| www.亚洲色图.com| 亚洲午夜av在线| 91精品久久久久久久99蜜桃| 精品系列免费在线观看| 国产日韩精品一区二区三区| av网站免费线看精品| 亚洲已满18点击进入久久| 欧美一区二区在线免费观看| 国产综合色在线| 日韩毛片视频在线看| 欧美日韩亚洲国产综合| 国产主播一区二区三区| 国产精品国产三级国产aⅴ入口| 一本色道久久综合亚洲精品按摩| 亚洲网友自拍偷拍| www精品美女久久久tv| 91小视频免费看| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产女人18毛片水真多成人如厕| 91偷拍与自偷拍精品| 免费在线看一区| 国产精品国产自产拍高清av| 欧美精品丝袜中出| 大尺度一区二区| 日韩精品一级二级| 最新国产成人在线观看| 日韩欧美在线不卡| 99麻豆久久久国产精品免费优播| 午夜a成v人精品| 亚洲色欲色欲www在线观看| 日韩午夜在线播放| 欧美吞精做爰啪啪高潮| 国产成a人亚洲| 美女在线一区二区| 亚洲国产一区二区a毛片| 亚洲视频免费在线观看| 精品国产百合女同互慰| 在线看一区二区| 成人免费毛片片v| 麻豆高清免费国产一区| 亚洲精品网站在线观看| 国产三级精品视频| 精品少妇一区二区三区在线视频| 91精品1区2区| 波多野结衣视频一区| 久久99在线观看| 偷窥少妇高潮呻吟av久久免费| 中文字幕欧美激情| xnxx国产精品| 欧美va亚洲va国产综合| 欧美日韩久久久一区| 色婷婷久久久久swag精品| 国产精品综合一区二区| 久久成人免费网站| 婷婷综合五月天| 午夜精品影院在线观看| 一区二区三区四区av| 国产精品理论片| 国产精品久久久久久亚洲伦 | 99精品欧美一区二区三区综合在线| 日韩成人免费在线| 亚洲va欧美va天堂v国产综合| 亚洲婷婷在线视频| 亚洲欧美另类小说| 中文字幕在线视频一区| 中文字幕一区二区三区色视频| 国产色一区二区| 国产精品热久久久久夜色精品三区 | 在线亚洲免费视频| 一本色道久久综合精品竹菊| 91在线视频18| 色欧美乱欧美15图片| 91看片淫黄大片一级| 色美美综合视频| 欧美日韩亚洲高清一区二区| 欧美日韩一区二区在线观看| 欧美日韩精品久久久| 9191精品国产综合久久久久久| 7777精品伊人久久久大香线蕉| 欧美疯狂做受xxxx富婆| 日韩一区二区三区在线视频| 精品久久国产老人久久综合| 久久精品人人爽人人爽| 国产精品色哟哟| 亚洲免费在线视频| 亚洲3atv精品一区二区三区| 无吗不卡中文字幕| 国产在线不卡一卡二卡三卡四卡| 国产成人精品免费网站| 色综合天天综合给合国产| 欧美男女性生活在线直播观看| 欧美一区二区久久久| 国产女主播一区| 亚洲午夜私人影院| 久久超碰97中文字幕| 不卡的av在线| 欧美疯狂做受xxxx富婆| 国产日韩欧美精品电影三级在线 | 亚洲一级片在线观看| 免费国产亚洲视频| 国产精品69毛片高清亚洲| 色综合视频在线观看| 日韩亚洲欧美在线观看| 国产精品素人视频| 日韩和欧美一区二区三区| 国产成人在线视频网址| 欧美性淫爽ww久久久久无| 精品日韩欧美在线| 日韩精彩视频在线观看| 六月婷婷色综合| 91在线视频免费91| 在线欧美小视频| 欧美自拍偷拍午夜视频| 91精品国产91久久久久久一区二区| 国产三级一区二区三区| 调教+趴+乳夹+国产+精品| 国产激情精品久久久第一区二区 | 国产成人免费视频精品含羞草妖精| 91在线丨porny丨国产| 日韩精品一区二区三区老鸭窝| 成人免费小视频| 精品影院一区二区久久久| 欧美在线啊v一区| 国产日韩欧美精品在线| 亚洲电影视频在线| www.爱久久.com| 久久影视一区二区| 午夜欧美大尺度福利影院在线看| 波多野结衣一区二区三区 | 欧美日韩成人在线| 蜜桃传媒麻豆第一区在线观看| 日韩午夜精品视频| 在线免费不卡电影| 欧美亚洲国产bt| 中文字幕视频一区二区三区久| 免费成人美女在线观看.| 在线观看成人小视频| 国产精品久久久久久久久果冻传媒 | 午夜电影网一区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美日韩视频在线一区二区| 亚洲视频小说图片| eeuss影院一区二区三区| 久久久久久久综合| 精品一区二区三区免费| 91精品一区二区三区久久久久久| 一区二区三区美女| 在线观看中文字幕不卡| 亚洲欧洲综合另类| 在线一区二区观看| 亚洲一区二区在线观看视频| 91成人在线精品| 亚洲国产精品久久人人爱蜜臀|