⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 danchun.c

📁 最优控制中单纯形表格法和梯度法
💻 C
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define Len1 100
#define Len2 100
void main()
{   int ok;
	float b_inequality;
	int k;
	int k_number;
	int i,j;
	int i_number,j_number;
	int m,n;  

	float max_negative;//找到负值
	float min_b;
	int find_row;
	int find_collum;
	float find_result;
	float change;
	int	  change_number[Len2];
	int   change_num=0;
	float *p1;   

	float a[Len1];
	float b[Len2][Len2],c[Len2][Len2];
	float result[Len2];

	p1=a;
	printf("输入系数个数:");
	scanf("%d",&k_number);

	for(k=0;k<k_number;k++)
	{
		printf("输入f(x)第 %d 个系数:",k);
		scanf("%f",p1);
		p1=p1+1;
	}
/************************不等式*********************************/
	printf("输入不等式个数:");
	scanf("%d",&i_number);
	printf("输入不等式左边和右边总共需要输入的个数:");
	scanf("%d",&j_number);
	printf("\n");
	for(i=0;i<i_number;i++)
	{

		for(j=0;j<j_number;j++)
		{
		printf("输入第 %d 个不等式第 %d 个元素:",i,j);
		scanf("%f",&b_inequality);
		b[i][j]=b_inequality;
		}
	}
	printf("\n");
/***************************表***************************************/
	for(m=0;m<i_number;m++)
	{
		for(n=0;n<i_number+j_number;n++)
		{
			if(n<j_number-1)
		    c[m][n]=b[m][n];
			else if(n==i_number+j_number-1)
			c[m][n]=b[m][j_number-1];
			else if(n==j_number+m-1)
			c[m][n]=1;
			else
			c[m][n]=0;
		}     
	}
	m=i_number;
	for(n=0;n<i_number+j_number;n++)
	{
		if(n<j_number-1)
			c[m][n]=- *(p1+n);
		else
			c[m][n]=0;
	}
	for(m=0;m<i_number+1;m++)
	{
		for(n=0;n<i_number+j_number;n++)
		printf("%f,",c[m][n]);
	       printf("\n");
	}
	printf("\n");
/////////////////////////////////////////////////////////////////////////////
	start:
//
	m=i_number;

	for(n=0;n<j_number-1;n++)
	{
		if(c[m][n]<0)
			goto action;
	}
	goto exit;

	action:        
	m=i_number;
	max_negative=c[m][0];
	find_row=0;
	for(n=0;n<j_number-1;n++)           
	{
	     if(c[m][n] < max_negative)
	     {	max_negative=c[m][n];
			find_row=n;
			
	     }
	}

	n=i_number+j_number-1;

	for(m=0;m<i_number;m++)  
	{
	   c[m][n]=c[m][n]/ c[m][find_row];


	}
	n=i_number+j_number-1;
	min_b= c[0][n];
	find_collum=0;
	for(m=0;m<i_number;m++)      
	{	if( c[m][n]<min_b)
		{
		min_b= c[m][n];
		find_collum=m;
		change_number[change_num++]=find_collum+j_number-1;
		}
	}

	n=i_number+j_number-1;
	for(m=0;m<i_number;m++)
	{
		 c[m][n]= c[m][n] *  c[m][find_row];



	}

    
	find_result=c[find_collum][find_row];
	for(m=0;m<i_number+1;m++)
	{
		for(n=0;n<i_number+j_number;n++)
		{
			float find_row_result;
			if (n==0)
			{
				
				find_row_result=c[m][find_row];
							
			}

			if(m!=find_collum)
			c[m][n]=c[m][n]- c[find_collum][n]*find_row_result / find_result;
			if(m==find_collum)
			    break	;



		}

	}   
	m=find_collum;
	for(n=0;n<i_number+j_number;n++)
	{	c[m][n]=c[m][n] / find_result;
	}

	printf("\n");
	for(m=0;m<i_number+1;m++)
	{
		for(n=0;n<i_number+j_number;n++)
		 printf("%f,",c[m][n]);
	       printf("\n");
	}
	printf("\n");
	for(j=0;j<j_number-1;j++)
	{
		result[j]=0;
	}
	for(j=j_number-1;j<i_number+j_number-1;j++)
	{
			m=j-(j_number-1);
			n=i_number+j_number-1;
			result[j]=c[m][n];
	}
	for(m=0;m<=change_num-1;m++)
	{
		ok=change_number[m];
		change=result[m];
		result[m]=result[ok];
		result[ok]=change;
	}
	for(j=0;j<i_number+j_number-1;j++)
	{
		printf("%f,",result[j]); 
	}
	printf("\n");
	goto start;
	exit:
	;



}







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -