精华内容
下载资源
问答
  • 雅克比高斯迭代,计算方法课程设计。题:用雅克比迭代和高斯赛德尔迭代求解线性方程住,当使用不同算法时,迭代次数是否有影响? E=0.000001
  • 数值方法中用高雅克比法解线性方程组,c++源码。一调试成功。
  • 【计算方法数值分析】消去法、迭代法解线性方程组 顺序消去法、列主元素消去法、雅克比迭代法、高斯—赛德尔迭代法 1.1、顺序消去法 %直接顺序消去法 function x=GaussDirect(a,b) %建立一个函数(a,b) n=length...

    【计算方法数值分析】消去法、迭代法解线性方程组

    顺序消去法、列主元素消去法、雅克比迭代法、高斯—赛德尔迭代法
    在这里插入图片描述
    1.1、顺序消去法
    在这里插入图片描述

    a =
        1.1348    3.8326    1.1651    3.4017
        0.5301    1.7875    2.5330    1.5435
        3.4129    4.9317    8.7643    1.3142
        1.2371    4.9998   10.6721    0.0147
    b =
        9.5342
        6.3941
       18.4231
       16.9237
    x =
        1.0000    1.0000    1.0000    1.0000
    
    

    1.2、列主元素消去法
    在这里插入图片描述

    %列主元高斯消去法解方程组ax=b
    function x=MainElement_gauss(a,b)
    n=length(b)
    a=[a,b];
    for k=1:(n-1)%选主元
        [ar,r]=max(abs(a(k:n,k)));
        r=r+k-1;
        if r>k
            t=a(k,:);a(k,:)=a(r,:);a(r,:)=t;
        end
        %消元
        a((k+1):n,(k+1):(n+1))=a((k+1):n,(k+1):(n+1))-a((k+1):n,k)/a(k,k)*a(k,(k+1):(n+1));
        a((k+1):n,k)=zeros(n-k,1);
        a
    end
    %回代
    x=zeros(n,1);
    x(n)=a(n,n+1)/a(n,n);
    for k=n-1:-1:1
        x(k,:)=(a(k,n+1)-a(k,(k+1):n)*x((k+1):n))/a(k,k);
    end
     
    
    a =
        3.4129    4.9317    8.7643    1.3142   18.4231
             0    1.0215    1.1717    1.3394    3.5326
             0    2.1928   -1.7491    2.9647    3.4085
             0    3.2122    7.4952   -0.4617   10.2457
    a =
        3.4129    4.9317    8.7643    1.3142   18.4231
             0    3.2122    7.4952   -0.4617   10.2457
             0         0   -6.8657    3.2799   -3.5858
             0         0   -1.2118    1.4862    0.2743
    
    a =
        3.4129    4.9317    8.7643    1.3142   18.4231
             0    3.2122    7.4952   -0.4617   10.2457
             0         0   -6.8657    3.2799   -3.5858
             0         0         0    0.9073    0.9073
    x =
        1.0000
        1.0000
        1.0000
        1.0000
    
    

    2.1雅克比迭代法
    在这里插入图片描述

    %雅克比迭代法
    function x=agui_jacobi(a,b)
    %a为系数矩阵,b为右端向量,x0为初始向量(默认为零向量)
    %e为精度(默认为1e-6),N为最大迭代次数(默认为100),x为返回解向量
    n=length(b);
    N=100
    e=1e-6;
    x0=zeros(n,1);
    x=x0;
    x0=x+2*e;
    k=0;
    d=diag(diag(a));
    l=-tril(a,-1);
    u=-triu(a,1);
    while norm(x0-x,inf)>e&k<N
        k=k+1;
        x0=x;
        x=inv(d)*(l+u)*x+inv(d)*b;
        k
        disp(x')
    end
    if k==N warning('已达最大迭代次数'); end
    
    
    k =
         1
             0    1.2500   -0.5000    1.2500   -0.5000    1.5000
    k =
         2
    0.6250    1.0000    0.5000    1.0000    0.5000    1.2500
    ……………………
    ……………………
    k =
     39
     1.0000    2.0000    1.0000    2.0000    1.0000    2.0000
    x =
        1.0000
        2.0000
        1.0000
        2.0000
        1.0000
        2.0000
    
    

    2.2高斯—赛德尔迭代法
    在这里插入图片描述

    %高斯—赛德尔迭代法
    function x=agui_GS(a,b)
    %a为系数矩阵,b为右端向量,x0为初始向量(默认为零向量)
    %e为精度(默认为1e-6),N为最大迭代次数(默认为100),x为返回解向量
    n=length(b);
    N=100;
    e=1e-6;
    x0=zeros(n,1);
    x=x0;
    x0=x+2*e;
    k=0;
    a1=tril(a);
    a2=inv(a1);
    while norm(x0-x,inf)>e&k<N
        k=k+1
        x0=x;
        x=-a2*(a-a1)*x0+a2*b;
    format long 
    k
    disp(x')
    end
    if k==N warning('已达最大迭代次数');end
    
    
    
    k =
        1
      150   1.250000000000000  -0.187500000000000   1.203125000000000   0.113281250000000
      61.481445312500000
    
    k =
        2
      150.613281250000000   1.384765625000000   0.517333984375000   1.560974121093750   0.606796264648438
      61.781032562255859
    …………………………
    …………………………
    k =
        21
      150.999999508971247   1.999999467301403   0.999999550421780   1.999999588778049   0.999999661534511
      61.999999802989073
    x =
       0.999999508971247
       1.999999467301403
       0.999999550421780
       1.999999588778049
       0.999999661534511
       1.999999802989073
    
    
    1. 直接顺序消去法相对于列主元消去法简单便捷无法排除大数吃小数产生的误差,在顺序消去法的过程中,如果出现akk=0,则消元无法进行,如果其绝对值值很小,把它作为除数,就会导致其他元素量级巨大增大和舍入误差的扩大,最后使计算结果失真
    2. 列主元消去法选主元的范围小,不改变未知数的次序,消元法稳定
    3. 雅克比迭代法与高斯—赛德尔迭代法都是随着迭代次数增多,解越来越接近于精确解雅克比迭代法的特点是公式简单,在每一步迭代过程中,用x(k)的全部分量代入求出x(k+1)的全部分量,为同步迭代法,但在雅克比的带过程中,对已经计算的信息未能充分利用,因此使用高斯—赛德尔迭代法每计算出一个新的分量便立即用它取代对应的旧的分量进行迭代,收敛速度更快。
    4. 从实验数据可以看出,同一个线性方程组用高斯—赛德尔迭代法迭代次数是K=21,而雅克比迭代法的迭代次数K=39,相较而言,高斯—赛德尔迭代法手链速度更快。
    展开全文
  • 雅克比方法迭代法解线性方程组

    千次阅读 2011-04-17 20:03:00
    System.out.println("线性方程组为:"); for(int i = 1 ; i ; i++){ if(x1_new) System.out.println("x"+i+" = "+x2[i]); else System.out.println("x"+i+" = "+x1[i]); } } }  

     

    展开全文
  • 雅克比迭代法求解线性方程组c++源代码,结合https://blog.csdn.net/weixin_41788456/article/details/102920383文章学习,内附有输出结果。
  • 1.雅克比迭代法的计算过程: (1).取初始向量: (1) (2).迭代过程 ...

    1.雅克比迭代法的计算过程:

    (1).取初始向量:

                                                                         x^{(0)}=(x_{1}^{(0)},x_{2}^{(0)},\cdots ,x_{n}^{(0)})^{T}                                                                    (1)

    (2).迭代过程

                                                          \left\{\begin{matrix} x_{1}^{(k+1)}=\frac{1}{a_{11}}\left ( -a_{12}x_{2}^{(k)}-\cdots -a_{1n}x_{n}^{(k)}+b_{1}\right )\\ x_{2}^{(k+1)}=\frac{1}{a_{22}}\left ( -a_{21}x_{1}^{(k)}-\cdots -a_{2n}x_{n}^{(k)}+b_{2}\right ) \\ \vdots \\ x_{n}^{(k+1)}=\frac{1}{a_{nn}}\left ( -a_{n1}x_{1}^{(k)}-\cdots -a_{nn-1}x_{n-1}^{(k)}+b_{n}\right ) \end{matrix}\right.                                              (2)

    2.求解实例:

                                                                  \begin{bmatrix} 3 & -1 & & & \\ -1 & 3 & -1 & & \\ & \ddots & \ddots & \ddots & \\ & & -1 & 3 & -1 \\ & & & -1 & 3 \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\\ \vdots \\ x_{n-1}\\ x_{n} \end{bmatrix}=\begin{bmatrix} 2\\ 1\\ \vdots \\ 1\\ 2 \end{bmatrix}                                                    (3)

    用 Jacobi  方法求解,精确到小数点后 6 位,  给出所需步数及残差\left \| b-Ax \right \|_{\infty };

    3.求解结果:

    当n=100时,x1...xn=1,所需步数33,残差0.00000155

    //雅克比迭代法,解线性方程组,高等数值计算
    //#include "pch."
    #include <iostream>
    using namespace std;
    #include <iomanip> //参数化输入/输出 
    #include <vector>
    #define  n  100    //矩阵大小
    #define  epsilon  0.001   //精度
    vector<double> jacobi(vector<vector<double>>a, vector<double>b, vector<double>x_new);//申明雅克比迭代方法求解函数
    vector<double> jacobi(vector<vector<double>>a, vector<double>b, vector<double>x_new)
    {
    	int num = size(b), n_cishu = 0;
    	double sum = 0, max_precision = 0;;
    	vector<double>x_old(num);
    	do
    	{
    		n_cishu++;
    		for (int j = 0; j < num; j++)
    		{
    			x_old[j] = x_new[j];
    		}
    		for (int j = 0; j < num; j++)
    		{
    			sum = 0;
    			for (int k = 0; k < num; k++)
    			{
    				if (j != k)
    				{
    					sum = sum - a[j][k] * x_old[k];
    				}
    			}
    			x_new[j] = (sum + b[j]) / a[j][j];
    			max_precision = 0;
    			for (int i = 0; i < num; i++)
    			{
    				sum = fabs(x_new[i] - x_old[i]);
    				if (sum > max_precision)
    				{
    					max_precision = sum;
    				}
    			}
    		}
    	} while (max_precision > epsilon);
    	//残差计算
    	double max_residual = 0;
    	for (int i = 0; i < num; i++)
    	{
    		sum = b[i];
    		for (int j = 0; j < num; j++)
    		{
    			sum = sum - a[i][j] * x_new[j];
    		}
    		if (sum > max_residual)
    		{
    			max_residual = sum;
    		}
    	}
    	//cout << "所需步数:" << n_cishu << "残差:" << fixed << setprecision(8) << setw(10) << max_residual << endl;
    	return x_new;
    }
    int main()
    {
    	vector<vector<double>>a;
    	a.resize(n, vector<double>(n));//定义线性方程组系数矩阵A
    	vector<double>b(n);  //定义线性方程组右边列向量B
    	vector<double>x(n);  //初始化向量
    	a[0][0] = 3, a[0][1] = -1, b[0] = 2;
    	for (int i = 1; i < n - 1; i++)
    	{
    		a[i][i - 1] = -1;
    		a[i][i] = 3;
    		a[i][i + 1] = -1;
    		b[i] = 1;
    	}
    	a[n - 1][n - 2] = -1; a[n - 1][n - 1] = 3, b[n - 1] = 2;
    	x = jacobi(a, b, x);
    	for (int i = 0; i < n; i++)
    		cout << x[i] << endl;
    }

     

    展开全文
  • %---雅克比迭代法----- %---Jacobi iteration method clear;clc; % A=[10,-1,-2;-1,10,-2;-1,-1,5]; % b=[72,83,42]'; A=[ 28,-3,0,0,0;  -3,38,-10,0,-5;  -10,0,25,-15,0;  0,0,-15,45,0;  0,-5,0,

    %---雅克比迭代法-----
    %---Jacobi iteration method
    clear;clc;
    % A=[10,-1,-2;-1,10,-2;-1,-1,5];
    % b=[72,83,42]';
    A=[ 28,-3,0,0,0;
        -3,38,-10,0,-5;
        -10,0,25,-15,0;
        0,0,-15,45,0;
        0,-5,0,0,30];
    b=[10,0,0,0,0]';
    N=length(b);
    fprintf('库函数计算结果:');
    x=inv(A)*b   %库函数计算结果
    B=zeros(N,N);g=zeros(N,1);
    x=zeros(N,1);%迭代初始值
    eps=0.001;%相邻解的距离小于该数时,结束迭代
    % for i=1:N
    %     B(i,:)=-A(i,:)/A(i,i);
    %     B(i,i)=0;       %迭代矩阵
    %     g(i)=b(i)/A(i,i);
    % end
    D=diag(diag(A));
    E=-tril(A,-1);%下三角
    F=-triu(A,1);%上三角
    B=inv(D)*(E+F);g=inv(D)*b;

    for k=1:100 %最大迭代次数为100
        fprintf('第%d次迭代:',k);
        y=B*x+g;
        fprintf('\n与上次计算结果的距离(2范数):%f \n',norm(x-y)^2);
        if norm(x-y)<eps
            break;
        end
        x=y
    end
    x

     

    展开全文
  • 1.雅克比迭代法的计算过程: (1).取初始向量: (1) (2).迭代过程 ...
  • 可以看到,当迭代次数 k 增大时,迭代值会越来越接近 x1 = x2 = x3 = 1。 代码 #include<iostream> #include<math.h> using namespace std; int n; double a[100][100],b[100],x[100][100]; double e...
  • 牛顿迭代法解线性方程组 方程和雅克比矩阵自己输入
  • 解线性方程组迭代法MATLAB源代码(共15个),具体函数及功能如下: 函数名 功能 rs 里查森迭代法求线性方程组Ax=b的解 crs 里查森参数迭代法求线性方程组Ax=b的解 grs 里查森迭代法求线性方程组Ax=b的解 jacobi ...
  • 雅克比迭代公式 公式: 代码实现: 双重循环实现迭代过程 /** *@name Jacobi_iteration:雅克比迭代方法求解向量 *@param1 x:初始向量x *@param2 x1:迭代结果向量 *@param3 error:迭代停止的精度限 **/ ...
  • 雅克比迭代法

    2017-12-06 18:25:28
    考虑线性方程组Ax = b时,一般当A为低阶稠密矩阵时,用主元消去法解此方程组是有效方法。但是,对于由工程技术中产生的大型稀疏矩阵方程组(A的阶数很高,但零元素较多,例如求某些偏微分方程数值解所产生的线性方程...
  • b)) *-6: break k = k + 1 if k == N: print('超过最大迭代次数') return x A = np.mat([[10, -1, -2], [-1,10,-2], [-1, -1, 5]]) b = np.mat([[72], [83], [42]]) print('求解结果:') print(Jacobi(A, b, 1000))...
  • 近段时间遇到了多元非线性方程组求解问题,总是觉得理解的不透彻。所以单独将问题拿出来,循序渐进,由浅到深解决问题。 好吧,从最简单的开始吧! 用迭代法解下面的方程组 2*x1*x1+x2*x2-1=0; x1+x2=0; 基本的...
  • 求解线性方程组迭代法

    千次阅读 2018-05-08 11:14:38
    求解线性方程组的迭代法 实验目的 (1)熟悉求解线性方程组的迭代方法有关理论和方法。 (2)会编写雅可比迭代法和高斯-塞尔德迭代法...1、用雅克比迭代法解方程组 1.2 程序设计 #include &lt;bits/stdc++...
  • 本文档使用的是雅克比迭代法求解线性方程组,实际上就是求解矩阵的,具体的算法实现参照西安交通大学版的数值分析课程
  • 解线性方程组

    2016-11-20 22:33:38
    解线性方程组类,这里AX=b, A为n阶系数矩阵,b为n*1的方程组右值向量迭代法(比如:雅克比迭代法、高斯迭代法、超松弛迭代法)求解方程组解时,要设置解的精度、最大迭代次数。不同的参数设置对最终解的影响很大,迭代...
  • 雅克比迭代和高斯赛德尔迭代法可以用来求线性方程组的近似,与雅克比迭代不同的是,高斯赛德尔迭代法在第k+1次迭代求 xik+1x_{i}^{k+1}xik+1​时,会用到 x1k,x2k..xi−1kx_{1}^{k},x_{2}^{k}..x_{i-1}^{k}x1k​,...
  • 数值计算——线性方程组迭代法

    万次阅读 2017-03-30 16:53:36
    数值计算——线性方程组迭代法 与上一篇中的直接法相比,迭代法是从的一个初始估计值除法,逐步对他进行改进,知道到达所需的精度,理论上来说,经过无限次的迭代之后就可以得到真,但实际上只需要达到所需要...
  • 用matlab实现了求解线性方程组的三种方法,分别是雅克比迭代法,高斯-赛德尔迭代法,超松弛迭代法。程序没有注释,希望懂得原理之后再看。
  •  在实际项目的一些矩阵运算模块中,往往需要对线性方程组进行求解以得到最终结果。  然而,你无法让计算机去使用克莱默法则或者高斯消元法这样的纯数学方法来进行求解。  计算机解决这个问题的方法是迭代法。...
  • 线性方程组迭代解法

    千次阅读 2016-05-10 18:08:22
    在线性代数中我们学习过求解线性方程组的解法主要有两种:高斯消元法与克拉默法则。但克拉默法则要求方程个数等于未知量个数且行列式不为零,这在业界很难满足;...雅克比迭代法 对于线性方程组AX=bAX=b,可以
  • 迭代法

    2012-10-19 22:10:34
    例如:试分别用雅克比迭代法,高斯-赛德尔迭代法,超松弛迭代法(取ω=1.15)解线性方程组    当max ¦xi(k+1)-Xi(k)¦-5时迭代终止。方程组的精确解为X*=(1,-2,-1,3)T。 一.雅克比迭代法的公式:Xi
  • 使用迭代法解线性方程组---雅克比方法、高斯-赛德尔方法、逐次超松弛法。适合数值计算的实验
  • 雅克比(Jacobi)方法

    2018-10-26 00:51:00
    可以用来求解协方差矩阵的特征值和特征向量。 雅可比方法(Jacobian method)求全积分的一种方法,把拉格朗阶查皮特方法推广到求n个自变量...考虑线性方程组Ax=b时,一般当A为低阶稠密矩阵时,用主元消去法解此方程...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

雅克比迭代法解线性方程组