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

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

?? qp method.cpp

?? 測試無約束優化定理求解最小值,包括測試數據,在VC下可以實現,已經調試成功.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include<time.h> 
#include<stdlib.h> 
#include<stdio.h> 
#include<iomanip.h> 
#include<string.h>
#include<math.h> 
#include<iostream.h> 
#include<conio.h>
int set[100];                        //用來表示有效集合中是否為空,其值為有效約束的個數 
#define null 0 

/************************************矩陣的四則運算**********************************************/
double *multiply(double *q0,double *q1,int n,int m0,int m1) //m0 為矩陣 q0 的行數,m1為矩陣q1的列數 //n 為的q0的列數q1行數. //該函數返回一個指向新開辟空間的整型指針 
{ 
	int i,k,t,j; 
    double *q,total; 
    q=new double[m0*m1]; 
    total=0.0; 
    j=0; 
    for(i=0;i<m0;i++) 
		for(t=0;t<m1;t++)
		{ 
			for(k=0;k<n;k++) 
            total+=q0[i*n+k]*q1[k*m1+t]; 
            q[j]=total; 
            j++; 
            total=0.0; 
		} 
        return q;
} 

double *Div(double *matrix,double num,int total)    //matrix為被除矩陣,num為除數,total為矩陣元素數
{ 
       double *q; 
       q=new double[total]; 
       for(int t=0;t<total;t++) 
          q[t]=matrix[t]/num; 
       return q;
} 


double *sub(double *q1,double *q2,int n)
{ 
      double *q; 
      q=new double[n]; 
      for(int i=0;i<n;i++)
	  { 
		  q[i]=q1[i]-q2[i];
	  } 
      return q;
} 


double *add(double *q1,double *q2,int total)
{ 
       double *q; 
       q=new double[total]; 
       for(int i=0;i<total;i++) 
       q[i]=q1[i]+q2[i]; 
       return q;
} 


double *NumMul(double *Matrix,double Num,int n)
{  
	double *q; 
    q=new double[n]; 
    for(int t=0;t<n;t++) 
    q[t]=Num*Matrix[t]; 
    return q;
} 

/************************************矩陣的四則運算結束**********************************************/

double Find_ak(int *I,double *A,double *B,double *Xk,double *dk,int n,int m,int k)      //求ak的值,k為迭代次數
{ 
       int flag;                                     //標志是否加入到有效集中                      
       double *p,*At,ak,a0;                          //p臨時存放數據,At為對應的子矩陣,ak用于比較
	                                                 //a0存放(B-At*Xk)/At*dk的臨時結果
	   int i;
       ak=1.0; 
       cout<<"求步長時的有效約束集:"; 
       for(i=0;i<m;i++) 
            cout<<I[k*m+i]<<" "; 
       cout<<endl; 
       for(int t=0;t<m;t++)
	   { 
		   if(I[k*m+t]==-1)
		   { 
              At=new double[n]; 
              for(i=0;i<n;i++) 
              At[i]=A[i*m+t]; 
              //for(i=0;i<n;i++) 
              //cout<<At[i]<<" at "; 
              //cout<<endl; 
              //for(i=0;i<n;i++) 
              //cout<<dk[i]<<" dk "; 
              //cout<<endl; 
              p=multiply(At,dk,n,1,1); 
              //cout<<p[0]<<endl; 
              a0=p[0];
              //cout<<a0<<endl; 
              if(a0>=-0.00000001&&a0<=0.00000001) 
              continue; 
              delete []p; 
              p=multiply(At,Xk,n,1,1); 
              delete []At; 
              a0=(B[t]-p[0])/a0; 
              delete []p; 
              if(ak>a0&&a0>0)
			  { 
			      ak=a0; 
                  flag=t;
			  }
		   }
	   } 
	   cout<<"求得步長為: ";
        cout<<ak<<endl; 
        if(ak<1) 
        {
			I[k*m+flag]=flag;
			set[k]++;                                   //有效集加一個
			for(i=0;i<m;i++)                                 //X0不變
			{
                I[m*(k+1)+i]=I[m*k+i];
			}
		}
		else
		{
            for(i=0;i<m;i++)                                 
			{
                I[m*(k+1)+i]=I[m*k+i];
			}
		}
        return ak;
} 

