精华内容
下载资源
问答
  • 使用MATLAB的solve函数求解线性方程组

    千次阅读 2020-03-31 16:29:18
    使用MATLAB的solve函数求解线性方程组 示例 定义变量 定义方程组 使用solve函数进行求解 输出求解结果 syms a b p k e w; % 定义变量 eqns = [b*p - e*k - a == 0, e + k*p + k*w == 0, 2*b*p == a + e*k + b*w]; ...

    使用MATLAB的solve函数求解线性方程组

    示例

    • 定义变量
    • 定义方程组
    • 使用solve函数进行求解
    • 输出求解结果
    syms a b p k e w;  % 定义变量
    eqns = [b*p - e*k - a == 0, e + k*p + k*w == 0, 2*b*p == a + e*k + b*w]; % 定义规则
    res = solve(eqns,w,e,p);  % 求解
    res.w
    res.e
    res.p
    

    句式

    S = solve(eqn,var)
    S = solve(eqn,var,Name,Value)
    Y = solve(eqns,vars)
    Y = solve(eqns,vars,Name,Value)
    [y1,…,yN] = solve(eqns,vars)
    [y1,…,yN] = solve(eqns,vars,Name,Value)
    [y1,…,yN,parameters,conditions] = solve(eqns,vars,‘ReturnConditions’,true)

    参考

    https://ww2.mathworks.cn/help/symbolic/solve.html

    展开全文
  • matlab求解线性方程组的rref函数

    千次阅读 2014-05-02 21:18:42
    摘自:http://www.maybe520.net/blog/987/ matlab求解线性方程组的rref函数
    摘自:http://www.maybe520.net/blog/987/
    


    matlab中怎么求解线性方程组呢?
    matlab中求解线性方程组可应用克拉默法则(Cramer’s Rule)即通过det()函数计算各个矩阵的行列式来求,也可以用高斯消元法来求解。
    matlab中的rref()函数可以将矩阵化成行最简形式,用法如下:

    假如有一线性方程组为:
    16 x1 + 2 x2 + 3 x3 = 13
    5 x1 + 11 x2 + 10 x3 = 8
    9 x1 + 7 x2 + 6 x3 = 12
    4 x1 + 14 x2 + 15 x3 = 1

    令A =
    16 2 3 13
    5 11 10 8
    9 7 6 12
    4 14 15 1

    然后使用命令 B = rref(A) 则可得到矩阵A的航最简形式
    B=
    1 0 0 1
    0 1 0 3
    0 0 1 -3
    0 0 0 0

    从而可以很方便得到原线性方程组的解了。

    如果原线性方程组无解,那么返回的是一个单位矩阵。


    展开全文
  • 同时,实现了一元二次模糊方程的求解,利用区间[-1,1]上的单调函数将一元二次模糊方程的求解问题转化为二元二次参数方程组求解问题,给出了二次模糊方程解存在的充要条件,并辅以数值例子。 最后,利用结构元技术提出...
  • 求解线性方程根的Matlab函数 Matlab软件提供了多种求解线性方程()的根的方法,下面分别来介绍: Solve函数 Fzero函数 Fsolve函数 Solve函数可以得到方程根的解析或数值解,其命令格式为 Solve(eqn1, eqn2, ,eqnN)...
  • 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求解非线性方程组的五种方法 求解线性方程分为两种方法–二分法和迭代法 常见的方法一共有5种 二分法 迭代法 牛顿法 割线法 拟牛顿法 Halley法 使用条件 二分法需要知道两个自变量,分别是一个根的两侧 牛顿法...

    MATLAB求解非线性方程组的五种方法

    求解线性方程分为两种方法–二分法和迭代法
    常见的方法一共有5种
    二分法
    迭代法
    牛顿法
    割线法
    拟牛顿法
    Halley法

    使用条件
    二分法需要知道两个自变量,分别是一个根的两侧

    牛顿法迭代法是最常用的方法,收敛性信赖于初值,取不同的初值可以的方程不同的根,函数用的是一阶导数,输入的是一个猜想的可能的值

    割线法给定两个初值再带入计算,比如要在2附近求一个根,那就可以假设这个范围是(1.9,2)
    拟牛顿法这个比较方便,用时最好可以找到一个好的初始值
    Halley法需要知道函数值以及它的一阶求导、二阶求导

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

    二分法

    基本函数是这样子的:y = dichotomy(fun,a,b,tol);二分法的算法要输入四个变量,fun,a,b,tol:函数,一个根的左右点,tol=1.0e-6

    function y = fun(x)
    y = x^3 - 5 * x + 4.272;
    

    上面这个就是定义的fun,每次的输入的方程不同,第一条不动,直接改第二行就可以的。比如这里我们要计算的方程y = x^3 - 5 * x + 4.272;
    我们是可以通过简单计算得到一个根的两侧分别是1和1.3

    那在窗口指令指令中输入x=dichotomy(’fun‘,1,1.3,1.0e-6)就可以得到结果

    function y = dichotomy(fun,a,b,tol)
    if nargin < 4
        tol = 1.0e-5;
    end
    n = 1;
    if feval(fun,a)*feval(fun,b)<0
        c = (a+b)/2;
        while (abs(b-c)>tol) && (abs(feval(fun,c))>tol)
            if (feval(fun,c)*feval(fun,a)>0)
                a = c;
                c = (a+b)/2;
            elseif (feval(fun,c)*feval(fun,a)<0)
                b = c;
                c = (a+b)/2;
            else
                y = c;
                tol = 100;
            end
            n = n + 1;
        end
        y = c;
    elseif feval(fun,a)==0
        y = a;
    elseif feval(fun,b)==0
        y = b;
    else
        disp('there may not be a root in the interval');
    end
    n
    
    function y = fun(x)
    y = x^3 - 5 * x + 4.272;
    

    牛顿法
    还是用刚才那道题,y = x^3 - 5 * x + 4.272,一阶导是y = 3 * x^2 - 5;

    function y = dfun(x)
    y = 3 * x^2 - 5;
    

    下面的是具体的算法,根据x = newton(x0,tol),我们只需要输入一个我们猜想的值就可以。但是有一定的误差

    function x = newton(x0,tol)
    if nargin < 2
        tol = 1.0e-5;
    end
    x = x0 - fun(x0)/dfun(x0);
    n = 1; 
    while (norm(x-x0)>tol) && (n<1000)
        x0 = x;
        x = x0 - fun(x0)/dfun(x0);
        n = n + 1; 
    end
    n
    

    割线法

    这里我们用割线法求y = x^3 - 5 * x + 4.272在方程x=2的根,输入上要用两个初始值,比如说现在来计算就可以输入x=secant(2,1.9,10e-6)

    function x = secant(x0,x1,tol)
    if nargin < 3
        tol = 1.0e-5;
    end
    x = x0 - fun(x0) * (x0 - x1) / (fun(x0) - fun(x1));
    n = 1;
    while (abs(x0-x1) > tol) && (n <= 1000)
        x1 = x0;
        x0 = x;
        x = x0 - fun(x0) * (x0 - x1) / (fun(x0) - fun(x1));
        n = n + 1;
    end
    n
    

    拟牛顿法

    这里我们可以直接找到一个初始值输入,比如说broyden2,10e-6),如果不知道不确定也没关系,至少要知道一个范围。比如说给个范围(0.5,0.5)有下面这个函数

    function y = funm(x)
    y(1,1) = x(1,1) - 0.7 * sin(x(1,1)) - 0.2 * cos(x(2,1));
    y(2,1) = x(2,1) - 0.7 * cos(x(1,1)) + 0.2 * sin(x(2,1));
    

    那就可以输入x = broyden(x0,tol)

    function x = broyden([0.50.5],tol)
    if nargin < 2
        tol = 1.0e-5;
    end
    A = eye(size(x0,1));
    x = x0 - A \ funm(x0);
    n = 1;
    while (norm(x - x0) > tol) && (n < 1000)
        x0 = x;
        x = x0 - A \ funm(x0);
        p = x - x0;
        q = funm(x) - funm(x0);
        A = A + (q - A*p)*p'/norm(p)^2;
        n = n + 1;
    end
    n
    

    Halley法

    这个要求二阶导,比如说第一个道题,y = x^3 - 5 * x + 4.272;,二阶导数是下面这个输入

    function y = d2fun(x)
    y = 6 * x;
    

    最后输入x = halley(1,10e-6)就可以计算出一个结果

    function x = halley(x0,tol)
    if nargin < 2
        tol = 1.0e-5;
    end
    m = size(x0,1);
    x = x0 - (eye(m) - 1/2 * (dfun(x0) \ d2fun(x0)) * (dfun(x0) \ fun(x0))) \ ...
        (dfun(x0) \ fun(x0));
    n = 1;
    while (norm(x - x0) > tol) && (n < 1000)
        x0 = x;
        x = x0 - (eye(m) - 1/2 * (dfun(x0) \ d2fun(x0)) * (dfun(x0) \ fun(x0))) \ ...
        (dfun(x0) \ fun(x0));
        n = n + 1;
    end
    n
    
    
    展开全文
  • matlab中有专门的solve函数来解决方程组的(a-x)^2+(b-y)^2=e^2(C-x)^2+(D-y)^2=v^2已知a,b,c,d,e,v 值求解 X,Y 请问用 matlab 如何写,就是求2个园的交点问题。仿真程序为:global a b c d e v;>> a=1;b=0;c=-...
  • 求解线性方程组的方法 目录 一,线性方程组的直接解法 1.高斯消元法 (1).原理和算法 (2).Matlab函数 (3).运行实例 2.用主元法进行高斯消元 (1).原理和算法 (2).Matlab函数 (3).运行实例 3.用按比例主元法进行...
  • 实验四 用 MATLAB 求解线性优化问题 一实验目的 了解 Matlab 的优化工具箱利用 Matlab 求解线性优化问题 二相关知识 非线性优化包括相当丰富的内容 们这里就 Matlab 提供的一些函数来介 绍相关函数的用法及其所...
  • MatLab求解线性方程

    千次阅读 2013-06-18 15:34:27
    Matlab中solve函数主要是用来求解线性方程组的解析解或者精确解。对于得出的结果是符号变量,可以通过vpa()得出任意位数的数值解! solve函数的语法定义主要有以下四种: solve(eq) solve(eq, var) solve(eq1, ...
  • sor迭代法求解线性方程组(Matlab)

    千次阅读 2020-05-11 15:09:20
    sor迭代法求解线性方程组(Matlab) 函数文件(sor.m) 该函数不含停止的误差判断条件 function [x,n] = sor(A,b,x,w,it_max) % 求线性方程组的sor(successive over-relaxation)迭代法,调用格式为 % [x, n] = sor(A,b,x...
  • jacobi迭代法求解线性方程组(Matlab)

    千次阅读 2020-05-11 14:21:30
    jacobi迭代法求解线性方程组(Matlab) 函数文件(jacobi.m) 该函数不含停止的误差判断条件 function [x,n] = jacobi(A,b,x,it_max) % 求线性方程组的Jacobi迭代法,调用格式为 % [x, k] = jacobi(A,b,x0,it_max) % ...
  • 前期回顾 在上期教程中,我们学习了下面的知识点: 如何声明、定义、调用函数(文件)。...在数学中经常遇见的一个问题就是方程求解,特别是线性代数中,很经常遇见线性方程组求解问题,今天就来用Matla...
  • jacobi迭代法求解线性方程组(Matlab) 函数文件(jacobi.m) 该函数不含停止的误差判断条件 function [x,n] = jacobi(A,b,x,it_max) % 求线性方程组的Jacobi迭代法,调用格式为 % [x, k] = jacobi(A,b,x0,it_max) % ...
  • 使用matlab进行非线性方程组求解

    万次阅读 多人点赞 2015-09-07 22:04:29
    今天,恰好遇到使用matlab进行了非线性方程组求解。 情况是,一些无法手动表示,推导的方程组,比如像超越方程这种,可以用matlab进行直接求值,这在一些需要仿真数据的场景比较有用。 环境:matlab2015a 函数:...
  • TMU_BME_2013 Topic: 如何使用 MATLAB 求 解常微分方程组 a.What ? 微分方程 指描述未知函数的导数与自变 量之间的关系的方程未知函数是一元函 数的微分方程称作 常微分方程 未知函数 是多元函数的微分方程称作 偏...
  • 设有一三元方程组如下: x + y -z = 4 2x - 3y + z =3 -5x + 2y -2z =1 则改方程则的增广矩阵为 A= 1 1 -1 4 2 -3 1 3 -5 2 -2 1 rref函数用消元法给上述方程组求解,则rref(A)= a= 1 0 0 1 0 1 0 ...
  • matlab线性方程组求解

    2021-03-18 22:24:37
    matlab线性方程组求解 ...对于非齐次线性方程组,可先由伪逆求方程组的一个特解,接着用null()函数求解线性方程组的解,其总解为特解加上某系数乘以线性解的和。 >> A=[3,2,1;1,-1,3;2,4,-4]; >> b
  • matlab-求解线性方程/方程组

    千次阅读 2019-04-10 19:46:03
    使用matlab求解线性规划 代码 目标函数们 == 0 %create by Zhiyang Dou %2019/4/10 %contact:sdudzy@163.com function F = target(D,r,J,B,sigma_J) F(1)= -J + ((J+D(1))*normcdf((log((J+D(1))./B)+ (r+0.5*D(2...
  • 功能: 对超松弛迭代法求解...函数功能:对超松弛迭代法求解线性方程组; 输入: A:系数矩阵 b:常数矩阵; x0:初始解; MaxIters:最大迭代次数; err:精度阈值; w:松弛因子; 输出: x:近似解; ...
  • (2)非线性方程组求解 函数的调用格式为: x=fsolve(filename,x0,option) 其中,x为返回的近似解,filename是待求根方程左端表达式,x0是初值,option用于设置优化工具箱的优化参数,可以调用...
  • 如题,想要知道二者在使用场合上的却别,不是算法方面的区别 比如 二者的区别我知道的有 fsolve()是基于信赖域算法的,所以无法求解欠定的非线性方程组。但基于梯度的fmincon可以。
  • 线性方程组是线性代数学课的考虑范畴,会使用matlab解决,可以效率更快。matlab种逆矩阵是左除和右除。初等变换法就是一个rref函数
  • MATLAB求解方程(1)roots函数功能:用于求解多项式方程的根,以列矢量的形式返回多项式的根。调用格式:r=roots(p),p是多项式系数按降幂排列所形成的向量。示例:求方程3x2-2x-4=0的根。代码:p=[3,-2,-4];r=roots(p...
  • 基于MATLAB求解三类方程组第1类 线性方程组线性方程组是指各个方程变量的最高次幂为1次的方程组。线性方程组主要有定解方程组、不定解方程组、超定方程组和奇异方程组。线性方程组的通解为齐次线性方程组的基础解系...
  • MATLAB线性方程组求解

    万次阅读 多人点赞 2019-01-20 22:58:32
    有唯一解线性方程组求法 ...求解齐次线性方程组基础解系的函数是null Z=null(A)表示返回矩阵A的基础解系组成的矩阵。Z还满足ZTZ=I Z=null(A,‘r’)得出的Z不满足ZTZ=I,但得出的矩阵元素多为整数,顾一...
  • 数值分析 jacobi迭代法MATLAB程序实现 函数内容(保存为jacobi.m文件,在MATLAB中运行): ...%Jacobi迭代法求解线性方程组。迭代公式x(k+1)=-Gx(k)+d,(k=0,1,…). %返回迭代矩阵G,d和方程组的解x,以及迭代次数N
  • MATLAB的非线性方程组遗传解法 将非线性方程组求解问题转化为用遗传算法求解目标函数的最小值问题,利用MATLAB的遗传算法与直接 搜索工具箱(GADS)对目标函数求取最小值
  • 最近有人问我matlab求解方程组的问题,下面提供了fsolve函数help,但要有几点需要注意1.方程组的有解性2.方程组解是否唯一3.x0的选取,如果解不唯一,不同的x0可能会得到不同的解fsolve - Solve system of nonlinear ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 307
精华内容 122
关键字:

matlab函数求解线性方程组

matlab 订阅