精华内容
下载资源
问答
  • MATLAB求解线性方程组 fsolve源程序代码 部分源码 function equation() global sigma mu T lambda sigma=5; %定义sigma的值 mu=0.4; %定义mu的值 T=1.7; %定义T的值 N=1;
  • Jacobi迭代法,求解线性方程组 matlab代码 Jacobi迭代法,求解线性方程组 matlab代码 Jacobi迭代法,求解线性方程组 matlab代码 Jacobi迭代法,求解线性方程组 matlab代码 Jacobi迭代法,求解线性方程组 matlab代码
  • LU,求解线性方程组 matlab代码
  • DiffParam1 用参数微分法的欧拉法求非线性方程组的一组解 DiffParam2 用参数微分法的中点积分法求非线性方程组的一组解 mulFastDown 用最速下降法求非线性方程组的一组解 mulGSND 用高斯牛顿法求非线性方程组的...
  • 实验 用 matlab 求解线性方程组 第一节 线性方程组的求解 一齐次方程组的求解 rref A %将矩阵 A 化为阶梯形的最简式 nullA %求满足 AX0 的解空间的一组基即齐次线性方程组的基 础解系 例 求下列齐次线性方程组的一个...
  • SOR,求解线性方程组 matlab代码
  • 并将等式限定运算思想应用到求解模糊线性方程中,给出了模糊解的结构元表示方法和解存在的充要条件。同时,推广了模糊线性方程,研究了更一般的双重模糊线性方程。此外,还研究了关于矩形复模糊数和圆楔形复模糊数线性...
  • Wegstein法注意事项 应注意如果x1和x2两点选择不当则连线的斜率等于1与直线y=x无交点从而迭代无法进行这就是Wegstein法应当避免的陷井引入一个量C Wegstein法注意事项 令q1-C 当q0时Wegstein法退化为简单的不动点...
  • 一个简单的Matlab程序,主要通过二分法求解线性问题,每行代码都做了详细的说明。适合初学者使用。
  • 在MVG(多视图几何)和机器学习领域,求解线性方程组几乎是所有算法的根本,本文旨在帮助读者搞懂矩阵分解与线性方程组的关系,并给出利用SVD求解线性方程组的实战代码。 本资源是博文"【动手学MVG】矩阵分解与线性...
  • 实现 Jacobi 和 Gauss-Seidel 方法的简单代码。 要使用,请按照屏幕上的说明进行操作。
  • 结合一个题目演示了如何自编代码实现迭代法求解线性方程组,提供了雅克比迭代和JGS迭代两种方法,各函数文件独立,便于移植,题目附有解答,题目来自西工大数值计算方法作业。采用MATLAB实现。
  • MATLAB线性方程组求解

    万次阅读 多人点赞 2019-01-20 22:58:32
    有唯一解线性方程组求法 ...求解齐次线性方程组基础解系的函数是null Z=null(A)表示返回矩阵A的基础解系组成的矩阵。Z还满足ZTZ=I Z=null(A,‘r’)得出的Z不满足ZTZ=I,但得出的矩阵元素多为整数,顾一...

    有唯一解线性方程组求法

    对于一般的,有唯一解的线性方程组,我们可以转换成矩阵的形式:
    A x = b Ax=b Ax=b 则可以用矩阵运算求解x,即x=A\b

    有无穷解的线性方程组求法

    齐次线性方程组的通解

    求解齐次线性方程组基础解系的函数是null
    Z=null(A)表示返回矩阵A的基础解系组成的矩阵。Z还满足ZTZ=I
    Z=null(A,‘r’)得出的Z不满足ZTZ=I,但得出的矩阵元素多为整数,顾一般都带参数r。

    非齐次线性方程组通解

    非齐次线性方程组在求出基础解析后还要求一个特解。对于矩阵形式的非齐次线性方程组 A x = b Ax=b Ax=b 特解 x 0 x_0 x0的求法为x0=pinv(A)*b;其中函数pinv的意思是伪逆矩阵。

    例如求解线性方程组:

    f ( x ) = { x 1 + 2 x 2 + 2 x 3 = 1 x 2 − 2 x 3 − 2 x 4 = 2 x 1 + 3 x 2 − 2 x 4 = 3 f(x)=\left\{ \begin{aligned} x_1+2x_2+2x_3=1\\ x_2-2x_3-2x_4=2\\ x_1+3x_2-2x_4=3\\ \end{aligned} \right. f(x)=x1+2x2+2x3=1x22x32x4=2x1+3x22x4=3
    在这里插入图片描述
    由输出结果可知方程的解为
    x = k 1 [ − 6 2 1 0 ] + k 2 [ − 4 2 0 1 ] + [ 13 / 77 46 / 77 − 1 / 11 − 40 / 77 ] ( k 1 , k 2 ∈ R ) x=k_1 \begin{bmatrix} -6\\2\\1\\0\\ \end{bmatrix} +k_2 \begin{bmatrix} -4\\2\\0\\1\\ \end{bmatrix} +\begin{bmatrix} 13/77\\46/77\\-1/11\\-40/77\\ \end{bmatrix} \quad (k_1,k_2 ∈R) x=k16210+k24201+13/7746/771/1140/77(k1,k2R)

    利用Gauss消元法求解线性方程组

    在线性代数中,我们主要的方法就是Gauss消元法。MATLAB中将矩阵化为行阶梯型的函数是: R = r r e f ( A ) R=rref(A) R=rref(A)
    我们可以用线性代数知识,编写一个函数,给入矩阵A和b,给出方程的解,函数自动判断是有唯一解还是无穷解。
    在这里插入图片描述

    先搭建出函数的框架

    function varargout = ZJX_solvebygauss(varargin)
    %ZJX_solvebygauss 用高斯消元法解线性方程组
    %   A是系数矩阵,b是常熟矩阵。varargin={A,b};如果b为0,则不输入b
    %   varargout=[S flag],S给出结果
    %   flag为0无解;1唯一解;2齐次通解;3非齐次通解
    A=cell2mat(varargin(1));
    Alie=length(A);Asum=numel(A);Ahang=Asum/Alie;
    if(nargin==2)
        b=cell2mat(varargin(2));
    else
        b(Ahang,1)=0;
    end
    B=A; B(:,Alie+1)=b; 
    
    
    varargout(1)={S};
    if(nargout==2)
        varargout(2)={flag};
    end
    end
    

    现在完成了基本框架的构建,其中varargout等含义参见函数部分的内容。现在我们已经得到了矩阵A、b,A的行数Ahang,A的列数Alie,增广矩阵B。现在在中间的空格位置进行运算。

    程序设计

    Ar=rank(A); Br=rank(B);
    B=rref(B);
    if (Ar<Br)
        flag=0; S=0;
    elseif (Ar==Br && Ar==Alie)
        flag=1; S=B(:,Alie+1);
    else
        %将能构成单位矩阵的列号存储在行向量I中,即存储了极大线性无关向量的编号
        %将剩余列号存入行向量C中
        for i=1:Ar
            for j=1:Alie
                if(B(i,j)==1)
                    I(i)=j;
                    break
                end
            end
        end
        C=setdiff(1:Alie,I);
        %由线性代数知识可得基础解系
        ILim=length(I); CLim=length(C);
        S(Alie,CLim)=0;%初始化S,S行数为A列数,S列数为C的维度
        for i=1:CLim
            S(C(i),i)=-1;
            for j=1:ILim
                S(I(j),i)=B(j,C(i));
            end
        end
        if(nargin==1)
            flag=2;
        else
            flag=3;
            S(Alie,CLim+1)=0;
            for i=1:Ar
                S(I(i),CLim+1)=B(i,Alie+1);
            end
        end
    end
    

    测试

    同样求之前的方程组通解
    { x 1 + 2 x 2 + 2 x 3 = 1 x 2 − 2 x 3 − 2 x 4 = 2 x 1 + 3 x 2 − 2 x 4 = 3 \left\{ \begin{aligned} x_1+2x_2+2x_3=1\\ x_2-2x_3-2x_4=2\\ x_1+3x_2-2x_4=3\\ \end{aligned} \right. x1+2x2+2x3=1x22x32x4=2x1+3x22x4=3
    在这里插入图片描述
    如图,带方程b则S最后一列是特解,不带b则没有特解。日后我们可以直接调用这个函数方便求解。而且比较结果我们发现,这样求出来的特解形式要简单一些。

    展开全文
  • MATLAB实现列主元消去法求解任意线性方程组的解
  • matlab解非线性方程组

    2020-04-28 16:52:17
    matlab解非线性方程组 梯度下降 牛顿法 matlab解非线性方程组 梯度下降 牛顿法 matlab解非线性方程组 梯度下降 牛顿法
  • MATLAB求解线性方程组 fsolve源程序代码
  • matlab求解线性方程组

    2012-09-09 10:56:09
    基于matlab求解线性方程组,A*x=b,求解x向量,最终结果存储在x向量
  • MATLAB求解线性方程组的八种方法

    千次阅读 多人点赞 2021-02-01 13:14:22
    MATLAB求解线性方程组的八种方法 求解线性方程分为两种方法–直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seidel迭代法 超松弛迭代法 共轭梯度法 Bicg迭代法 ...

    MATLAB求解线性方程组的八种方法

    求解线性方程分为两种方法–直接法和迭代法
    常见的方法一共有8种
    直接法
    Gauss消去法
    Cholesky分解法
    迭代法
    Jacobi迭代法
    Gauss-Seidel迭代法
    超松弛迭代法
    共轭梯度法
    Bicg迭代法
    Bicgstab迭代法

    这里我就从计算代码的角度来讲解,在下面也会按照上面这个顺序给出代码,遇到方程组直接带入已知条件就可以得到答案。

    适用条件
    Gauss消去法 :求解中小规模线性方程(阶数不过1000),一般用于求系数矩阵稠密而且没有任何特殊结构的线性方程组

    Cholesky分解法:对称正定方程优先使用,系数矩阵A是n阶对称正定矩阵

    Jacobi迭代法非奇异线性方程组,分量的计算顺序没有关系

    Gauss-Seidel迭代法与Jacobi迭代法相似,但计算的分量不能改变

    超松弛迭代法Jacobi迭代法和Gauss-Seidel迭代法的加速版,由Gauss-Seidel迭代法改进而来,速度较快

    共轭梯度法需要确定松弛参数w,只有系数矩阵具有较好的性质时才可以找到最佳松弛因子。但好处是不用确定任何参数,他是对称正定线性方程组的方法也是求解大型稀疏线性方程组最热门的方法

    Bicg迭代法本质是用双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求

    Bicgstab迭代法本质是用稳定双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求

    Gauss消去法
    第一、二个函数ltri、utri是一定要掌握的,后面的几乎每个函数都要用到
    ltri
    简单来说,当Ly=b
    b,L(非奇异下三角矩阵)已知求y

    function y = ltri(L,b)
    n=size(b,1);
    y=zeros(n,1);
    for j = 1:n-1
        y(j) = b(j)/L(j,j);
        b(j+1:n) = b(j+1:n) - y(j) * L(j+1:n,j);
    end
    y(n) = b(n)/L(n,n);
    
    

    utri
    简单来说,当Ux=y
    y,U(非奇异上三角矩阵)已知求x

    function x = utri(U,y)
    n=size(y,1);
    x=zeros(n,1);
    for j = n:-1:2
        x(j) = y(j)/U(j,j);
        y(1:j-1) = y(1:j-1) - x(j) * U(1:j-1,j);
    end
    x(1) = y(1)/U(1,1);
    

    gauss算法,计算时粘贴过去就好

    function [L,U] = gauss(A)
    n=size(A,1);
    for k = 1:n-1
        A(k+1:n,k) = A(k+1:n,k) / A(k,k);
        A(k+1:n,k+1:n) = A(k+1:n,k+1:n) - A(k+1:n,k)* A(k,k+1:n);
    end
    L = tril(A,-1) + eye(n);
    U = triu(A);
    
    

    使用例子
    已经知道一个线性方程组,这里我就不写出数学形式了,A是系数矩阵,直接把上面写好的函数复制过来在运算就可以。主要是把这两个矩阵写进去。
    A = [1 -1 1 -3;0 -1 -1 1;2 -2 -4 6;1 -2 -4 1];
    b = [1;0;-1;-1];

    A = [1 -1 1 -3;0 -1 -1 1;2 -2 -4 6;1 -2 -4 1];
    b = [1;0;-1;-1];
    [L,U] = gauss(A);
    y = ltri(L,b);
    x = utri(U,y)
    

    Cholesky分解法
    这里是要用到ltri和utri,直接把上面的粘贴过来就好
    这里的算法比较简单,用L = chol(A,‘lower’);这里A是系数矩阵

    使用例子
    用Cholesky分解法求接对称正定方程Ax=b,b随机选取,系数矩阵A是100阶的矩阵
    n = 100;
    A = 10 * eye(n) + diag(ones(n-1,1),-1) + diag(ones(n-1,1),1);

    n = 100;
    A = 10 * eye(n) + diag(ones(n-1,1),-1) + diag(ones(n-1,1),1);
    b = rand(n,1);
    L = chol(A,'lower');
    y = ltri(L,b);
    x = utri(L',y)
    

    Jacobi迭代法
    这个就是Jacobi迭代法的算法,用时复制。这里一共要输入四个条件,系数矩阵A,矩阵b,x0=zeros(列数,1),tol=1.0e-6

    function x = jacobi(A,b,x0,tol)
    D = diag(diag(A));
    L = -tril(A,-1);
    U = -triu(A,1);
    B = D \ (L + U);
    g = D \ b;
    x = B * x0 + g;
    n = 1;
    while norm(x - x0) > tol
        x0 = x;
        x= B * x0 + g;
        n = n + 1;
    end
    x,n
    

    使用例子
    用Jacobi迭代法求解下列方程
    A = [10 -1 0;-1 10 -2;0 -2 10];
    b = [9;7;6];

    A = [10 -1 0;-1 10 -2;0 -2 10];
    b = [9;7;6];
    x = zeros(3,1);
    tol = 1.0e-6;
    x = jacobi(A,b,x,tol);
    

    Gauss-Seidel迭代法
    算法函数,输入四个条件,和上面相同

    function x = seidel(A,b,x0,tol)
    D=diag(diag(A));
    L = -tril(A,-1);
    U = -triu(A,1);
    B = (D - L) \ U;
    g = (D - L) \ b;
    x = B * x0 +g;
    n=1;
    while norm(x - x0) > tol
        x0 = x;
        x= B * x0 + g;
        n = n + 1;
    end
    x,n
    

    用这个方法解上面Jacobi迭代法的例子

    A = [10 -1 0;-1 10 -2;0 -2 10];
    b = [9;7;6];
    x = zeros(3,1);
    tol = 1.0e-6;
    x = seidel(A,b,x,tol);
    

    超松弛迭代法
    算法函数,这里需要输入五个条件:系数矩阵A,矩阵b,x0=zeros(列数,1),w(松弛因子一到二之间)=1.025,tol=1.0e-6

    function x = sor(A,b,x0,w,tol)
    D=diag(diag(A));
    L = -tril(A,-1);
    U = -triu(A,1);
    B = (D - w * L) \ ((1 - w) * D + w * U);
    g = (D - w * L) \ b * w;
    x = B * x0 +g;
    n=1;
    while norm(x - x0) >= tol
        x0 = x;
        x= B * x0 + g;
        n = n + 1;
    end
    x,n
    

    使用例子
    求这个方程组
    A = [10 -1 0;-1 10 -2;0 -2 10];
    b = [9;7;6];

    A = [10 -1 0;-1 10 -2;0 -2 10];
    b = [9;7;6];
    x = zeros(3,1);
    tol = 1.0e-6;
    w = 1.025;
    x = sor(A,b,x,w,tol);
    

    共轭梯度法

    A = [16 4 8 4;4 10 8 4;8 8 12 10;4 4 10 12];
    b = [32;26;38;30];
    tol = 1.0e-6;
    maxit = 1000;
    x = pcg(A,b,tol,maxit)
    

    Bicg迭代法
    这个比较简单,不需要额外写函数,直接用x = bicg(A,b,tol,maxit)maxit取1000

    使用例子

    n = 100;
    A = 10 * eye(n) + diag(ones(n-1,1),-1) + diag(ones(n-1,1),1);
    b = rand(n,1);
    tol = 1.0e-6;
    x = bicg(A,b,tol,1000)
    

    Bicgstab迭代法
    和上面一样的输入条件
    x = bicgstab(A,b,tol,1000)

    n = 100;
    A = 10 * eye(n) + diag(ones(n-1,1),-1) + diag(ones(n-1,1),1);
    b = rand(n,1);
    tol = 1.0e-6;
    x = bicgstab(A,b,tol,1000)
    
    展开全文
  • 求解病态线性方程组的混合算法,董书玲,,求解线性方程组方法一般有高斯消去法,矩阵三角分解法,迭代法等。但一般的求解方法在处理病态线性方程组时,往往会变得不准确
  • 仅供个人参考 仅供个人参考 不得用于商业用途 不得用于商业用途 实验报告 MATLAB^对线性方程组求解一种方法 前言 MATLA是 一个功能强大的线性方程组求解工具它特别适合求解大 规模的线性方程组由于 MATLA是专为矩阵...
  • matlab求解线性方程组代码,用不动点迭代法,用牛顿法法,离散牛顿法法,牛顿-雅可比迭代法,牛顿-SOR迭代法,牛顿下山法,两点割线法,拟牛顿法等方法求非线性方程组的一个根。
  • Broyden方法求解线性方程组Matlab实现,详细介绍了求解线性方程组
  • GS迭代法,求解线性方程组 matlab代码
  • matlab编程 求解线性方程方程组的多种方法
  • 当系数矩阵分解后的矩阵D是可逆阵时,该方法适用,里面附有详细的注释,适合新手阅读
  • 使用牛顿方法解非线性方程组 雅可比 迭代 jacobi matlab代码
  • 实验四 用 MATLAB 求解线性优化问题 一实验目的 了解 Matlab 的优化工具箱利用 Matlab 求解线性优化问题 二相关知识 非线性优化包括相当丰富的内容 们这里就 Matlab 提供的一些函数来介 绍相关函数的用法及其所...
  • matlab求解线性方程组的几种方法之程序,都是一些常用的方法,可作为工具使用
  • MATLAB牛顿法求解线性方程组 源程序代码
  • 精选 精选 精选 精选 精选 精选 精选 精选 精选 精选 第3讲 用MATLAB软件 求逆矩阵和解线性方程组 制作 江西科技师范学院 万重杰 * 3.1 矩阵函数 MATLAB提供了许多矩阵函数. 正是因为拥有了为数众多的完善的矩阵函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,701
精华内容 3,480
关键字:

matlab中求解线性方程组的方法

matlab 订阅