精华内容
下载资源
问答
  • 结合一个题目演示了如何自编代码实现迭代法求解线性方程组,提供了雅克比迭代和JGS迭代两种方法,各函数文件独立,便于移植,题目附有解答,题目来自西工大数值计算方法作业。采用MATLAB实现。
  • Jacobi迭代法求解线性方程组 matlab代码 Jacobi迭代法求解线性方程组 matlab代码 Jacobi迭代法求解线性方程组 matlab代码 Jacobi迭代法求解线性方程组 matlab代码 Jacobi迭代法求解线性方程组 matlab代码
  • MATLAB Jacobi迭代法 求解线性方程组

    千次阅读 2021-10-05 10:40:55
    2.Jacobi迭代法求解线性方程组 例子 3.Jacobi迭代法 编程实现 总结 前言 雅克比(Jacobi)迭代法求解线性方程组 一、Jacobi迭代法是什么? 简单的讲其实就是我们平时求解的方法(最常用的方法)...

    文章目录



    前言

                                           雅克比(Jacobi)迭代法求解线性方程组


    Jacobi迭代法是什么? 

    简单的讲其实就是我们平时求解的方法(最常用的方法)

    以下是Jacobi的迭代过程:

     

     


    二、对应的编程思想以及公式推导


    1.Jacobi迭代法 公式推导

    线性方程组为:                         Ax=b

    将A分裂:                          A=D+L+U         

    从而得到迭代公式为:     x=-D^{-1}\left( L+U \right) x+D^{-1}b

    由于D为对角元素,从而有:          D^{-1}=\frac{1}{D}

    即编程语言可以写为:       x=-\left( L+U \right) *x/D+b/D

    推到过程为:

                                                Ax=b \\\ \\ A=D+L+U \\\ D=\left( \begin{matrix} a_{11}& & & \\ & a_{22}& & \\ & & \ddots& \\ & & & a_{nn}\\ \end{matrix} \right) \ \\\L=\left( \begin{matrix} 0& & & \\ a_{21}& 0& & \\ \vdots& & \ddots& \\ a_{n1}& \cdots& a_{nn-1}& 0\\ \end{matrix} \right) \ \\\ U=\left( \begin{matrix} 0& a_{12}& \cdots& a_{1n}\\ & 0& & a_{2n}\\ & & \ddots& \vdots\\ & & & 0\\ \end{matrix} \right) \\\ Ax=\left( D+L+U \right) x=b \\\ Dx=-\left( L+U \right) x+b \\\ x=-D^{-1}\left( L+U \right) x+D^{-1}b


    2.Jacobi迭代法求解线性方程组 例子

     

     

     

    3.Jacobi迭代法 编程实现

    完整程序代码为:

    function [x,error,iter]=GJJacobi_solve(A,b,epsilon,max_iter)
    % x , error , iter 为输出变量     A ,b epsilon,max_iter为输入变量
    n=length(b);
    x=zeros(n,1);
    % 首先编写第一步代码目的  x =-(L+U)*x/D+b/D
    %第二部明确符号的意义 D表示对角线的元素 L表示下三角的元素 U表示上三角的元素 b表示列向量的长度
    %确定误差error = norm(x-y)
    
    %输入矩阵A 以及 列向量b
    
    
    %表示L  U  D
    L=tril(A); %tril(A)表示取矩阵A的下三角元素,  包含了对角线元素
    U=triu(A); %triu(A) 表示取矩阵A的上三角元素,  包含了对角线元素
    D=diag(diag(A)); %表示取矩阵A的主对角元素
    
    
    
    %想办法使得L,U对角线元素都为0
                                 % L(logical(eye(size(L))))=0; %由于维度不对,从而只是等号右边为零不对
                                 %  U(logical(eye(size(U))))=0;
    %改正
                                  %B =  zeros(1,n);              %[0,0,0]
    L(logical(eye(size(L))))=0;   %[8;11;12]
    U(logical(eye(size(U))))=0;
    
                                 
    
    %需要看看是否输出的是对角线元素为0
    disp(L)
    disp(U)
    
    
    
    
    
    
    
    % 先写一个循环(发现运用一个变量时需要先初始化error=1)
    % 设置最小误差为10e-6
    error = 1 ;%初始化误差变量
    iter = 0;  %初始化迭代步数变量
    while error>epsilon && iter<max_iter % 给出循环条件,以及函数输入变量epsilon,max_iter
        for i =1:max_iter
            y=x;%迭代前的矩阵,用来计算迭代误差
            x=-D\(L+U)*x+D\b ;  %从这里知道需要把L,U,D,b表示出来 x=-(L+U)*x/D+b/D 这个维度错误
            error=norm(x-y);  %知道迭代前的数据y,以及迭代后的数据x,设定误差为(x-y)的范数
            
            if error>epsilon %给出判断误差是否减小
                iter =iter+1;
                break
            end     %if 需要 end 结束
        end         %for 需要 end 结束
    end             %while 需要 end 结束
    

    测试代码为:

     A=[8 -3 2
        4 11 -1
        6 3 12];
    b=[20;33;36];
    epsilon=10e-6;
    max_iter=15;
    [x,error,iter]=GJJacobi_solve(A,b,epsilon,max_iter);
    disp('程序计算的精确解为:');
    disp(x);
    disp('最大迭代次数下的误差:');
    disp(error);
    disp('最小迭代次数:');
    disp(iter+1);

    运行结果为:

         0     0     0
         4     0     0
         6     3     0
    
         0    -3     2
         0     0    -1
         0     0     0
    
    程序计算的精确解为:
        3.0000
        2.0000
        1.0000
    
    最大迭代次数下的误差:
       4.1060e-12
    
    最小迭代次数:
        14



    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了雅克比迭代求解线性方程组

    展开全文
  • 数值分析实验内容,用matlab写程序实现雅可比Jacobi迭代法迭代法解线性方程组的基本思想是构造一串收敛到解的序列,即建立一种从已有近似解计算新的近似解的规则,有不同的计算规则得到不同的迭代法
  • function x=myjacob(A,b,x0) myeps=0.0001; n=length(b); err0=1; while err0>myeps x1=zeros(n,1); for i=1:n s1=A(i,i:i-1)*x0(1:i-1); s2=A(i,i+1:n)*x0(i+1:n); x1(i)=(b(i)-s1-s2)/A(i,i);...end.
    function x=myjacob(A,b,x0)
    myeps=0.0001;
    n=length(b);
    err0=1;
    while err0>myeps
        x1=zeros(n,1);
        for i=1:n
            s1=A(i,i:i-1)*x0(1:i-1);
            s2=A(i,i+1:n)*x0(i+1:n);
            x1(i)=(b(i)-s1-s2)/A(i,i);
        end
        err0=norm(x1-x0);x0=x1;
    end
    x=x1;
    end

    展开全文
  • 计算线性方程组Ax=b,利用A=D-L-U,将线性方程组改写为x=Bx+f,用迭代的方法进行计算 以6阶希尔伯特矩阵为例,如果需计算其他矩阵,改一下A,要计算其他阶数,改一下n的值就好 clc clear format rat%也可以用format ...

    计算线性方程组Ax=b,利用A=D-L-U,将线性方程组改写为x=Bx+f,用迭代的方法进行计算
    以6阶希尔伯特矩阵为例,如果需计算其他矩阵,改一下A,要计算其他阶数,改一下n的值就好

    clc
    clear
    format rat%也可以用format long
    n=6
    %定义希尔伯特矩阵
    H=zeros(n,n);
    for i=1:n
        for j=1:n
            H(i,j)=1/(i+j-1);
        end
    end
    H
    %此处可定义不同的矩阵A,向量b
    A=H;
    b=A*ones(n,1);
    x0=zeros(n,1);%初始向量
    D=zeros(n,n);
    L=zeros(n,n);
    U=zeros(n,n);
    for i=1:n
        D(i,i)=A(i,i);%定义对角阵
    end
    D
    for i=2:n
        for j=1:i-1
            L(i,j)=-A(i,j);%定义单位下三角阵
        end
    end
    L
    for i=1:n
        for j=i+1:n
            U(i,j)=-A(i,j);
        end
    end
    U
    m=1000;%可根据情况改变m的值
    t1=0;
    t2=0;
    %在计算之前先判断两种迭代方法是否收敛
    if max(abs(eig(D^-1*(L+U))))<1
        disp('雅可比迭代法收敛,接下来使用此方法进行求解');
        x1=x0;
        for i=1:m
            x1=D^-1*(L+U)*x1+D^-1*b;
            if(abs(t1-x1)<10^-5)
                sprintf('在经过%d次迭代后,得到收敛解',i)
                break
            end
            t1=x1;
        end
        disp('雅可比迭代法得到的x:');
        disp(x1)
    else
        disp('雅可比迭代法不收敛,计算停止')
    end
    if max(abs(eig((D-L)^-1*U)))<1
        disp('高斯-塞德尔迭代法收敛,接下来使用此方法进行求解');
        x2=x0;
        for i=1:m
            x2=(D-L)^-1*U*x2+(D-L)^-1*b;
            if(abs(t2-x2)<10^-5)
                sprintf('在经过%d次迭代后,得到收敛解',i)
                break
            end
            t2=x2;
        end
        disp('高斯-塞德尔迭代法得到的x:');
        disp(x2)
    else
        disp('高斯-塞德尔迭代法不收敛,计算停止')
    end
    
    展开全文
  • 分别用雅可比迭代法与赛德尔迭代法求解线性方程组Ax=b,其中 A=[-8 1 1;1 -5 1;1 1 -4],b=[1 16 7], 取初始量x(0)=(0,0,0)',精确到0.001。
  • 利用Jacobi迭代法求解非线性方程组Ax=b,当系数矩阵A是严格对角占优矩阵或不可约对角占优时,该方法适用,里面附有详细注释,适合新手阅读
  • 包含代码和文档 分别用雅克比迭代法和高斯-赛德尔迭代法求解方程组,精确到小数点后6位,分别就 给出相应的计算结果
  • 基于matlab的jacobi(雅可比)迭代法求解线性方程组

    万次阅读 多人点赞 2018-11-01 12:21:01
    % 求线性方程组的Jacobi迭代法,调用格式为 % [x, k] = jacobi(A,b,x0,eps,it_max) % 其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-6, % it_max 为最大迭代次数,默认为200 % x 为...

    说明推导见此博客:https://blog.csdn.net/zengxyuyu/article/details/53054880

    源码见下面:

    main.m

    clear
    clc
    A = [8 -3 2;4 11 -1;6 3 12];
    b = [20;33;36];
    [x, n] = jacobi(A,b,[0,0,0]',1.0e-7,30)

    jacobi.m 

    function [x,n] = jacobi(A,b,x0,eps,it_max)
    %  求线性方程组的Jacobi迭代法,调用格式为
    
    %  [x, k] = jacobi(A,b,x0,eps,it_max)
    
    %  其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-6,
    
    %  it_max 为最大迭代次数,默认为200
    
    %  x 为线性方程组的解,k迭代次数
    if nargin ==3
        eps = 1.0e-6;
        M = 200;
    elseif nargin<3
        disp('输入参数数目不足3个');
        return
    elseif nargin ==5
        M = it_max;
    end
    D = diag(diag(A));%求A的对角矩阵
    L = -tril(A,-1);%求A的下三角矩阵
    U = -triu(A,1);%求A的上三角矩阵
    B = D\(L+U);
    f = D\b;
    x = B*x0+f;
    n = 1;%迭代次数
    while norm(x-x0)>=eps
        x0 = x;
        x = B*x0+f
        n = n+1;
        if(n>=M)
            disp('Warning:迭代次数太多,可能不收敛!')
            return;
        end
    end

     

    展开全文
  • jacobi 雅可比迭代法求线性方程组Ax=b的解 gauseidel 高斯-赛德尔迭代法求线性方程组Ax=b的解 SOR 超松弛迭代法求线性方程组Ax=b的解 SSOR 对称逐次超松弛迭代法求线性方程组Ax=b的解 JOR 雅可比超松弛迭代法求线性...
  • Jacobi迭代求解MATLAB

    2018-10-12 20:16:40
    进过18次Jacobi迭代后,其相邻迭代解间无穷范数误差小于:1.0e-8 此时Jacobi迭代解如下: x = 1.099999996412137 1.199999996412137 1.299999995744652
  • MATLAB迭代法收敛判断

    2021-01-04 13:24:04
    包括雅可比迭代,高斯赛德尔迭代,松弛迭代
  • 文章目录前言1 直接法2 迭代法小结 前言 今天我们要说的就是数值微积分,赶紧看看他和高等数学中的微积分有什么区别吧。本文是科学计算与MATLAB语言专题六第2小节的学习笔记,如果大家有时间的话,可以去听听课,...
  • 直接法:一般实和求解低阶稠密线性方程组。 迭代法:适用于求解大型稀疏矩阵线性方程组;要考虑算法的收敛性
  • 目录 算法步骤 例题 程序代码 运行结果 算法步骤 例题 程序代码 function x=Jacobidiedai(A,b,x0,eps,N) n=length(b); if nargin<5 N=500; end if nargin<4 eps=1e-6;... ...
  • 使用牛顿方法解非线性方程组 雅可比 迭代 jacobi matlab代码
  • 雅可比(Jacobi)迭代法解线性方程组的Matlab实现

    万次阅读 多人点赞 2020-04-26 14:43:21
    雅可比(Jacobi)迭代法解线性方程组的Matlab实现 迭代法解线性方程组的基本思想是构造一串收敛到解的序列,即建立一种从已有近似解计算新的近似解的规则,有不同的计算规则得到不同的迭代法。 本文是常用的迭代法之...
  • A=[4,3,0;3,4,-1;0,-1,4]; b=[24,30,-24]; x=jokebi(A,b); function x2=jokebi(B,c) D=diag(diag(B)); U=D-triu(B); L=D-(triu(B))'; x1=(rand(1,size(B,1)))';... x2=inv(D)*(U+L)*x1+inv(D
  • 雅克比迭代求解线性方程组(MATLAB)课设,已经调试成功
  • 求解线性⽅方程组 Ax=b,其中 A 为 ...比较 Jacobi 迭代法、Gauss-Seidel 迭代法、逐次超松弛迭代法、 共轭梯度法与高斯消去法、列主元消去法的计算时间。改变逐次超松弛迭代法的松弛因⼦, 分析其对收敛速度的影响。
  • 雅克比迭代法求解方程组;雅克比迭代法就是众多迭代法中比较早且较简单的一种,其命名也是为纪念普鲁士著名数学家雅可比。雅克比迭代法的计算公式简单,每迭代一次只需计算一次矩阵和向量的乘法,且计算过程中原始...
  • 雅克比迭代求解线性方程组(MATLAB程序设计与应用)课设,里面有四份不同的课设,都已近调试过了。要在MATLAB7.0上运行
  • 雅克比迭代+高斯迭代+SOR迭代法Matlab程序,同时支持谱半径计算,利于直接比较三种算法
  • function [X_reality,n_reality] = ...% A为迭代的系数矩阵 % b为方程组右边的常数项(列向量) % X_start为迭代的初始向量 % n_limit为最大允许迭代的次数 % tolerance为精度上限值 %% % X_reality为最后结果...
  • 雅可比迭代法和高斯-塞德尔迭代法 雅可比迭代法和高斯-塞德尔迭代法
  • jaccobi雅可比迭代解方程组算法,数值分析上机作业,数值计算上机作业
  • 1.雅克比迭代法的计算过程: (1).取初始向量: (1) (2).迭代过程 ...
  • 如何将jacobi迭代求解线性方程组时的每次迭代误差用matlab绘出? 这是我的代码: function [x,n]=jaccbi(A,b,x0,eps,t) if nargin==3; eps=1e-6; m=200; elseif nargin error('输入的数有误'); return; ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 345
精华内容 138
关键字:

matlab雅可比迭代法求解

matlab 订阅