用无回代的高斯消元法和简单迭代法 解四元一次方程组

用无回代的高斯消元法和简单迭代法 解四元一次方程组,第1张

N元通用程序,用四元调用四元方程组:

a[4][5]={4,-1,0,2,-10,-1,4,-1,0,-70,0,-1,4,-1,90,2,0,-1,40,00};

高斯消元法(通用程序):

#include <stdioh>

#include <stdlibh>

#include <mathh>

float ColPivot(float c,int n);

void main()

{

int i,j;

float x;

int n=4;

float a[4][5]={4,-1,0,2,-10,-1,4,-1,0,-70,0,-1,4,-1,90,2,0,-1,40,00};

x=ColPivot(a[0],n);

for (i=0;i<n;i++) printf("x[%d]=%f\n",i,x[i]);

getch();

}

float ColPivot(float c,int n)

{

int i,j,t,k;

float x,p;

x=(float )malloc(nsizeof(float));

for(i=0;i<=n-2;i++)

{

k=i;

for(j=i+1;j<=n-1;j++)

if(fabs((c+j(n+1)+i))>(fabs((c+k(n+1)+i)))) k=j;

if(k!=i)

for(j=i;j<=n;j++)

{

p=(c+i(n+1)+j);

(c+i(n+1)+j)=(c+k(n+1)+j);

(c+k(n+1)+j)=p;

}

for(j=i+1;j<=n-1;j++)

{

p=((c+j(n+1)+i))/((c+i(n+1)+i));

for(t=i;t<=n;t++)

(c+j(n+1)+t)-=p((c+i(n+1)+t));

}

}

for(i=n-1;i>=0;i--)

{

for(j=n-1;j>=i+1;j--)

((c+i(n+1)+n))-=x[j]((c+i(n+1)+j));

x[i]=(c+i(n+1)+n)/((c+i(n+1)+i));

}

return x;

}

-------------------------------------------

高斯赛德尔迭代法(通用程序):

#include <stdioh>

#include <stdlibh>

#include <mathh>

#define N 100

float GauseSeidel(float a,int n)

{

int i,j,nu=0;

float x,dx;

x=(float )malloc(nsizeof(float));

for(i=0;i<=n-1;i++)

x[i]=00;

do {

for(i=0;i<=n-1;i++) {

float d=00;

for(j=0;j<=n-1;j++)

d+=(a+i(n+1)+j)x[j];

dx=((a+i(n+1)+n)-d)/((a+i(n+1)+i));

x[i]+=dx;

}

if(nu>=N)

{

printf("iter divergence\n");

exit(1);

}

nu++;

}

while(fabs(dx)>1e-6);

return x;

}

void main()

{

int i;

float x;

float c[20]={4,-1,0,2,-10,-1,4,-1,0,-70,0,-1,4,-1,90,2,0,-1,40,00};

float GauseSeidel(float ,int);

x=GauseSeidel(c,4);

for(i=0;i<=3;i++)

printf("x[%d]=%f\n",i,x[i]);

getch();

}

#include <stdioh>

#include <stdlibh>

int main(void)

 {

 int i,j,k,n,m,o,p;       //声明一些变量

 float a[100][100],c;     //

 printf("Please input the matrix");

                          //输入矩阵

 printf("\n");            

 scanf("%d",&n);          //输入n

  for (i=0;i<=n-1;i++)    //正确

    for (j=0;j<=n;j++)    //错误,数组越界

       scanf("%f",&a[i][j]);

               //建议补全{}

 for (i=0;i<=n-1;i++){    //做i次循环

     c=1/a[i][i];         //获取对角线上元素的倒数

   for (j=0;j<=n;j++)   //将一行中的所有元素都除以对角线上的元素,不幸的是数组越界

a[i][j]=a[i][j]c;

   for (k=0;k<=n-1;k++){ //做n次循环

       if (k==i)         //如果k等于当前行数则跳过

                continue;

            else              //否则 

                for (j=0;j<=n;j++) //然后做什么我有点晕

                    a[k][j]=a[k][j]-a[k][i]a[i][j];

}  

//这里外面的for必须加{},然后好像是遍历了二维数组,做了个消元,对不对不知道了

}

//最后输出结果,仍然是数组越界,也差{}

m=0;

printf("\n");

for (i=0;i<=n-1;i++)

        for (j=0;j<=n;j++){

            m++;

            if (m%4==0){

                printf("%20f ",a[i][j]);

                printf("\n");

            }

            else

                printf("%20f ",a[i][j]);

            }

    //当然这里并不会真的越界,但是用的越界了

    return 0;

}

void gaussj(double a[], int n, double b[])

{

int i,j,k,l,ll,irow,icol;

double big,pivinv,dum;

int ipiv[50], indxr[50], indxc[50];

for (j=0;j<=n-1;j++)

{

ipiv[j]=0;

}

for (i=0;i<=n-1;i++)

{

big=00;

for (j=0;j<=n-1;j++)

{

if(ipiv[j]!=1)

{

for(k=0;k<=n-1;k++)

{

if(ipiv[k]==0)

{

if(fabs(a[jn+k])>=big)

{

big=fabs(a[jn+k]);

irow=j;

icol=k;

}

else if(ipiv[k]>1)

{

cout<<"singular matrix";

}

}

}

}

}

ipiv[icol]=ipiv[icol]+1;

if(irow!=icol)

{

for(l=0;l<=n-1;l++)

{

dum=(a[irown+l]);

a[irown+l]=a[icoln+l];

a[icoln+l]=dum;

}

dum=b[irow];

b[irow]=b[icol];

b[icol]=dum;

}

indxr[i]=irow;

indxc[i]=icol;

if(a[icoln+icol]==00)

{

cout<< "singular matrix";

}

pivinv=10/(a[icoln+icol]);

a[icoln+icol]=10;

for(l=0;l<=n-1;l++)

{

a[icoln+l]=a[icoln+l]pivinv;

}

b[icol]=b[icol]pivinv;

for(ll=0;ll<=n-1;ll++)

{

if(ll!=icol)

{

dum=a[lln+icol];

a[lln+icol]=00;

for(l=0;l<=n-1;l++)

{

a[lln+l]=a[lln+l]-a[icoln+l]dum;

}

b[ll]=b[ll]-b[icol]dum;

}

}

}

for(l=n-1;l<=0;l--)

{

if(indxr[l]!=indxc[l])

{

for(k=0;k<=n-1;k++)

{

dum=a[kn+indxr[l]];

a[kn+indxr[l]]=a[kn+indxc[l]];

a[kn+indxr[l]]=dum;

}

}

}

}

以上就是关于用无回代的高斯消元法和简单迭代法 解四元一次方程组全部的内容,包括:用无回代的高斯消元法和简单迭代法 解四元一次方程组、c语言 高斯乔丹消元法 帮忙看下代码有什么问题、【编程求助】用c语言或者c++编程,实现用高斯消元法求解线性方程组Ax=b。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9479094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存