高斯赛德尔求解方程c语言,数值分析c语言实现高斯赛德尔解法.doc

数值分析c语言实现高斯赛德尔解法

数值分析

学院:计算机学院

姓名:袁薪洋

实验目的:

1熟练掌握C语言程序设计,编程求解问题。

2.运用高斯-赛德尔迭代公式求解线性方程组。

实验内容:

用高斯-赛德尔迭代公式求解方程组。

10x1-x2-2x3=7.2

-x1+10x2-2x3=8.3

-x1-x2+5x3=4.2

程序的核心代码:

#include"math.h"

#include

#define NUMBER 20

float A[NUMBER][NUMBER+1] ;

float ark;

int flag,n;

void exchange(int r,int k);

float max(int k);

void main()

{

float x[NUMBER]; /*此数组用于存放方程解*/

int r,k,i,j;

printf("***********************************");

printf("\n\n用高斯-赛德尔迭代法解线性方程组\n\n");

printf("***********************************");

printf("\n\n 请输入方程组的维数:n=");

scanf("%d",&n);

printf(" \n\n请输入系数矩阵A和向量b:");

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

{

printf("\n\n请输入a%d1--a%d%d系数和向量b%d(数之间用空格格开):",i,i,n,i);

//实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定

for(j=1;j<=n+1;j++) //将刚才输入的数存入数组

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

}

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

{

ark=max(k);

if(ark==0) //判断方程是否为线性方程

{

printf("\n\n此方程组不合法!");

}

else if(flag!=k)

exchange(flag,k);

for(i=k+1;i<=n;i++)

for(j=k+1;j<=n+1;j++)

A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];

}

x[n]=A[n][n+1]/A[n][n];

for( k=n-1;k>=1;k--)

{

float me=0;

for(j=k+1;j<=n;j++)

{

me=me+A[k][j]*x[j];

}

x[k]=(A[k][n+1]-me)/A[k][k];

}

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

{

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

}

}

void exchange(int r,int k) //交换行的矩函数

{

int i;

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

A[0][i]=A[r][i];

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

A[r][i]=A[k][i];

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

A[k][i]=A[0][i];

}

float max(int k) //比校系数大小的函数

{

int i;

float temp=0;

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

if(fabs(A[i][k])>temp)

{

temp=fabs(A[i][k]);

flag=i;

}

return temp;

}

运行结果:

截图如下:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值