fslove - Matlab求解多元屡次方程组
简介: 以前看到网上的一些资料参差不齐,各类转载之类的,根本没法解决实际问题,因此我打算把本身的学到的总结一下,以实例出发讲解fsolve。 示例以下: $$ \begin{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就是返回的解spa
调用格式二:code
X = fsolve(FUN,X0,OPTIONS)io
功能:同上,并解决默认参数优化为options指定值table
调用格式三:function
[X,FVAL] = fslove(FUN,X0,...)class
功能:返回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,...)
功能:返回雅各比矩阵
<span id = 'jump'></span>
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