matlab解非线性方程组

2021-02-03 19:18:47 字数 3554 阅读 1927

1楼:匿名用户

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 = ... % ***pute 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

end4.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阶优化的观测值 。

5.3. options

优化设置。一些选项设置用于所有算法,部分与大规模算法(large-scale algrithm)。相关,部分与中等规模算法相关。

可以使用optimset改变其中的设置。largescale选项指定使用哪种算法。

设为‘on’使用大规模算法,设为‘off’使用中等规模算法。

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:最大迭代次数

outputf**:指定一个或多个输出函数,优化函数在每一个迭代过程中将调用这些函数。

plotf**s:算法执行时显示进度条。从预定义中选择或自定义进度条。

指定@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-***wton) algorithms.

6. 使用优化工具箱完成以上函数操作

命令:optimtool

线性代数中非齐次线性方程组的解向量和特解一样吗

1楼 匿名用户 非齐次线性方程组的解向量 就是其对应的齐次线性方程组的通解向量 再加上特解向量 即通解和特解各自有向量 显然不能说解向量和特解一样 2楼 寇华茅晶霞 反证法,题设已经给出bc线性无关,那么如果abc线性相关那必定a可以用bc表示,假设a xb yc aa a xb yc xab ya...

线性方程组的通解是否唯一吗,线性代数中方程组问题答案唯一吗

1楼 匿名用户 如果这个方程组解唯一的话 通解是唯一的 如果方程组无穷解 那通解不唯一 通解向量组是等价的。 线性代数中方程组问题答案唯一吗 2楼 非其次方程组的解的结构是这样的 非齐次线性方程组的通解是非齐次方程组的一个特解与导出组基础解系的和 依据上面的描述我们来看你的问题 线性代数中 齐次方程...

解线性方程组X1+X2-3X3-4X 0 3X1-X2

1楼 匿名用户 第1个方程是 x1 x2 3x3 x4 0 吧 解 系数矩阵 1 1 3 1 3 1 3 4 1 5 9 8 r2 3r1 r3 r1 1 1 3 1 0 4 6 7 0 4 6 7 r3 r2 1 1 3 1 0 4 6 7 0 0 0 0 r2 1 4 1 1 3 1 0 1 3...