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

📄 3.c

📁 用C编写的最速下降法(解方程)
💻 C
字号:
#include "stdio.h"
#include "math.h"
#define N 20

float c,a[N][N],x[N],b[N],e,r[N],r1[N],r2[N],x0[N],max;

void B(float s, float d[N],int n)
{  
	int i; 
    for(i=0;i<n;i++)
     r1[i]=s*d[i]; 
 }
void ax(float y[N][N],float z[N],int n)
{ 
	int i,j;
    for(i=0;i<n;i++) 
	   r2[i]=0;
    for(i=0;i<n;i++)
    {
	 for(j=0;j<n;j++)
     r2[i]=r2[i]+y[i][j]*z[j];
	}
}

void plus(float p[N],float q[N],int n)
{
	int j;
    for(j=0;j<n;j++)
     x[j]=p[j]+q[j]; 
}

void minus(float p[N],float q[N],int n)
{   int i;
    for(i=0;i<n;i++)
     r[i]=p[i]-q[i];
}
float rr(float s[N],float t[N],int n)
{
   int i;float h=0;
   for(i=0;i<n;i++)
    h=h+s[i]*t[i];
   return h;
}

main()
{
    int i,j,n,m=1;
   printf("***********************************************\n");
   printf("     Please  ensure A is the zheng ding de\n");
   printf("***********************************************\n");

   printf("input the size of the array: ");
     scanf("%d",&n);
   
   printf("input A:\nA=\n")   ;
   
    for(i=0;i<n;i++)
    {for(j=0;j<n;j++)
     scanf("%f",&a[i][j]);
    }
   
	printf("input b:\nb=");
   
    for(i=0;i<n;i++)
     scanf ("%f",&b[i]);

    printf("input x0:\nx0=");
   
	for(i=0;i<n;i++)
     scanf ("%f",&x0[i]);

     printf("input the size of the e:\ne= ");
     scanf("%f",&e);
    for(i=0;i<n;i++)
     x[i]=x0[i];

     ax(a,x0,n);
     minus(b,r2,n);


   	 while(1)
   {
      max=fabs(r[0]);
	    for(i=1;i<n;i++)
      if (fabs(r[i])>max)
         max=fabs(r[i]); 
      if(max<=e)    
		  break;
     
     ax(a,r,n); 
     c=rr(r,r,n)/rr(r2,r,n);
     B(c,r,n);
     plus(x,r1,n);
     B(c,r2,n);
     plus(r,r1,n);


    printf("\nB%d:",m);
    for(i=0;i<n;i++)
    {
	 printf("x[%d]=%f ",i+1,x[i]); 
    } 
	 printf("\n");

	 m++;
    
    if(m>100)
	 break;
  }
	 if(m==1)
     printf("x0 is the answer!");
  
	getch();
}

⌨️ 快捷键说明

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