线性方程组的古典迭代算法

原创 2006年05月27日 08:38:00

#include <math.h>

 //雅克比迭代

int Jacobi(double **a,double *b,double *x,int dim,

double eps=0.0001,int CNT=100000)

{

    double *y=new double [dim];

    double err=1.0;

    int i,j,count=0;

    for(i=0;i<dim;i++)

        y[i]=0;

    while(err>eps&&count<CNT)

    {

        err=0;

        count++;

        for(i=0;i<dim;i++)

        {

            x[i]=0;

            for(j=0;j<i;j++)

                x[i]+=a[i][j]*y[j];

            for(j=i+1;j<dim;j++)

                x[i]+=a[i][j]*y[j];

            x[i]=(b[i]-x[i])/a[i][i];

            if(err<fabs(x[i]-y[i]))

                err=fabs(x[i]-y[i]);

        }

        for(i=0;i<dim;i++)

            y[i]=x[i];

    }

    return count;

}

//高斯——赛德尔迭代

 

int G_S(double **a,double *b,double *x,int dim,double eps=0.0001,int CNT=100000)

{

    double y;

    double err=1.0;

    int i,j,count=0;

    for(i=0;i<dim;i++)

        x[i]=0;

    while(err>eps&&count<CNT)

    {

        err=0;

        count++;

        for(i=0;i<dim;i++)

        {

            y=x[i];x[i]=0;

            for(j=0;j<i;j++)

                x[i]+=a[i][j]*x[j];

            for(j=i+1;j<dim;j++)

                x[i]+=a[i][j]*x[j];

            x[i]=(b[i]-x[i])/a[i][i];

            if(err<fabs(y-x[i]))

                err=fabs(x[i]-y);

        }

    }

    return count;

}

//超松弛迭代

 

int SOR(double **a,double *b,double *x,int dim,double w=1,double eps=0.0001,int CNT=100000)

{

    double y;

    double err=1.0;

    int i,j,count=0;

    for(i=0;i<dim;i++)

        x[i]=0;

    while(err>eps&&count<CNT)

    {

        err=0;

        count++;

        for(i=0;i<dim;i++)

        {

            y=x[i];

            x[i]=0;

            for(j=0;j<i;j++)

                x[i]+=a[i][j]*x[j];

            for(j=i+1;j<dim;j++)

                x[i]+=a[i][j]*x[j];

            x[i]=(b[i]-x[i])/a[i][i];

            x[i]=(1-w)*y+w*x[i];

            if(err<fabs(y-x[i]))

                err=fabs(x[i]-y);

        }

    }

    return count;

}

线性方程组的直接解法

GAUSS列主消元法求解nn元线性方程组的最简单直接求解方法,学过线性代数的人都应该知道,即求解线性方程组 ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪a11x1+a12x2+...+a1jxi+...+a1n...
  • Dylan_Frank
  • Dylan_Frank
  • 2016年09月21日 00:31
  • 1075

数值分析 jacobi迭代法求解线性方程组 MATLAB程序实现

数值分析 jacobi迭代法MATLAB程序实现   函数内容(保存为jacobi.m文件,在MATLAB中运行): %function [G,d,x,N]=jacobi(A,b) %Jacob...
  • jingmiaa
  • jingmiaa
  • 2015年11月06日 19:01
  • 5920

西普实验吧密码学CTF--古典密码的安全性不高,但仍然十分美妙,请破译下面的密文

题目链接:http://www.shiyanbar.com/ctf/51 古典密码,说到安全性不高,则置换密码可以通过高频词分析破解 高频词手工破解思路: 单个的字母一般是a或者i,当然也有用o...
  • yalecaltech
  • yalecaltech
  • 2017年03月18日 22:35
  • 1283

迭代算法的经典案例

Fibonacci数列:第3个数等于前面2个数字之和 汉诺塔:从小到大叠加的同心圆,从一根柱子移动到另一根柱子...
  • Robinsone
  • Robinsone
  • 2015年06月19日 10:12
  • 1769

线性方程组6种数值解法的对比研究

线性方程组 6 种数值解法的对比研究 Gauss消去法、LU分解法、Jacobi迭代法、Gauss-Seidel迭代法、超松弛(SOR)迭代法及共轭迭代法的源程序; 通过实际计算,进一步了解各种方法的...
  • zstu_wangrui
  • zstu_wangrui
  • 2015年10月30日 08:45
  • 1877

概率论--古典概型和几何概型

-------------------------------------------几何概型-----------------------------------------------------...
  • qq_24451605
  • qq_24451605
  • 2015年03月16日 18:03
  • 819

几种古典密码学算法

古典密码学可以分为代替密码(也叫做移位密码)和置换密码(也叫做换位密码)两种,其中代替密码典型的有Caesar密码,仿射变换等,置换密码有单表置换和多表置换等。 下面是几种常见古典密码算法的实现。 ...
  • huangyuanlang1
  • huangyuanlang1
  • 2013年08月20日 21:35
  • 2160

古典密码学

古典密码学种类 移位密码 简单,但安全性低,是密钥空间小,穷举法很容易破解, 属于单表替换 代换密码 密钥空间大,穷举法比较难破解,但是仍然由于属于单表替换法,...
  • jiejiaozhufu
  • jiejiaozhufu
  • 2013年12月24日 00:50
  • 3959

迭代算法的一般思路

迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新...
  • auto_ptr
  • auto_ptr
  • 2009年04月17日 03:14
  • 4966

如何用Matlab求线性方程组的通解

如何用Matlab求线性方程组的通解   1 2 3 4 5 6 分步阅读 笔算线性方程组的通解,麻烦费事还容...
  • NarutoInspire
  • NarutoInspire
  • 2015年07月23日 11:56
  • 2296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性方程组的古典迭代算法
举报原因:
原因补充:

(最多只允许输入30个字)