【计算方法】迭代法(线性方程组求解)

解线性方程组的方法有如下两类
直接法:高斯消去法,三角分解法等,这些方法可用于求解低阶稠密方程组
迭代法:雅可比迭代法,高斯-赛德尔迭代法等,用于求解高阶稀疏方程组

雅可比迭代法

在这里插入图片描述

高斯-赛德尔迭代法

在这里插入图片描述

收敛问题

首先时矩阵A应具有严格的对角优势–在矩阵的每一行中,对角线的上的元素的绝对值大于其它元素的绝对值的和。当且仅当此时,雅可比迭代才具有唯一解。且经过数学家证明此时高斯-赛德尔迭代法同样会收敛。
那么如何判断收敛呢?
在这里插入图片描述

迭代跳出条件

个人所设置的最大迭代次数。
收敛时所计算的精度问题。具体展示为前后两次迭代结果的相对误差以及绝对误差;

判断代码主要如下:

forab(i, 1, M) // 迭代次数判断
---------------------
---------------------
double err = fabs(normal_form(x, p));// 精度判断
            double relerr = err / (normal_form(x, s) + 1e-7);
            if (err < delta || relerr < delta)
                break;

例题

【问题描述】为求解一个线性方程组,使用高斯赛德尔迭代法,采用欧几里得距离判定是否收敛。精度delta为1E-9,最大迭代次数为20。
【输入形式】在屏幕上依次输入方阵阶数n,系数矩阵A,常数矩阵B和起始点P。
【输出形式】输出实际迭代次数,然后每一行输出一个根。
【样例1输入】
3
4 -1 1
4 -8 1
-2 1 5
7
-21
15
1
2
2
【样例1输出】
10
2
4
3
【样例1说明】输入:第1行为方阵阶数3,第2行至4行为系数矩阵A,第5行至7行为常数矩阵B,第8行至10行为起始点。输出:实际迭代次数为10,然后每行依次输出方程解:x1, x2, x3。
【评分标准】根据输入得到的输出准确

ACcode:

/*
 * @Author: csc
 * @Date: 2021-04-09 12:43:20
 * @LastEditTime: 2021-04-09 20:36:00
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \code_formal\course\cal\gauss_saierd.cpp
 */
#include <bits/stdc++.h>
#define pr printf
#define sc scanf
#define sf(n) scanf("%d", &n)
#define sff(n1, n2) scanf("%d %d", &n1, &n2)
#define sfff(n1, n2, n3) scanf("%d %d %d", &n1, &n2, &n3)
#define sl(n) scanf("%lld", &n)
#define sll(n1, n2) scanf("%lld %lld", &n1, &n2
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值