Нахождение определенного интнеграла методом Гаусса - C (СИ)
Формулировка задачи:
нужно написать прогу для нахождения определенного интнеграла методом гаусса
Решение задачи: «Нахождение определенного интнеграла методом Гаусса»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <math.h>
int i, j, k, z, p;
float a[5][5], b[5][5];
float koef, e, e1, e2, e3, y;
float x[5], x1[5];
int main()
{
e=0.001;
printf("vvedit` koeficienty\n");
for (i=1; i<=3; i++)
for (j=1; j<=4; j++)
scanf ("%f", &a[i][j]);
for (i=1; i<=3; i++)
for (j=1; j<=4; j++)
b[i][j]=a[i][j];
printf ("vuberit` metod:\n 1-gauss\n 2-zeidel\n");
scanf ("%i", &z);
if (z==1)
{
for (p=1; p<=2; p++)
for (i=p+1; i<=3; i++)
{ koef=-a[i][p]/a[p][p];
for (j=p;j<=4; j++)
a[i][j]=a[i][j]+koef*a[p][j];
}
for (i=3;i>=1; i--)
{
x[i]=a[i][4];
for (j=3; j>=1;j--)
if(i==j)
x[i]=x[i]/a[i][j];
else x[i]=x[i]-a[i][j]*x[j];
}
for (i=1; i<=3; i++)
printf("%f\n\n", x[i]);
}
else
{ for (i=1; i<=3; i++)
{ a[i][4]=0;
for (j=1; j<=3; j++)
a[i][4]=a[i][4]+b[j][i]*b[j][4];
}
for (i=1; i<=3; i++)
for (j=1; j<=3; j++)
{ a[i][j]=0;
for (k=1; k<=3; k++)
a[i][j]=a[i][j]+b[j][k]*b[k][i];
}
for (i=1; i<=3; i++)
x1[i]=a[i][4]/a[i][i];
do
{
for (i=1; i<=3; i++)
{ x[i]=x1[i];
x1[1]=(a[1][4]-a[1][2]*x[2]-a[1][3]*x[3])/a[1][1]; e1=fabs(x1[1]-x[1]);
x1[2]=(a[2][4]-a[2][1]*x1[1]-a[2][3]*x[3])/a[2][2]; e2=fabs(x1[2]-x[2]);
x1[3]=(a[3][4]-a[3][1]*x1[1]-a[3][2]*x1[2])/a[3][3]; e3=fabs(x1[3]-x[3]);
}
}
while ((e1>e)&&(e2>e)&&(e3>e));
for (i=1; i<=3; i++)
printf("%f\n\n", x[i]);
}
}