《运筹学》中的单纯形方法求线性规划问题用C语言怎么算?求代码,谢谢!

Python011

《运筹学》中的单纯形方法求线性规划问题用C语言怎么算?求代码,谢谢!,第1张

#include<stdio.h>

#include<math.h>

#include<iostream.h>

float matrix[100][100],x[100] /* 记录总方程的数组,解的数组 */

int a[100] /* 记录基础,非基础的解的情况,0:非基础,1:基础 */

int m,n,s,type /* 方程变量,约束数,求最大最小值的类型,0:最小 1:最大 */

int indexe,indexl,indexg /* 剩余变量,松弛变量,人工变量 */

void Jckxj()

{

int i,j

for(i=0i<ni++)

for(j=0j<sj++)

if(matrix[i][j]==1&&a[j]==1){

x[j]=matrix[i][s]

j=s

}

for(i=0i<si++)

if(a[i]==0) x[i]=0

}

int Rj()

{

int i

for(i=0i<si++)

if(fabs(matrix[n][i])>=0.000001)

if(matrix[n][i]<0) return 0

return 1

}

int Min()

{

int i,temp=0

float min=matrix[n][0]

for(i=1i<si++)

if(min>matrix[n][i]){

min=matrix[n][i]

temp=i

}

return temp

}

void JustArtificial()

{

int i

for(i=m+indexe+indexli<si++)

if(fabs(x[i])>=0.000001){

printf("No Answer\n")

return

}

}

int Check(int in)

{

int i

float max1=-1

for(i=0i<ni++)

if(fabs(matrix[i][in])>=0.000001&&max1<matrix[i][s]/matrix[i][in])

max1=matrix[i][s]/matrix[i][in]

if(max1<0)

return 1

return 0

}

int SearchOut(int *temp,int in)

{

int i

float min=10000

for(i=0i<ni++)

if(fabs(matrix[i][in])>=0.000001&&(matrix[i][s]/matrix[i][in]>=0)&&min>matrix[i][s]/matrix[i][in]){

min=matrix[i][s]/matrix[i][in]

*temp=i

}

for(i=0i<si++)

if(a[i]==1&&matrix[*temp][i]==1) return i

}

void Mto(int in,int temp)

{

int i

for(i=0i<=si++)

if(i!=in)

matrix[temp][i]=matrix[temp][i]/matrix[temp][in]

matrix[temp][in]=1

}

void Be(int temp,int in)

{

int i,j

float c

for(i=0i<=ni++){

c=matrix[i][in]/matrix[temp][in]

if(i!=temp)

for(j=0j<=sj++)

matrix[i][j]=matrix[i][j]-matrix[temp][j]*c

}

}

void Achange(int in,int out)

{

int temp=a[in]

a[in]=a[out]

a[out]=temp

}

void Print()

{

int i,j,k,temp=0

for(i=0i<ni++){

for(k=tempk<sk++)

if(a[k]==1){

printf("X%d ",k)

temp=k+1

k=s

}

for(j=0j<=sj++)

printf("%8.2f",matrix[i][j])

printf("\n")

}

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

int main (){

int p,q,r,a1,b1,c1,a2,b2,c2,m1,n1,m2,n2,x,y,max,min,k1,k2,k3

printf("目标函数 f=px+qy+r\n输入 p=,q=,r=\n")

scanf("%d %d %d",&p,&q,&r)

printf("输入约束条件组\na1x+b1y+c1>=0\na2x+b2y+c2<=0\nm1<=x<=n1\nm2<=y<=n2\n"

"a1= b1= c1= a2= b2= c2= m1= n1= m2= n2=\n")

scanf("%d %d %d %d %d %d %d %d %d %d",&a1,&b1,&c1,&a2,&b2,&c2,&m1,&n1,&m2,&n2)

max=0

min=0

for(x=m1x<=n1x++)

{

for(y=m2y<=n2y++)

{

k1=a1*x+b1*y+c1

k2=a2*x+b2*y+c2

if(k1==0 &&k2==0)

{

k3=p*x+q*y+r

if(max<k3)

max=k3

else if(min>k3)

min=k3

break

}

}

}

printf("目标函数最大值,最小值\nf(max)=%d f(min)=%d",max,min)

system("pause")

return 0

}

C=c的转置

if(command='c')||(command='C')

m小于等于n。

if(m<=n)

其它我是用数学来算的,即利用矩形的数学算法来加入C语言算出来的。看来你是不需要的!