guass_band_good.c
来自「半带宽存储的高斯消去法,在有限元法的解决问题中经常使用。」· C语言 代码 · 共 60 行
C
60 行
#include "stdio.h"
void guass_band(double a[6][4],double b[6],int n)
{
int m,l,j;
double mi,d,f;
double min(double a,double b);
for(m=0;m<5;m++)
{
d=min(n-m-1,4-1);
for(l=1;l<=d;l++)
{
mi=a[m][l]/a[m][0];
b[m+l]=b[m+l]-b[m]*mi;
for(j=0;j<=4-l-1;j++)
a[m+l][j]=a[m+l][j]-mi*a[m][j+l];
}
}
b[n-1]=b[n-1]/a[n-1][0];/*回代*/
for(m=n-2;m>=0;m--)
{
f=min(n-1-m,3);
for(j=1;j<=f;j++)
b[m]=b[m]-a[m][j]*b[m+j];/*求和*/
b[m]=b[m]/a[m][0];
}
}
main()
{
int i;
static double a[6][4]=
{
{5,-3,2,0,},
{8,-3,2,4,},
{8,-3,0,0},
{7,-2,1,0},
{7,-2,0,0},
{4,0,0,0}};
static double b[6]={6,21,0,14,22,3};
guass_band(a,b,6);
printf("带状矩阵等带宽存储高斯线性方程组解法:\n");
for (i=0;i<=5;i++)
printf("x(%d)=%e\n",i,b[i]);
}
double min(double a,double b)
{
double c;
if(a>=b)
c=b;
else
c=a;
return c;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?