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

📄 valp.c

📁 求特征值与特征向量的程序
💻 C
字号:
#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>#define lll 80#define dim 20typedef double matrice[dim][dim];typedef double vecteur[dim];/*donner la fonction de lecture*/int lecture(char name[],matrice A)  {    FILE *fp;    int num,i,j,rang;    char dd[2],dum[lll];    double ttt;/*lecture du numero de l'exemple voulu*/printf(" donner le numero de l'exemple voulu (1<num<10):");    scanf("%d",&num);    printf(" le numero de l'exemple est %d\n",num);    if ((fp = fopen(name,"r+t")) == NULL)      {       puts(" on ne peut ouvrir le fichier\n" );       exit(1);      }	do	 {	  fgets(dum,lll,fp);	  dd[0]=dum[24];dd[1]=dum[25];	 }while(dum[0] != '$' || atoi(dd)!=num); fscanf(fp,"%d",&rang);    printf("\n  la valeur du rang est %d\n",rang);    for (i=1;i <= rang;i++)      {       for (j=1;j <= rang;j++)	 {	  fscanf(fp,"%lf",&ttt);	  A[i][j]=ttt;	 }      }for(i=1;i<=rang;i++)   {     for(j=1;j<=rang;j++)      {	printf("A[%d][%d]=%lf\n",i,j,A[i][j]);      }   }    fclose(fp);    return(rang);  }int main(void){ /* declaration des variables */  extern int lecture();  matrice A,U,L,C;  char rep,name[25];  int i,j,n,k,rang;  double S,E,e;for(i=0;i<=19;i++)   {     for(j=0;j<=19;j++)      {	A[i][j]=0.;      }   } fflush(stdin);    printf(" donner le nom du fichier: ");    gets(name);    printf(" le nom du fichier est %s\n",name);    rang=lecture(name,A);    n=rang;    printf("\n donner l'erreur e:");    scanf("%lf",&e);  do{    // decomposition LU A=LU     for (i=1;i<=rang;i++)    	{  	  U[1][i]=A[1][i];          L[i][1]=A[i][1]/U[1][1];          L[i][i]=1.;     	}        for (k=2;k<=rang;k++)     	{            for (i=k;i<=rang;i++)        	{  		  S=0;         	  for (j=1;j<=k-1;j++)         		{  			  S=S+L[k][j]*U[j][i];         		}            	  U[k][i]=A[k][i]-S;        	}	          for (i=k+1;i<=rang;i++)                {  		  S=0;         	  for (j=1;j<=k-1;j++)           	  	{ 			  S=S+L[i][j]*U[j][k];          		}            	  L[i][k]=(A[i][k]-S)/U[k][k];         	}           }     // produit de matrice     for (i=1;i<=n;i++)         {           for (j=1;j<=n;j++)            {                S=0;                for (k=1;k<=n;k++)                 {                     S=S+U[i][k]*L[k][j];                 }               C[i][j]=S;            }          }     //calcul erreur E     for (i=1;i<=n;i++)       {          E=0;          for (j=1;j<=n;j++)           {              E=E+fabs(C[i][j]-A[i][j]);           }       }    //echange A et C     for (i=1;i<=n;i++)      {         for(j=1;j<=n;j++)          {             A[i][j]=C[i][j];          }      }    }while (E>e);/* affichage resultat*/  printf("\n les valeurs propres sont:" );      for (i=1;i<=n;i++)        {          for (j=1;j<=n;j++)           {              printf(" C[%d][%d] = %lf ",i,j,C[i][j]);           }        }fflush(stdin);    printf("\n Voulez vous recommencer?(y/n)?\n");    puts(" fin de fichier \n"); }

⌨️ 快捷键说明

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