Calcul Matricial – Metoda lui Gauss

Metoda lui Gauss constă în transformări elementare aplicate matricii sistemului şi şirului termenilor liberi, până la aducerea matricii sistemului la o formă superior trapezoidală, urmată apoi de substituirea succesivă, în sens invers, a necunoscutelor, obţinându-se astfel vectorul soluţiei.

#include "stdio.h"
#include "conio.h"
int n;
float a[10][10],b[10],x[10];
int cauta_pivot(int i)
{
  int k;
  for(k=i+1;k <= n;k++)     if(a[k][i]) return(k);   return(0); } void schimba_linii(int i, int k) {   int j;   float tmp;   for(j=i; j <= n;j++)     {     tmp=a[i][j];     a[i][j]=a[k][j];     a[k][j]=tmp;   }   tmp=b[i];   b[i]=b[k];   b[k]=tmp; }

void aplica_transformari(int i)
{
  int k,j;
  float p;
  for(k=i+1;k <= n;k++)     {     p=a[k][i]/a[i][i];     for(j=i;j <= n;j++)     a[k][j]=a[k][j]-a[i][j]*p;   b[k]=b[k]-b[i]*p;   } } void determinare_solutii(void) {   int i,j;   float s;   x[n] =b[n]/a[n][n];   for(i=n-1;i >= 1;i--)
  {
    for(s=0 ,j=i+1;j <= n;j++) s+=a[i][j]*x[j];     x[i]=(b[i]-s)/a[i][i];   } } void main(void) {   int i,j,k=1;   float f;   scanf("Introdu gradul sistemului:");   scanf("%d",&n);   for(i=1;i <= n;i++)     for(j=1; j <= n;j++)     {       printf("a[%d][%d]=",i,j);       scanf("%f",&f);       a[i][j]=f;     }     printf("Introdu coloana termenilor liberi: \n");     for(i=1;i <= n;i++)     {       printf("b[%d]=",i);       scanf("%f",&f);       b[i]=f;     }   i=1;   do   {     if(!a[i][i])     {       k=cauta_pivot(i);       if(k) schimba_linii(i,k);     }     if(k) aplica_transformari(i);     i++;   } while ((i <= n-i)&&k);   if(a[n][n]) k=0;   if(!k) printf("Metoda lui Gauss nu se poate folosi!\n");   else   {     determinare_solutii();     printf("Vectorul soluţie :\n");     for(i=1;i <= n;i++) printf("x[%d]=%f\n",i,x[i]);   }   getch(); }

Leave a Reply

Your email address will not be published. Required fields are marked *

8 − five =

Time limit is exhausted. Please reload CAPTCHA.