1. fsolve
求解非线性方程组
方程:
F(x)=0
x 是一个向量,F(x)是该向量的函数向量,返回向量值
2. 语法
x = fsolve(fun,x0)
x = fsolve(fun,x0,options)
[x,fval] = fsolve(fun,x0)
[x,fval,exitflag] = fsolve(...)
[x,fval,exitflag,output] = fsolve(...)
[x,fval,exitflag,output,jacobian] = fsolve(...)
3. 描述
fsolve 用于寻找非线性系统方程组的零点。
x = fsolve(fun,x0)以 x0 为初始值,努力寻找在 fun 中描述的方程组。
x = fsolve(fun,x0,options) 以 x0 为初始值,按照指定的优化设置“options”努力寻找在
fun 中描述的方程组。使用 optimset 设置这些选项。
[x,fval] = fsolve(fun,x0)返回在解 x 处的目标函数 fun 的值
[x,fval,exitflag] = fsolve(...)返回 exitflag 表示退出条件。
[x,fval,exitflag,output] = fsolve(...)返回 output 结构,该结构包含了优化信息。
[x,fval,exitflag,output,jacobian] = fsolve(...)返回在解 x 处的 Jacobian 函数。
4. 输入参数
4.1. fun
非线性系统方程。它是一个函数,以 x 作为输入,返回向量 F。函数 fun 可以被指定为
一个 M 文件函数的函数句柄。
% Compute function values at x
x = fsolve(@myfun,x0)
这里的 myfun 是一个 matlab 函数,形如:
function F = myfun(x)
F = ...
fun 也可以是一个异步函数的函数句柄:
x = fsolve(@(x)sin(x.*x),x0);
若用户定义的值为矩阵,则会被自动转换为向量。
若 Jacobian 能 被 计 算出 来 且 通 过 options = optimset('Jacobian','on') 设 置 Jacobian 选 项
为”on”,则函数 fun 必须在第 2 个输出参数中返回 x 处的 Jacobian 值 J(它是一个矩阵)。注
意:通过检查 nargout 的值,当 fun 被只带一个输出参数调用的情况下,该函数可避免计算
J,仅只有一个输出参数。(这种情况下,优化算法仅需要知道 F 而不需 J)。
function [F,J] = myfun(x)
F = ...
% objective function values at x
if nargout > 1 % two output arguments
J = ... % Jacobian of the function evaluated at x
end
4.2. options
提供该函数有关的特定信息。
5. 输出参数
5.1. exitflag
一个用来表示算法终止原因的整数。
1:函数收敛到 x
2:x 的变化已经处在容许范围内
3:残差变化已经处在容许范围内
4:搜索方向飞幅度比指定的误差小
5:迭代次数超过 options.MaxIter 或函数估值的次数超过 options.FunEvals
-1:算法被输出函数终止
-2:算法似乎收敛到一个非根点。
-3:可信半径变得太小
-4:沿当前方向的线性搜索不能足够地减小残差
5.2. output
包含关于优化信息的一个结构,其具有如下字段:
iterations:已经迭代的次数
funcCount:函数估值的次数
algorithm:所使用的算法
cgiterations:PCG 迭代次数(仅适用于大规模算法)
stepsize:最终采取的步长(仅适用于中等规模算法)
firstorderopt:第 1 阶优化的观测值1。
5.3. options
优化设置。一些选项设置用于所有算法,部分与大规模算法(large-scale algrithm)。相
关,部分与中等规模算法相关。可以使用 optimset 改变其中的设置。LargeScale 选项指定
使用哪种算法。
设为‘on’使用大规模算法,设为‘off’使用中等规模算法。
1 此处可能翻译不当
5.3.1. Medium-Scale and Large-Scale Algorithms
如下选项用于大规模和中等规模算法:
DerivativeCheck:将用户提供导数与有限差分导数相比较
Diagnostics:显示被解函数的诊断信息
DiffMaxChange:有限差分变量中的最大变化
DiffMinChange:有限差分变量中的最小变化
Display:显示的级别,‘off‘不显示输出,’iter‘显示每一步迭代的输出,’final‘显示
最终的输出(默认)
FunValCheck:检查目标函数值是否有效。设为‘on’,当函数返回值为复数、inf 或 NaN
将返回一个错误,设为‘off’将不显示错误。
Jacobian:设为‘ON’,fsolve 将使用用户定义的 Jacobian 或 Jacobian 信息来估值目标
函数,若设为‘off’,则使用有限差分逼近 Jacobian。
MaxFunEvals:最大允许估值次数
MaxIter:最大迭代次数
OutputFcn:指定一个或多个输出函数,优化函数在每一个迭代过程中将调用这些函数。
PlotFcns:算法执行时显示进度条。从预定义中选择或自定义进度条。指定@optimplotx
显示当前的点,@optimplotfunccount 打印出函数的计数,@optimplotfval 打印出函数值,
@optimplotresnorm 打印出残差范数,@optimplotstepsize 打印出步长,@optimplotfirstorderopt
打印优化参数的第 1 阶。
TolFun:函数值的终止误差。
TolX:x 的终止误差
5.3.2. 仅适用于 Large-Scale Algorithm
JacobMult:Jacobian 乘法函数的函数句柄
JacobPattern
MaxPCGIter
PrecondBandWidth
TolPCG
5.3.3. 仅适用于 Medium-Scale Algorithm
NonlEqnAlgorithm:
'dogleg' — Trust-region dogleg algorithm
(default)
'lm' — Levenberg-Marquardt
'gn' — Gauss-Newton
LineSearchType:'lm' (Levenberg-Marquardt)
'gn' (Gauss-Netwton) algorithms.
6. 使用优化工具箱完成以上函数操作
命令:optimtool