栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习日记#1.1——四元一次方程组进行Sor松弛迭代法求解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习日记#1.1——四元一次方程组进行Sor松弛迭代法求解

在这篇文章中,不会有太多的讲解,主要是因为Sor迭代法和高斯-赛德尔(gauss-seidle)迭代法的程序只有迭代公式的一点点区别,当松弛因子为1的时候,Sor迭代法和高斯-赛德尔(gauss-seidle)迭代法是一致的。

高斯-赛德尔(gauss-seidle)迭代法

Sor迭代法

 

 

附上实现程序(Visual Studio 2019)
#include  
#include  

using namespace std;

double a[8][8];//定义系数矩阵
double b[8];//定义b矩阵元素
double w;//定义松弛因子
double G_X1[8]; //定义每次迭代后的X1 
double G_X2[8]; //定义每次迭代后的X2
double G_X3[8]; //定义每次迭代后的X3
double G_X4[8]; //定义每次迭代后的X4
double x1, x2, x3, x4;//定义初始向量
void Func_Sor(double x_1, double x_2, double x_3, double x_4, int m);//定义sor迭代法

int main()
{
    int N;//定义迭代次数
    cout << "请输入迭代次数:" << endl;
    cin >> N;//赋值迭代次数N
    for (int i = 1; i <= 4; i++)
    {
        cout << "请输入第" << i << "行的系数:" << endl;
        for (int j = 1; j <= 4; j++)
        {
            cin >> a[i][j];
        }
    }//赋值系数矩阵
    cout << "请输入松弛因子w:" << endl;
    cin >> w;//赋值松弛因子
    cout << "请输入b矩阵" << endl;
    for (int j = 1; j <= 4; j++)
    {
        cin >> b[j];
    } // 赋值b矩阵
    cout << "请输入初始向量:" << endl;
    cin >> x1 >> x2 >> x3 >> x4;
    Func_Sor(x1, x2, x3, x4, N);//调用Func_Sor函数
    cout << "---->>>迭代结果显示<<<----" << endl;//建立分隔符
    cout << "迭代次数" << "           x1" << "   ,         x2" << "   ,        x3 " << "   ,        x4 " << endl;//建立输出结果的表头
    for (int i = 1; i <= N; i++)    //输出每次迭代的结果
    {
        cout << setiosflags(ios::fixed) << setprecision(8);//输出结果保留8位小数
        cout << " 第" << i << "次:         " << G_X1[i] << " , " << G_X2[i] << " , " << G_X3[i] << " , " << G_X4[i] << endl;
    }
    return 0;
}
void Func_Sor(double x_1, double x_2, double x_3, double x_4, int m)//Sor迭代法解析
{
    G_X1[0] = x_1;
    G_X2[0] = x_2;
    G_X3[0] = x_3;
    G_X4[0] = x_4;
    for (int i = 0; i < m; i++)
    {
        G_X1[i + 1] = G_X1[i] + w * (b[1] - a[1][1] * G_X1[i] - a[1][2] * G_X2[i] - a[1][3] * G_X3[i] - a[1][4] * G_X4[i]) / a[1][1];
        G_X2[i + 1] = G_X2[i] + w * (b[2] - a[2][1] * G_X1[i + 1] - a[2][2] * G_X2[i] - a[2][3] * G_X3[i] - a[2][4] * G_X4[i]) / a[2][2];
        G_X3[i + 1] = G_X3[i] + w * (b[3] - a[3][1] * G_X1[i + 1] - a[3][2] * G_X2[i + 1] - a[3][3] * G_X3[i] - a[3][4] * G_X4[i]) / a[3][3];
        G_X4[i + 1] = G_X4[i] + w * (b[4] - a[4][1] * G_X1[i + 1] - a[4][2] * G_X2[i + 1] - a[4][3] * G_X3[i] - a[4][4] * G_X4[i]) / a[4][4];
    }
}
例题

  程序输出结果: 

特别注意:

C++学习日记#1——三元一次方程组进行高斯-赛德尔(gauss-seidle)迭代法求解https://blog.csdn.net/ALEX_2814/article/details/120886518?spm=1001.2014.3001.5502

和这篇文章都是固定系数矩阵阶数的,也就是说在不改变代码的前提下,《三元一次方程组进行高斯-赛德尔(gauss-seidle)迭代法求解》这篇文章中的程序只能适用于三元一次方程组和这篇文章的程序只能适用于四元一次方程组。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号