精华内容
下载资源
问答
  • MATLAB解线性方程组

    2009-12-29 16:21:42
    MATLAB解线性方程组MATLAB解线性方程组MATLAB解线性方程组
  • matlab求解线性方程组

    2012-09-09 10:56:09
    基于matlab求解线性方程组,A*x=b,求解x向量,最终结果存储在x向量中。
  • 例如方程组:法1:左除法>> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4];>> x=A\bx =1.4818-0.46060.3848法2:求逆法>> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4];>> x=inv(A)*bx =1.4818-0...

    例如方程组:

    法1:左除法

    >> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4];

    >> x=A\b

    x =

    1.4818

    -0.4606

    0.3848

    法2:求逆法

    >> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4];

    >> x=inv(A)*b

    x =

    1.4818

    -0.4606

    0.3848

    法3:用linsolve函数求解

    >> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4];

    >> x=linsolve(A,b)

    x =

    1.4818

    -0.4606

    0.3848

    法4:用solve函数求解

    >> [x1 x2 x3]=solve(‘3*x1+x2-x3=3.6‘,‘x1+2*x2+4*x3=2.1‘,‘-x1+4*x2+5*x3=-1.4‘)

    x1 =

    1.4818181818181818181818181818182

    x2 =

    -0.46060606060606060606060606060606

    x3 =

    0.38484848484848484848484848484848

    如果要控制精度,可以使用vpa函数

    >> x1=vpa(x1,5)

    x1 =

    1.4818

    具体选择哪种方法,可以根据需要选择。

    展开全文
  • Matlab解线性方程组

    2013-08-12 08:34:02
    本文教你如何用matlab解线性方程组matlab是很有用的工具
  • Matlab解线性方程组的迭代法-解线性方程组的迭代法.rar 解线性方程组的迭代法 一起分享 附件内容: Figure6.jpg
  • Matlab求解线性方程组

    千次阅读 2014-03-11 11:41:09
    Matlab求解线性方程组 AX=B或XA=B 在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”。如: X=A\B表示求矩阵方程AX=B的; X=B/A表示矩阵方程XA=B的。 对方程组X=A\B,...
    Matlab求解线性方程组
    AX=B或XA=B
    在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”。如:
    X=A\B表示求矩阵方程AX=B的解;
    X=B/A表示矩阵方程XA=B的解。
    对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。

    如果矩阵A不是方阵,其维数是m×n,则有:
    m=n 恰定方程,求解精确解;
    m>n 超定方程,寻求最小二乘解;
    m<n 不定方程,寻求基本解,其中至多有m个非零元素。
    针对不同的情况,MATLAB将采用不同的算法来求解。

    一.恰定方程组
    恰定方程组由n个未知数的n个方程构成,方程有唯一的一组解,其一般形式可用矩阵,向量写成如下形式:
    Ax=b 其中A是方阵,b是一个列向量;
    线性代数教科书中,最常用的方程组解法有:
    (1)利用cramer公式来求解法;
    (2)利用矩阵求逆解法,即x=A-1b;
    (3)利用gaussian消去法;
    (4)利用lu法求解。
    一般来说,对维数不高,条件数不大的矩阵,上面四种解法所得的结果差别不大。前三种解法的真正意义是在其理论上,而不是实际的数值计算。MATLAB中,出于对算法稳定性的考虑,行列式及逆的计算大都在lu分解的基础上进行。
    在MATLAB中,求解这类方程组的命令十分简单,直接采用表达式:x=A\b。
    在MATLAB的指令解释器在确认变量A非奇异后,就对它进行lu分解,并最终给出解x;若矩阵A的条件数很大,MATLAB会提醒用户注意所得解的可靠性。
    如果矩阵A是奇异的,则Ax=b的解不存在,或者存在但不唯一;如果矩阵A接近奇异时,MATLAB将给出警告信息;如果发现A是奇异的,则计算结果为inf,并且给出警告信息;如果矩阵A是病态矩阵,也会给出警告信息。
    注意:在求解方程时,尽量不要用inv(A)*b命令,而应采用A\b的解法。因为后者的计算速度比前者快、精度高,尤其当矩阵A的维数比较大时。另外,除法命令的适用行较强,对于非方阵A,也能给出最小二乘解。

    二.超定方程组
    对于方程组Ax=b,A为n×m矩阵,如果A列满秩,且n>m。则方程组没有精确解,此时称方程组为超定方程组。线性超定方程组经常遇到的问题是数据的曲线拟合。对于超定方程,在MATLAB中,利用左除命令(x=A\b)来寻求它的最小二乘解;还可以用广义逆来求,即x=pinv(A),所得的解不一定满足Ax=b,x只是最小二乘意义上的解。左除的方法是建立在奇异值分解基础之上,由此获得的解最可靠;广义逆法是建立在对原超定方程直接进行householder变换的基础上,其算法可靠性稍逊与奇异值求解,但速度较快;
    【例7】
    求解超定方程组
    A=[2 -1 3;3 1 -5;4 -1 1;1 3 -13]
    A=
    2 -1 3
    3 1 -5
    4 -1 1
    1 3 -13
    b=[3 0 3 -6]’;
    rank(A)
    ans=
    3
    x1=A\b
    x1=
    1.0000
    2.0000
    1.0000
    x2=pinv(A)*b
    x2=
    1.0000
    2.0000
    1.0000
    A*x1-b
    ans=
    1.0e-014
    -0.0888
    -0.0888
    -0.1332
    0
    可见x1并不是方程Ax=b的精确解,用x2=pinv(A)*b所得的解与x1相同。

    三.欠定方程组
    欠定方程组未知量个数多于方程个数,但理论上有无穷个解。MATLAB将寻求一个基本解,其中最多只能有m个非零元素。特解由列主元qr分解求得。 搜索
    【例8】
    解欠定方程组
    A=[1 -2 1 1;1 -2 1 -1;1 -2 1 5]
    A=
    1 -2 1 1
    1 -2 1 -1
    1 -2 1 -1
    1 -2 1 5
    b=[1 -1 5]’
    x1=A\b
    Warning:Rank deficient,rank=2 tol=4.6151e-015
    x1=
    0
    -0.0000
    0
    1.0000
    x2=pinv(A)*b
    x2=
    0
    -0.0000
    0.0000
    1.0000

    四.方程组的非负最小二乘解
    在某些条件下,所求的线性方程组的解出现负数是没有意义的。虽然方程组可以得到精确解,但却不能取负值解。在这种情况下,其非负最小二乘解比方程的精确解更有意义。在MATLAB中,求非负最小二乘解常用函数nnls,其调用格式为:
    (1)X=nnls(A,b)返回方程Ax=b的最小二乘解,方程的求解过程被限制在x 的条件下;
    (2)X=nnls(A,b,TOL)指定误差TOL来求解,TOL的默认值为TOL=max(size(A))*norm(A,1)*eps,矩阵的-1范数越大,求解的误差越大;
    (3)[X,W]=nnls(A,b) 当x(i)=0时,w(i)<0;当下x(i)>0时,w(i)0,同时返回一个双向量w。
    【例9】求方程组的非负最小二乘解
    A=[3.4336 -0.5238 0.6710
    -0.5238 3.2833 -0.7302
    0.6710 -0.7302 4.0261];
    b=[-1.000 1.5000 2.5000];
    [X,W]=nnls(A,b)
    X=
    0
    0.6563
    0.6998
    W=
    -3.6820
    -0.0000
    -0.0000
    x1=A\b
    x1=
    -0.3569
    0.5744
    0.7846
    A*X-b
    ans=
    1.1258
    0.1437
    -0.1616
    A*x1-b
    ans=
    1.0e-0.15
    -0.2220
    0.4441
    0
    展开全文
  • matlab 求解线性方程组——迭代法

    万次阅读 2018-10-03 16:08:07
    文章目录标签(空格分隔): matlab 线性方程组 迭代 数值@[toc]matlab 求解线性方程组——迭代法1 测试迭代法求解函数GaussSeidelIteration()、JacobiIteration()2 迭代法求解函数GaussSeidelIteration()3 迭代法...

    标签(空格分隔): matlab 线性方程组 迭代 数值

    matlab 求解线性方程组——迭代法

    1 测试迭代法求解函数GaussSeidelIteration()、JacobiIteration()

    clc,clear
    % m=[1 2
    %    -1 2]
    % n1=matrixnorm([1 2;-1 2],1)
    % n2=matrixnorm([1 2;-1 2],2)
    % ninf=matrixnorm([1 2;-1 2],inf)
    % 
    % cond1=matrixcond(m,1)
    % cond2=matrixcond(m,2)
    % condinf=matrixcond(m,inf)
    
    % a=[10.2 -0.25 -.3 
    %     -.41 1.13 -.15 
    %     -.25 -.14 1.21]
    % b=[.515
    %     1.555
    %     2.78]
    % precision=1e-3
    % x=[2 2 2]'
    % x=JacobiIteration(a,b,precision,x)
    % xsystem=inv(a)*b
    
    a=[6 -1 -1
        -1 6 -1
        -1 -1 6]
    b=[11.33 32 42]'
    precision=1e-3
    x=[4 6 8]'
    x=GaussSeidelIteration(a,b,precision,x) 
    xsystem=inv(a)*b
    

    运行结果:

    iterationTimes =
         7
    x =
        4.6661
        7.6189
        9.0475
    xsystem =
        4.6661
        7.6189
        9.0475
    

    2 迭代法求解函数GaussSeidelIteration()

    function x=GaussSeidelIteration(a,b,precision,x) 
    %时间:2013/12/08 姓名:邓能财   
    disp('%GaussSeidel——迭代法求解线性方程组')
    if nargin<4,  x=zeros(dim,1);
    elseif nargin<3,  precision=1e-9; end
    [dim,dim2]=size(a);
    disp('迭代的方程为:x(k+1)=s*xk+f')
    %错误的矩阵:
    assert( dim==dim2 && dim==length(b),...
        ['Argument input error:   ',...
        'Matrix dimensions must agree.'])
    d=diag(diag(a))
    a=a-d;
    l=-tril(a)
    u=-triu(a)
    invd_l=inv(d-l)
    s=invd_l*u
    f=invd_l*b
    x_=ones(dim,1);
    precision=precision/10;
    x
    iterationTimes=0
    while any(abs(x-x_)>=precision)
        x_=x;
        x=s*x_+f
        iterationTimes=iterationTimes+1
    end
    end
    

    3 迭代法求解函数JacobiIteration()

    function x=JacobiIteration(a,b,precision,x)
    %Jacobi迭代法求解线性方程组
    %时间:2013/12/08 姓名:邓能财   
    [dim,dim2]=size(a);
    if nargin<4,  x=zeros(dim,1);
    elseif nargin<3,  precision=1e-10; end
    disp('迭代的方程为:x(k+1)=g*xk+f')
    %错误的矩阵:
    assert( dim==dim2 && dim==length(b),...
        ['Argument input error:   ',...
        'Matrix dimensions must agree.'])
    d=diag(diag(a))
    invd=inv(d)
    g=invd*(d-a)
    f=invd*b
    x_=ones(dim,1);
    iterationTimes=0
    while any(abs(x-x_)>=precision)
        x_=x;
        x=g*x_+f
        iterationTimes=iterationTimes+1
    end
    end
    

    4 求解矩阵的范数matrixnorm()

    function n=matrixnorm(m,p) 
    %求矩阵的p(1,2,inf)范数
    %时间:2013/12/08 姓名:邓能财   
    if nargin<2,  p=1; end
    [dim,dim2]=size(m);
    %错误的矩阵:
    assert( dim==dim2,...
        ['Argument input error:   ',...
           'Matrix dimensions must agree.'])
    switch p
        case 1
           disp('矩阵的一范数')
           sum_=sum(m,1)
           ssum_=sym(sum_)
           [max_,maxindex]=max(sum_)
           n=max_
        case inf
            disp('矩阵的无穷范数')
           sum_=sum(m,2)
           ssum_=sym(sum_)
           [max_,maxindex]=max(sum_)
           n=max_
         case 2
            disp('矩阵的2范数')
            t=m'*m
            st=sym(m'*m)
            %t的特征多项式
            syms x
            tx=x*eye(dim)-t
            fx=det(tx)
            eigenvalue=eig(t)
            seig=eig(st)
            sym(eigenvalue)
            real_eigenvalue=real(abs(eigenvalue))
            [max_,maxindex]=max(real_eigenvalue)
            n=sqrt(max_)
        otherwise
            error('第三个参数只能为1、2或inf')
    end
    end
    

    5 求解矩阵的范数条件数matrixcond()

    function c=matrixcond(m,p)
    %时间:2013/12/08 姓名:邓能财   
    if nargin<2,  p=1; end
    [dim,dim2]=size(m);
    %错误的矩阵:
    assert( dim==dim2,...
        ['Argument input error:   ',...
        'Matrix dimensions must agree.'])
    switch p
        case 1
            disp('矩阵的一范数条件数')
            inv_m=inv(m)
            sinv_m=inv(sym(m))
            c=matrixnorm(m,p)*matrixnorm(inv_m,p)
        case inf
            disp('矩阵的无穷范数条件数')
            inv_m=inv(m)
            sinv_m=inv(sym(m))
            c=matrixnorm(m,p)*matrixnorm(inv_m,p)
        case 2
            disp('矩阵的2范数条件数')
            inv_m=inv(m)
            sinv_m=inv(sym(m))
            c=matrixnorm(m,p)*matrixnorm(inv_m,p)
        otherwise
            error('第二个参数只能为1、2或inf')
    end
    end
    

    6 向量的p范数vectornorm()

    function n=vectornorm(x,p) %向量的p范数
    %时间:2013/12/08 姓名:邓能财   
    if nargin<2,  p=1; end
    %错误的p:
    assert( p>0,...
        ['Argument input error:   ',...
           'The next argument must be positive number! '])
     n=sum(abs(x).^p)^(1/p);
    end
    

    联系作者 definedone@163.com

    end

    展开全文
  • 实验 用 matlab 求解线性方程组 第一节 线性方程组求解 一齐次方程组的求解 rref A %将矩阵 A 化为阶梯形的最简式 nullA %求满足 AX0 的空间的一组基即齐次线性方程组的基 础系 例 求下列齐次线性方程组的一个...
  • 求解线性方程组 solvelinsolve 例 A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1]; %矩阵的行之间用分号隔开元素之间用逗号或空格 B=[3;1;1;0] X=zeros(4,1%建立一个 4 元列向量 X=linsolve(A,B) diff fun var n对表达式fun ...
  • 利用逆矩阵、矩阵除法、x=inv(A'A)*A'llind.m文件如下,%求解线性方程组% x1 + 2x2 + 3x3 + 9x4 = 5%2x1 + 2x2 + 5x3 + 4x4 = 2%3x1 + 5x2 + x3 + 5x4 = 3%7x1 + 4x2 + 2x3 -10x4 = 8A=[1 2 3 9;2 2 5 4;3 5 1 5;7 4...

    直接解法

    Ax=l,求x。利用逆矩阵、矩阵除法、x=inv(A'A)*A'l

    lind.m文件如下,

    %求解线性方程组

    % x1 + 2x2 + 3x3 + 9x4 = 5

    %2x1 + 2x2 + 5x3 + 4x4 = 2

    %3x1 + 5x2 + x3 + 5x4 = 3

    %7x1 + 4x2 + 2x3 -10x4 = 8

    A=[1 2 3 9;2 2 5 4;3 5 1 5;7 4 2 -10];

    b=[5 2 3 8]';

    x=A\b

    c=inv(A)*b

    d=inv(A'*A)*A'*b

    输出

    >> lind.m

    x =

    4.9227

    -3.2373

    -1.1680

    1.1173

    c =

    4.9227

    -3.2373

    -1.1680

    1.1173

    d =

    4.9227

    -3.2373

    -1.1680

    1.1173

    Warning: Direct access of structure fields returned by a function call (e.g.,

    call to lind) is not allowed. See MATLAB 7.10 Release Notes, "Subscripting Into Function Return Values" for details.

    ??? Attempt to reference field of non-structure array.

    求线性方程组通解

    lind.m内容如下

    %求解线性方程组通解

    % X1 +5 *X2 -1 *X3 -1 *X4 = -1

    % X1 -2 *X2 +1 *X3 +3 *X4 = 3

    %3*X1 +8 *X2 -1 *X3 +1 *X4 = 1

    % X1 -9 *X2 +3 *X3 +7 *X4 = 7

    %系数矩阵和增广矩阵的秩都为2,说明有多组解,且基础解系4-2=2

    %求基础解系用Z=null(A,'r'),可获得标准化的基础解系。特解采用广义逆函数pinv(A),

    %可求得A的广义逆矩阵,采用x0=pinv(A)*b求得特解,通解为x=k1*x1+k2*x2+...+kn*xn+x0

    A=[1 5 -1 -1 ;

    1 -2 1 3;

    3 8 -1 1;

    1 -9 3 7];

    b=[-1 3 1 7]';

    r1=rank(A)%系数矩阵的秩

    r2=rank(A,b)%增广矩阵的秩

    Z=null(A,'r')%求基础解系

    x0=pinv(A)*b%求得特解

    %验证该解

    k1=rand(1);

    k2=rand(1);

    x=k1*Z(:,1)+k2*Z(:,2)+x0

    err=norm(A*x-b)

    >> lind.m

    r1 =

    2

    r2 =

    2

    Z =

    -0.4286 -1.8571

    0.2857 0.5714

    1.0000 0

    0 1.0000

    x0 =

    0.3785

    -0.0876

    0.1873

    0.7530

    x =

    -0.1805

    0.0994

    0.2848

    1.0315

    err =

    1.8971e-015

    矛盾方程组最小二乘解

    %矛盾方程组的最小二乘解

    %原始数据表

    % x 1 1 2 2 2 3 3 4 4 4 5 6

    % y 14.8 15.9 20.2 20.0 18.55 22.2 20.9 21 18.3 20.7 16.1 14.75

    % 分别一次

    A=[ 1 1 2 2 2 3 3 4 4 4 5 6]';

    t=ones(size(A));

    A1=[t,A];

    y= [14.8 15.9 20.2 20.0 18.55 22.2 20.9 21 18.3 20.7 16.1 14.75]';

    %x=inv(A'*A)*A'*y

    x1=pinv(A1)*y%线性回归方程系数

    n=length(A);

    rmse1=sqrt(sum((y-A1*x1).^2)/n)%均方误差

    xsq=A.^2;

    A2=[t,A,xsq]

    x2=pinv(A2)*y%线性回归方程系数

    rmse2=sqrt(sum((y-A2*x2).^2)/n)%均方误差

    xmin=min(A);

    xmax=max(A);

    nx1=xmin:0.2:xmax;

    ny1=x1(1)+x1(2)*nx1;

    nx2=nx1;

    ny2=x2(1)+x2(2)+x2(3)*nx2.^2;

    plot(A',y,'*',nx1,ny1,'+b',nx2,ny2,'r')

    输出

    >> lind.m

    x1 =

    18.8820

    -0.0861

    rmse1 =

    2.5105

    A2 =

    1 1 1

    1 1 1

    1 2 4

    1 2 4

    1 2 4

    1 3 9

    1 3 9

    1 4 16

    1 4 16

    1 4 16

    1 5 25

    1 6 36

    x2 =

    10.3924

    6.3994

    -0.9793

    rmse2 =

    1.0960

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • 利用逆矩阵、矩阵除法、x=inv(A'A)*A'llind.m文件如下,%求解线性方程组% x1 + 2x2 + 3x3 + 9x4 = 5%2x1 + 2x2 + 5x3 + 4x4 = 2%3x1 + 5x2 + x3 + 5x4 = 3%7x1 + 4x2 + 2x3 -10x4 = 8A=[1 2 3 9;2 2 5 4;3 5 1 5;7 4...
  • 标签(空格分隔): matlab 线性方程组 迭代 数值文章目录标签(空格分隔): matlab 线性方程组 迭代 数值@[toc]matlab 求解线性方程组——迭代法1 测试迭代法求解函数GaussSeidelIteration()、JacobiIteration()2 迭代...
  • MATLAB求解线性方程组的八种方法

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

    2013-10-31 18:39:55
    这是一个用介绍如何使用matlab解线性方程组
  • 原文:... 例如方程组: 法1:左除法 >> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4]; >> x=A\b x = 1.4818 -0.4606 0.3848 法2:求逆法 ...
  • %-------共轭梯度法解线性方程组-----------%---Conjugate Gradient method-------%参考教材《数值分析》李乃成&梅立泉,科学出版社2011clear;clc;% A=[10,-1,-2;-1,10,-2;-1,-1,5];% b=[72,83,42]';A=[2 0 1;0 ...
  • matlab解线性方程组

    2020-03-17 15:20:49
  • matlab求解线性方程组

    万次阅读 多人点赞 2019-07-18 17:16:13
    n 有唯一 m=n时,即方程个数等于未知数个数 A=[1 -1 1 -2;2 0 -1 4;3 2 1 0;-1 2 -1 2]; b=[2 4 -1 -4]’; B=[A,b]; RA=rank(A) RB=rank(B) 此时RA=RB=4 则X=A\b或X=inv(A)*b(对于本题计算结果是一样的...
  • 矩阵的基本运算 解线性方程组 矩阵特征值特征向量 用数值方法计算定积分 矩阵的基本运算 注意 K是一个数A是一个矩阵 k*A A\B AX=B, X=A-1B, A必须是方阵 数 乘 矩阵的左除 矩阵的右除 A/B XB=A,X=AB-1, B必须是方阵 ...
  • 求解线性方程组solve,linsolve例:A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1];%矩阵的行之间用分号隔开,元素之间用逗号或空格B=[3;1;1;0]X=zeros(4,1);%建立一个4元列向量X=linsolve(A,B)diff(fun,var,n):对...
  • 前期回顾 在上期教程中,我们学习了下面的知识点: 如何声明、定义、调用函数(文件)。...在数学中经常遇见的一个问题就是方程求解,特别是线性代数中,很经常遇见线性方程组求解问题,今天就来用Matla...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,937
精华内容 4,374
关键字:

matlab求解线性方程组

matlab 订阅