/**********************************求解方程組部分用jacobi迭代法**********************************/

double *root(short matrixNum,double *matrixA,double *b)         //jacobi迭代解線性方程組
{
   int   i,j,m,k;
   double   TempM=0,TempMm=0,TempN=0,TempNn=0;
   double *X;
   double   L[100][100];
   double   M[100][100];
   double   N[100][1];
   for(i=0;i<matrixNum;i++)
   {
        for(j=0;j<matrixNum;j++)
		{
             M[i][j]=matrixA[i*matrixNum+j];
		}
   }
   for(i=0;i<matrixNum;i++)
   {
	   N[i][0]=b[i];
   }
   /*   求矩陣M的L陣和D陣,L陣存放在L中,D陣存放在M陣的對角元上*/
  for(i=1;i<matrixNum;i++)
  {
	  for(j=0;j<i;j++)
	  {
		  for(m=0;m<j;m++)
		  {
			  TempM=M[i][m]*L[j][m]+TempMm;
              TempMm=TempM;
              TempM=0;
		  }
        M[i][j]=M[i][j]-TempMm;
        TempMm=0;
        L[i][j]=M[i][j]/M[j][j];
	  }
  for(k=0;k<i;k++)
  {
     TempN=M[i][k]*L[i][k]+TempNn;
     TempNn=TempN;
     TempN=0;
  }
     M[i][i]=M[i][i]-TempNn;
     TempNn=0;
  }
/*求解*/
    for(i=0;i<matrixNum;i++)
	{
		for(m=0;m<i;m++)
		{
			TempM=L[i][m]*N[m][0]+TempMm;
			TempMm=TempM;
			TempM=0;
		}
       N[i][0]=N[i][0]-TempMm;
       TempMm=0;
	}
	for(i=0;i<matrixNum;i++)
	{ 
		N[i][0]=N[i][0]/M[i][i];
	}
	for(i=matrixNum-1;i>=0;i--)
	{
		for(m=i+1;m<matrixNum;m++)
		{
			TempM=L[m][i]*N[m][0]+TempMm;
			TempMm=TempM;
			TempM=0;
		}
       N[i][0]=N[i][0]-TempMm;
       TempMm=0;
	}
/*     結果     */
    X=new double[matrixNum];
    for(i=0;i<matrixNum;i++)
	{
		X[i]=N[i][0];
	}  
     return X;     
}
/********************************求解方程組結束**************************************************/
/********************************下面是組合矩陣為定理求方程解做準備******************************/
double *ConstructMatrixL(double *G,double *Ak,int n,int m)   //組合矩陣左邊
{ 
    //n為G的維數,m為A的列數,p的維數為n+m         
	//{G  A
	// AT 0};
	double *p;
	int size=n+m;
	int i,j,k;
	k=0;
	p=new double[size*size];
	for(i=0;i<n;i++)                           //裝入G
		for(j=0;j<n;j++)
		{	
			k=i*size+j;
		    p[k]=G[i*n+j];
		}
    for(i=0;i<n;i++)                           //裝入Ak
		for(j=n;j<n+m;j++)
		{	
			k=i*size+j;
			if(k%(n+m)==1)
				k=k+n;
		    p[k]=Ak[i*m+j-n];
		}
	for(i=n;i<n+m;i++)                         //裝入Ak轉置
		for(j=0;j<n;j++)
		{	
			k=i*size+j;
		    p[k]=Ak[j*m+(i-n)];
		}	                                       
    for(i=n;i<n+m;i++)                           //其余元素賦值0
		for(j=n;j<n+m;j++)
		{	
			k=i*size+j;
			if(k%(n+m)==1)
				k=k+n;
		    p[k]=0;
		}                                           
	return p;
	delete []p;
}

