用Matlab求解非线性方程组-甘才军的Matlab学习笔记

更新时间:2023-10-28 04:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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文件函数的函数句柄。

x = fsolve(@myfun,x0)

这里的myfun是一个matlab函数,形如: function F = myfun(x)

F = ... % Compute function values at x 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

本文来源:https://www.bwwdw.com/article/xrq2.html

Top