【计算方法】线性方程求解实验

28 篇文章 48 订阅 ¥29.90 ¥99.00
本文详细介绍了使用C语言进行线性方程组求解的实验过程,包括实验环境、要求、目的和内容。重点探讨了Jacobi法和Gauss-Seidel法的迭代法求解,分析了迭代法的收敛性、初值和矩阵系数对收敛速度的影响。实验总结指出,Gauss-Seidel法通常比Jacobi法收敛快,但选择合适的方法应根据具体需求。此外,超松弛迭代法的收敛速度受松弛因子影响。
摘要由CSDN通过智能技术生成

线性方程求解实验

一、实验环境
实验设备:计算机
实验使用的语言:高级程序设计语言(C、Java或Matlab等)
二、实验要求
1、认真分析题目的条件和要求,复习相关理论知识,选择适当的解决方案和算法;
2、编写上机实验程序,作好上机前的准备工作;
3、上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);
4、对实验结果进行分析、归纳、总结。
三、实验目的
熟练掌握Jacobi法和 Gauss-Seidel法,认识迭代法收敛的含义以及迭代法初值和方程组系数矩阵性质对收敛速度的影响。
四、实验内容
【实验题1】
用迭代法求解 Ax=b;(迭代法收敛速度实验)
(Jacobi法)

  1. 问题的求解算法及数据结构(流程图)
    在这里插入图片描述
    2.源程序清单
#include<math.h>
#include<stdio.h>
#define N 3
#define EPS 0.5e-6
static double aa[N][N]={{6,2,-1},{1,4,-2},{-3,1,4}};
static double bb[N]={-3,2,4};
int main()
{
	int i,j,k,NO;
	double a[N+1][N+1],b[N+1],x[N+1],y[N+1];
	double d,sum,max;
	for(i=1;i<=N;i++)
	{
		for(j=1;j<=N;j++)
		a[i][j]=aa[i-1][j-1];
		b[i]=bb[i-1];
	}
	printf("\n Please enter NO:");
	scanf(" %d",&NO);printf("\n");
	for(i=1;i<=N;i++) x[i]=0;
	k=0;
	printf("      k", ' ');
	for(i=1;i<=N;i++) printf("%8cx[%d]", ' ',i);
	printf("\n    0");
	for(i=1;i<=N;i++) printf("%12.8g",x[i]);
	printf("\n");
	do
	{
		for(i=1;i<=N;i++)
		{
			sum=0.0;
			for(j=1;j<=N;j++)
			if(j!=i) sum=sum+a[i][j]*x[j];
			y[i]=(-sum+b[i])/a[i][i];
		}
		max=0.0;
		for(i=1;i<=N;i++)
		{
			d=fabs(y[i]-x[i]);
			if(max<d) max=d;
			x[i]=y[i];
		}
		printf("%6d",k+1);
		for(i=1;i<=N;i++) printf("%12.8g",x[i]);
		printf("\n");
		k++;
	}
	while((max>=EPS)&&(k<NO));
	printf("\n k=%d\n",k);
	if(k>=NO) printf("\n fail! \n");
	else for(i=1;i<=N;i++)
	 printf("   x[%d]=%g",i,x[i]); 
}

3.程序运行结果及分析
(1)选取不同初值和不同的b,给定迭代误差用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论。
在这里插入图片描述

代码同上,取b2
运行截图:
在这里插入图片描述

代码同上,取b1,x0取1
运行截图:
在这里插入图片描述

(2)取定及b,将A的主对角线元素成倍放大,其他不变,用迭代法计算多次,比较收敛速度,分析计算结果并给出结论。
x0={0,0,0},b取b1,A的主对角线元素放大两倍
代码同上,讲矩阵主对角线的两个放大两倍
运行截图:
在这里插入图片描述

x0={0,0,0},b取b1,A的主对角线元素放大三倍
代码同上,讲矩阵主对角线的两个放大三倍
运行截图:
在这里插入图片描述

五、实验总结
经过这次实验,我了解了:1.迭代法具有需要计算机的存贮单元较少,程序设计简单,原始系数矩阵在计算过程中始终不变等优点。2.迭代法在收敛性及收敛速度等方面存在问题。
在同等精度下,Gauss-Seidel迭代法比Jacobi迭代法收敛速度快。一般来说,Gauss-Seidel迭代法比Jacobi迭代法收敛要快,但有时反而比Jacobi迭代法要慢,而且Jacobi迭代法更易于优化。因此,两种方法各有优缺点,使用时要根据所需适当选取。
当松弛因子为1时,超松弛迭代方法等同于Gauss-Seidel迭代法,这和理论推导完全相同。另外,超松弛迭代法的收敛速度完全取决于松弛因子的选取,一个适当的因子能大大提高收敛速度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

almostspring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值