关于雅克比迭代, 高斯塞德尔迭代以及SOR迭代的C++实现


算法不难,只要理解Jacobi的算法另外两种就很简单了,因为他们都是建立在Jacobi迭代的基础上.
首先讲一下程序,主要是由输入功能,和迭代方式调用功能实现块构成的.

点击这里下载源码.
提取码:mlpb

程序变量

int m; //m*n的系数矩阵
int max_times;// z最大迭代次数
int times = 0;//当前迭代次数
//int mx_mis = 99999999;
string choice;//功能选择
double mis;//误差范围
double mtrx[sz][sz];//系数矩阵
double b[sz];//常数矩阵
double init[sz];//初始向量
double ans[sz];//答案
//double max_mis[sz];//

主程序

int main()
{
   
    input();

    func();

    return 0;
}

输入功能

这里就是输入计算需要的系数矩阵,常数矩阵等基本条件.

void  input()
{
   
    cout<<"请输入迭代方式(J,GS,SOR)"<<endl;
    cin>>choice;

    cout << "请输入m" << endl;
    cin >> m;

    cout << "请输入系数矩阵m*n(m)" << endl;
    for ( int i = 0; i < m; i++ )
    {
   
        for ( int j = 0; j < m; j++ )
        {
   
            cin >> mtrx[i][j];
        }
    }

    cout << "请输入常数矩阵b:" << endl;
    for ( int i = 0; i < m; i++ )
    {
   
        cin >> b[i];
    }

    cout << "请输入初始向量" << endl;
    for ( int i = 0; i < m; i++ )
    {
   
        cin >> init[i];
        ans[i] = init[i];
    }

    cout << "请输入最大迭代次数:" << endl;
    cin >> max_times;

//    cout << endl << "请输入最大误差:"<<endl;
//         cin>>mis;
}

输出功能

迭代结束后进行输出

void output()
{
   

    cout << "迭代" << times+1 << "次,答案是" << endl;
    for ( int i = 0; i < m; i++ )
    {
   
//        cout << init[i] << endl;
        printf ( "%.4f\t", init[i] );
    }
    printf ( "\n" );
}

迭代调用功能

为了main函数里干净点,把功能函数统统放进func里

void func()
{
   
    if(choice=="J")
        Jacobi();
    else if(choice=="GS")
        GS();
    else
        SOR();
}

Jacobi迭代

首先确立迭代截止条件,就是迭代次数达到所设(或及误差满足条件,但我这里么有实现).然后在while里进行具体迭代.
形如:
[ 10 − 1 − 2 − 1 10 − 2 − 1 − 1 5 ] [ x 1 x 2 x 3 ] = [ 7.2 8.3 4.2 ] \left[ \begin{matrix} 10 & -1 & -2 \\ -1 & 10 & -2 \\ -1 & -1 & 5 \end{matrix} \right] \left[ \begin{matrix} x_1\\ x_2 \\ x_3 \end{matrix} \right] = \left[ \begin{matrix} 7.2\\ 8.3\\ 4.2 \end{matrix} \right] 10111101225

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值