c语言线性规划求解函数 c语言线性代数方程组求解( 三 )


double data[MAX][MAX];//A,b,c,v都存储在data里面
void PIVOT( vectorint N, vectorint B, int l ,int e);
void simple( vectorint N, vectorintB);
int main(int argc, char* argv[])
{
//将标准行转换为松弛型
//未知数个数
const int nX = 3;
//不等式个数 ,第一行为目标函数
const int nEquation = 4;
int i = 0, j = 0, k = 0;
vectorintB,N;
double arr[ nEquation + 1 ][nX + 1 ] = {
{ 2, -3, 3,0},{1, 1, -1, 7}, {-1, -1, 1, -7}, {1, -2, 2, 4}
};
//N
for( k = 1; k = nX; k++)
N.push_back( k);
//B
for( ; knX + nEquation; k++)
B.push_back( k);
n = nX + nEquation ;
memset( data, 0, sizeof(int) * n * n);
//c
for( i = 1; in; i++)
if( i = nX) data[0][i] = arr[0][i - 1];
else data[0][i] = 0;
//A
for( i = nX + 1; in; i++)
{
for( j = 1; j = nX ; j++)
{
data[i][j] = arr[ i - nX][j -1];
//coutdata[i][j]"\t";
}
}
//b
for( i = nX + 1; in; i++)
data[i][0] = arr[ i - nX][nX];
simple( N,B);
return 0;
}
void simple( vectorint N, vectorintB)
{
for( int j = 1; j = n; j++)
{
if(data[0][j] = 0) continue;
double minBound = unbounded;
int minIndex = 0;
for( vectorint::iterator i = B.begin(); i != B.end(); i++)
{
if( data[*i][j] = 0)continue;
double temp = data[*i][0] / data[*i][j];
if( tempminBound)
{
minBound = temp;
minIndex = *i;
}
}
if( minBoundunbounded - 1)
cout "Unbounded"endl;
else
PIVOT( N, B,minIndex, j);
}
for( int i = 1 ; i = n ; i++)
if( find(B.begin(), B.end(),i) != B.end() )
cout"x"i"= "data[i][0]endl;
else
cout"x"i"= "0 endl;
}
//N是非基本变量,B是基本变量
void PIVOT( vectorint N, vectorint B, int l ,int e)
{
data[e][0] = data[l][0] / data[l][e];
vectorint::iteratorj;
for( j = N.begin(); j != N.end(); j++)
{
if( *j == e)continue;
data[e][*j] = data[l][*j] / data[l][e];
}
data[e][l] = 1/ data[l][e];
for( vectorint::iterator iter = B.begin(); iter != B.end(); iter++)
{
if( *iter == l) continue;
data[*iter][0] -= data[*iter][e] * data[e][0];
for( vectorint::iterator it = N.begin(); it != N.end(); it++)
{
if( *it == e)continue;
data[*iter][*it] -= data[*iter][e] * data[e][*it];
}
data[*iter][l] = -1 * data[*iter][l] * data[e][l];
}
//Computer the objective function
data[0][0] += data[0][e] * data[e][0];
for( j = N.begin(); j != N.end(); j++)
{
if( *j == e) continue;
data[0][*j] -= data[0][e] * data[e][*j];
}
data[0][l] = -1 * data[0][e] * data[e][l];
//Compute new sets of basic and nonbasic variables.
vectorint::iterator temp_it = find( N.begin(), N.end(), e);
if( temp_it != N.end() ) N.erase( temp_it);
N.push_back(l);
temp_it = find( B.begin(), B.end(), l);
if( temp_it != B.end() ) B.erase( temp_it);
B.push_back(e);
}
线性规划问题,求解求这个线性规划问题,可以用matlabc语言线性规划求解函数的最小值函数fmincon 。fmincon极小值函数适应用于求约束非线性多变量函数的最小值 。该问题求解方法如下:
1、建立目标函数c语言线性规划求解函数,即
【c语言线性规划求解函数 c语言线性代数方程组求解】z=80*x11+90*x12+75*x13+60*x21+85*x22+95*x23+92*x31+80*x32+110*x33;
2、建立约束函数c语言线性规划求解函数 , 即
ceq(1)=100-(x11+x12+x13);
ceq(2)=170-(x21+x22+x23);
ceq(3)=200-(x31+x32+x33);
ceq(4)=120-(x11+x21+x31);
ceq(5)=170-(x12+x22+x32);
ceq(6)=180-(x13+x23+x33);
3、用fmincon函数求解c语言线性规划求解函数,即

推荐阅读