📄 tidu.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 + -