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

📄 tidu.c

📁 最优控制中单纯形表格法和梯度法
💻 C
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define Len 100
#define Add 0.001
#define Times_Value 10
main()
{
	int act=0;
	int m;
	int j;
	int i;//变量个数
	float modulus[Len]={0};//系数
	float control=0;//控制量
	float start[Len]={0};//初始量
	float start_F_Value={0};//初始f(x)值
	float start_P_Value[Len][Len]={{0}};//p0
	float start_F_Derivative[Len][Len]={{0}};//初始梯度
	

	float F_Derivative[Len][Len]={{0}};
	float Rabta[Len]={0};
	float F_Value[Len]={0};
	float X_Value[Len][Len]={{0}};
	float P_Value[Len][Len]={{0}};
	float a={0};
	float b={0};
	float Seek_Rabta={0};
	int c,d;
	int k;
	

	printf("请输入变量个数:");
	scanf("%d",&i);

	printf("请输入控制量:");
	scanf("%f",&control);
	
	for(j=0;j<i;j++)
	{
		printf("请输入第%d个系数:",j);
		scanf("%f",&modulus[j]);
	}
	
	for(j=0;j<i;j++)
	{
		printf("请输入第%d个初始量:",j);
		scanf("%f",&start[j]);
	}	
	
	for(j=0;j<i;j++) //
	{
		start_F_Derivative[0][j]=2*modulus[j]*start[j];
	}
	
	for(j=0;j<i;j++)
	{
		start_F_Value=start_F_Value+modulus[j]*start[j]*start[j];
	}

	for(j=0;j<i;j++)
	{
		a=0;
		for(k=0;k<i;k++)
		{
		a=a+(2*modulus[k]*start[k])*(2*modulus[k]*start[k]);
		}
		start_P_Value[0][j]= - (2*modulus[j]*start[j])/sqrt(a);
	}

	do
	{
		if(act==0)
		{
			for(Rabta[act]=0;Rabta[act]<Times_Value;Rabta[act]=Rabta[act]+Add)
			{
				Seek_Rabta=0;
				for(j=0;j<i;j++)
				{
					Seek_Rabta=Seek_Rabta+2*modulus[j]*(start[j]+start_P_Value[0][j]*Rabta[act])*start_P_Value[0][j];
				}
				if(Seek_Rabta>0)
				break;

			}
		}
		else
		{
			for(Rabta[act]=0;Rabta[act]<Times_Value;Rabta[act]=Rabta[act]+Add)
			{
				Seek_Rabta=0;
				for(j=0;j<i;j++)
				{
					Seek_Rabta=Seek_Rabta+2*modulus[j]*(X_Value[act-1][j]+P_Value[act-1][j]*Rabta[act])*P_Value[act-1][j];
				}
				if(Seek_Rabta>0)
				break;

			}

		}
	//	j=0;
		for(j=0;j<i;j++)
		{
			if(act==0)
			{	
				X_Value[act][j]=start[j]+start_P_Value[0][j]*Rabta[act];
				F_Value[act]=F_Value[act]+modulus[j]*X_Value[act][j]*X_Value[act][j];
				F_Derivative[act][j]=2*modulus[j]*X_Value[act][j];
				if(j==i-1)
				{
					for(m=0;m<i;m++)
					{
						a=0;
						for(k=0;k<i;k++)
						{
							a=a+(2*modulus[k]*X_Value[act][k])*(2*modulus[k]*X_Value[act][k]);
						}
						P_Value[act][m]= - (2*modulus[m]*X_Value[act][m])/sqrt(a);
					}	
				}
			}
			else
			{
				X_Value[act][j]=X_Value[act-1][j]+P_Value[act-1][j]	*Rabta[act];
				F_Value[act]=F_Value[act]+modulus[j]*X_Value[act][j]*X_Value[act][j];
				F_Derivative[act][j]=2*modulus[j]*X_Value[act][j];
				if(j==i-1)
				{
					for(m=0;m<i;m++)
					{
						a=0;
						for(k=0;k<i;k++)
						{
							a=a+(2*modulus[k]*X_Value[act][k])*(2*modulus[k]*X_Value[act][k]);
						}
						P_Value[act][m]= - (2*modulus[m]*X_Value[act][m])/sqrt(a);
					}	
				}
			}
		}
		
		act=act+1;

	}
	while(F_Value[act-1]>control);
	for(m=0;m<act;m++)
	{
		printf("%f,",Rabta[m]);
		for(j=0;j<i;j++)
		{
		printf("%f,",X_Value[m][j]);
		}
		printf("%f,",F_Value[m]);
		printf("\n");
	}

}

⌨️ 快捷键说明

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