double *ConstructMatrixR(double *r,double *Bk,int n,int m)   //組合矩陣右邊,n為r維數,m為Bk維數
{
    double *p;
	double *temp;
	p=new double[n+m];
	temp=new double[n];
	int i;
	for(i=0;i<n;i++)
		temp[i]=-r[i];
	for(i=0;i<n;i++)
		p[i]=temp[i];
	for(i=0;i<m;i++)
		p[i+n]=Bk[i];
    return p;
	delete []p;
	delete []temp;
}
/**********************************矩陣合并結束**************************************************/
/**********************************求逆矩陣部分**************************************************/
double calDeterminant(double *s,int n)                   //按行展開,求行列式值
{
	int z,j,k;
	double r,total=0; 
	double *b;
	b=new double[(n-1)*(n-1)];
	if(n==1)
	{
		total=s[0];
	}
    if(n>2) 
	{
		for(z=0;z<n;z++) 
		{
		for(j=0;j<n-1;j++) 
			for(k=0;k<n-1;k++) 
				if(k>=z) 
					b[j*(n-1)+k]=s[(j+1)*n+k+1]; 
				else 
					b[j*(n-1)+k]=s[(j+1)*n+k]; 
				if(z%2==0) 
					r=s[z]*calDeterminant(b,n-1);  //遞歸調用 
				else  
					r=(-1)*s[z]*calDeterminant(b,n-1); 
				total=total+r; 
		} 
} 
    else if(n==2) 
		total=s[0]*s[3]-s[1]*s[2]; 
     return total; 
	 delete []b;
}

double *algebra(double *s,int n)                  //algebra()函數用于求原矩陣各元素對應的余子式,存放在數組b中,定義為double型
 {
	int z,j,k,l,m,g;
	double *a;
	double *b;
	a=new double[(n-1)*(n-1)];
    b=new double[n*n];
    for(z=0;z<n;z++) 
    {
		l=z; 
        for(j=0;j<n;j++) 
		{ 
			m=j; 
			for (k=0;k<n-1;k++) 
				for(g=0;g<n-1;g++) 
				{ 
					if(g>=m&&k<l) 
						a[k*(n-1)+g]=s[k*n+g+1]; 
					else if(g<m&&k>=l)  
						a[k*(n-1)+g]=s[(k+1)*n+g]; 
					else if(g>=m&&k>=l) 
						a[k*(n-1)+g]=s[(k+1)*n+g+1]; 
					else 
						a[k*(n-1)+g]=s[k*n+g]; 
				} 
				b[z*n+j]=calDeterminant(a,n-1); 
		} 
	} 
	return b;
} 
double *tranverse(double *a,int n)
{
   double *b; 
   b=new double[n*n];
   int z,j; 
   double r;
   double temp; 
    r=calDeterminant(a,n);                            //調用calDeterminant()函數計算原矩陣的行列式值      
    if (r==0) 
		cout<<"Because |A|==0,the original matrix have no tranverse!";  //判斷條件:若|A|==0,則原矩陣無逆矩陣,反之則存在逆矩陣 
    else 
    {
		b=algebra(a,n);                                //調用algebra() 函數,得到原矩陣各元素對應的"余子式",存放在數組b中 
        for(z=0;z<n;z++)                               //求代數余子式,此時b中存放的為原矩陣各元素對應的"代數余子式" 
           for(j=0;j<n;j++) 
              if((z+j)%2!=0 && b[z*n+j]!=0) 
				  b[z*n+j]=-b[z*n+j]; 
        for(z=0;z<n;z++)                               //對b轉置,此時b中存放的為原矩陣的伴隨矩陣 
			for(j=z+2;j<n;j++) 
			{
				temp=b[z*n+j]; 
                b[z*n+j]=b[j*n+z]; 
                b[j*n+z]=temp; 
			}
      for(z=0;z<n;z++)                                 //求逆矩陣,此時b中存放的是原矩陣的逆矩陣 
          for(j=0;j<n;j++) 
            b[z*n+j]=b[z*n+j]/r; 
	} 
	 return b;
	 delete []b;
}
/************************************************************************************************/
/***************************************用有效集法求解QP問題*************************************/ 
double *QP(double *G,double *r,double *A,double *B,double *X0,int n,int m)   //n為G的維數,m為約束條件的個數
{ 
	
	int i,j,total,y,sign,flag;         //sign用于表示是否找到了最優解
	int k=0;                           //控制迭代次數  
    double x,a,c,*gk,*matrixR,*matrixL,*ak,*bk,*p,*d,*nami,*a0,*a1,*q,*temp; //gk用于存放等價的r
	int *I;                        //I存放一指針數組k(k為迭代次數),其每一個元素都指向一個一維數組m,用于存放每個元素的有效集
	for(i=0;i<100;i++)             //開始令為空,下標靠k控制                
	{
         set[i]=0;
	}
	p=new double[n*n];
	//第一步:確定初始點,求其有效集

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜在线一二页| 日韩欧美高清一区| 亚洲国产成人va在线观看天堂| 国产91高潮流白浆在线麻豆| 视频一区二区中文字幕| 亚洲色图欧洲色图婷婷| 国产精品三级在线观看| 久久久三级国产网站| 欧美一区二区三区视频在线观看 | 国产成人在线观看免费网站| 午夜激情一区二区三区| 亚洲精品成人精品456| 国产精品久久久久一区| 国产欧美一区二区精品性色超碰| 91精品国产综合久久久久久| 欧美二区在线观看| 99久久99久久久精品齐齐| 国产亚洲精品超碰| 精品国产乱码久久久久久蜜臀| 欧美综合亚洲图片综合区| 色婷婷av一区二区三区gif| 色综合一个色综合亚洲| 亚洲成在线观看| 亚洲成av人在线观看| 亚洲午夜精品网| 天涯成人国产亚洲精品一区av| 一区二区三区高清在线| 亚洲一区二区欧美日韩| 无吗不卡中文字幕| 久久激情五月激情| 国产精品亚洲专一区二区三区 | 国产精品久久久久一区二区三区| 精品电影一区二区| 国产网红主播福利一区二区| 国产三级久久久| 亚洲特级片在线| 亚洲成人av资源| 久久国产精品99久久人人澡| 国产成人亚洲综合a∨婷婷图片| 福利视频网站一区二区三区| 91在线国产福利| 6080日韩午夜伦伦午夜伦| 日韩精品最新网址| 国产精品美女久久久久久久久久久 | 亚洲精品一二三四区| 亚洲精品高清视频在线观看| 亚洲成人午夜电影| 狠狠色狠狠色合久久伊人| 色综合中文字幕| 精品国产一区a| 亚洲精品视频一区| 国内外成人在线| 在线观看免费成人| 久久午夜国产精品| 亚洲午夜电影在线| 国产成人a级片| 777奇米成人网| 国产精品久久午夜夜伦鲁鲁| 亚洲3atv精品一区二区三区| 国产成人免费视频网站高清观看视频| 欧美aaa在线| 成人国产精品视频| 欧美一卡2卡3卡4卡| 亚洲人成在线播放网站岛国| 美日韩一区二区| 欧美中文字幕一区二区三区亚洲| 欧美一区二区三区成人| 亚洲激情自拍偷拍| 国产成人精品免费视频网站| 欧美哺乳videos| 亚洲第一激情av| 色综合久久久网| 国产拍揄自揄精品视频麻豆| 免费亚洲电影在线| 欧美日韩国产成人在线91| 亚洲天堂av一区| 波多野结衣在线aⅴ中文字幕不卡| 91精品国产乱| 香蕉影视欧美成人| 91豆麻精品91久久久久久| 亚洲欧美一区二区在线观看| 国产美女娇喘av呻吟久久| 日韩一区二区三区免费观看| 午夜精品一区二区三区三上悠亚| 99精品一区二区三区| 国产欧美日韩亚州综合| 国产精选一区二区三区| 日韩欧美一卡二卡| 青青草国产精品97视觉盛宴| 欧美亚洲动漫精品| 亚洲精品日韩专区silk| 91高清在线观看| 一区二区激情小说| 欧洲国内综合视频| 一区二区三区在线免费播放| 色天天综合色天天久久| 亚洲激情在线播放| 欧美视频三区在线播放| 亚洲第一在线综合网站| 欧美日韩一区三区四区| 亚洲午夜激情av| 偷拍自拍另类欧美| 91国偷自产一区二区开放时间 | 国产999精品久久久久久| 欧美精品一区二区不卡| 精品午夜久久福利影院 | 91精品国产一区二区人妖| 天天色天天操综合| 日韩一区和二区| 国产精品资源网| 中文字幕欧美日韩一区| 91色porny在线视频| 亚洲一区二区三区四区在线观看 | 不卡视频在线观看| 亚洲免费资源在线播放| 欧美日韩中文另类| 蜜桃一区二区三区在线观看| 国产午夜亚洲精品羞羞网站| va亚洲va日韩不卡在线观看| 一区二区欧美国产| 91精品国产一区二区三区| 韩国理伦片一区二区三区在线播放| 欧美xxxxx裸体时装秀| 丁香桃色午夜亚洲一区二区三区| 久久精品夜色噜噜亚洲a∨| 成人午夜视频在线| 一区二区三区精品在线| 日韩西西人体444www| 国产成人高清在线| 亚洲va国产天堂va久久en| 久久久午夜电影| 在线观看免费视频综合| 久久99热国产| 亚洲女同ⅹxx女同tv| 欧美一二三区在线| 色婷婷国产精品综合在线观看| 亚洲bt欧美bt精品777| 欧美sm极限捆绑bd| 偷拍日韩校园综合在线| 日韩av在线发布| www久久久久| 欧美性色aⅴ视频一区日韩精品| 婷婷开心激情综合| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 精品国产123| 成人免费看视频| 奇米888四色在线精品| 亚洲蜜臀av乱码久久精品蜜桃| 91精品国产综合久久久蜜臀图片 | 狠狠色2019综合网| 一区二区三区成人在线视频| 久久久噜噜噜久久中文字幕色伊伊 | 黑人巨大精品欧美黑白配亚洲| 国产精品久久久久久久岛一牛影视 | 日本福利一区二区| 国产91精品欧美| 美女尤物国产一区| 亚洲国产aⅴ成人精品无吗| 国产精品丝袜黑色高跟| 欧美精品一区男女天堂| 欧美性极品少妇| 91小视频免费观看| 成人精品一区二区三区四区| 紧缚捆绑精品一区二区| 香蕉乱码成人久久天堂爱免费| 国产欧美精品一区| 26uuu欧美| 26uuu亚洲| 久久综合av免费| 精品人伦一区二区色婷婷| 91.麻豆视频| 欧美人妖巨大在线| 色拍拍在线精品视频8848| 成人高清伦理免费影院在线观看| 激情久久久久久久久久久久久久久久| 中文无字幕一区二区三区| 久久久国产精品麻豆| 久久久久久影视| 精品国产精品一区二区夜夜嗨| 一区二区三区不卡在线观看 | 欧美一区二区视频在线观看| 欧美午夜精品理论片a级按摩| 不卡一区二区中文字幕| 成人黄色小视频| 91丨九色丨黑人外教| 色综合色狠狠综合色| 91在线免费播放| 欧美自拍偷拍午夜视频| 欧美视频在线播放| 欧美一区二区三区爱爱| 精品久久久久久无| 国产日韩欧美麻豆| 亚洲四区在线观看| 亚洲成av人片一区二区| 全部av―极品视觉盛宴亚洲| 美女一区二区视频| 国产精品综合在线视频| av不卡免费在线观看| 欧美特级限制片免费在线观看| 欧美性猛片xxxx免费看久爱|