• fslove


    fslove - Matlab求解多元多次方程组

    简介: 之前看到网上的一些资料良莠不齐,各种转载之类的,根本无法解决实际问题,所以我打算把自己的学到的总结一下,以实例出发讲解fsolve。
    示例如下:

    [egin{cases} 2x_1 - x_2 = e^{ax_1} \ -x_1 + 2x_2 = e^{ax_2} \ end{cases} ]

    具体的求解过程在后面 点击跳转

    1. fsolve的基本使用

    调用格式一:

    X = fslove(FUN,X0)

    功能:给定初值X0,求解方程组的解,X就是返回的解

    调用格式二:

    X = fsolve(FUN,X0,OPTIONS)

    功能:同上,并解决默认参数优化为options指定值

    调用格式三:

    [X,FVAL] = fslove(FUN,X0,...)

    功能:返回X处目标函数值

    调用格式四:

    [X,FVAL,EXITFLAG] = fslove(FUN,X0,...)

    功能:返回EXITFLAG的值,用来描述计算退出的条件,其中EXITFLAG取值和相应的含义如下表。(主要作为判断条件来使用)

    EXITFLAG 含义
    1 函数fslove收敛于解X处
    2 X的变化小于限制
    3 残差变化小于限制
    4 重要搜索方向小于限制
    0 达到最大迭代次数或者评价标准
    -1 算法由输出函数终止
    -2 算法无法收敛到解的点
    -3 信赖域半径太小
    -4 线搜索在当前不能充分减少残差

    调用格式五:

    [X,FVAL,EXITFLAG,OUTPUT] = fslove(FUN,X0,...)

    功能:包含OUTPUT的输出

    调用格式六:

    [X,FVAL,EXITFLAG,OUTPUT,JACOB] = fslove(FUN,X0,...)

    功能:返回雅各比矩阵

    2.方程求解

    (1) 编制函数文件fun.m

    编写函数主要用来书写函数的表达式。

    function f = fun(x,a,b,c)  % b c可以是随意的参数
    f1 = 2*x(1)-x(2)-exp(a*x(1));
    f2 = -x(1)+2*x(2)-exp(a*x(2));
    f = [f1;f2];
    
    % 也可以写成下面的方式
    % f = [2*x(1)-x(2)-exp(a*x(1));-x(1)+2*x(2)-exp(a*x(2))];
    

    (2) 给定函数的参数值和初值(解在周围寻找)

    调用求解函数 fslove

    >> a = -1;
    >> x0 = [-5,-4];
    >> [x,FVAL,EXITFLAG,OUTPUT,JACOB] = fsolve(@(x)fun(x,a,1,1),x0);
    

    @(x)fun(x,a,1,1)调用fun函数,函数的参数是a,1,1,求解x的值
    执行后调用x返回,也就是X的解。

    x =

      0.5671   0.5671

    调用FVAL显示在目标解的函数值,可以看出,FVAL越小越接近真实解。

    FVAL =

      1.0e-09 *

      -0.4242
      -0.3753

    调用EXITFLAG 结合上面的表格可以知道,函数FSOLVE收敛于解X处。

    EXITFLAG =

      1

  • 相关阅读:
    [BZOJ3195] [Jxoi2012]奇怪的道路
    Splay Tree
    区间DP复习
    Link Cut Tree
    [BZOJ2734] [HNOI2012]集合选数
    如何写出杀手级简历(针对程序员) (转)
    30个提高Web程序执行效率的好经验(转)
    Oracle中的SQL跟踪( 转)
    如何终止SQL Server中的用户进程(转)
    Will the real programmers please stand up?(转)
  • 原文地址:https://www.cnblogs.com/teaurn/p/11587502.html
Copyright © 2020-2023  润新知