MATLAB-fsolve函数帮助⽂档翻译与补充fsolve
解⾮线性⽅程组
⾮线性系统解算器
解决指定的问题
F(x)= 0
对于x, F(x)是⼀个返回向量值的函数。
x是⼀个向量或者⼀个矩阵;看矩阵参数。
语法:
x = fsolve(fun,x0)
x = fsolve(fun,x0,options)
x = fsolve(problem)
[x,fval] = fsolve(___)
[x,fval,exitflag,output] = fsolve(___)
[x,fval,exitflag,output,jacobian] = fsolve(___)
描述:
1. x = fsolve(fun,x0) 从x0开始,试着解这些⽅程fun(x) = 0,⼀个0的数组。
实例:⼆维⾮线性系统的解
这个例⼦展⽰了如何在两个变量中求解两个⾮线性⽅程。⽅程是
把⽅程转换成F(x)= 0形式。
写⼀个函数,计算这两个⽅程的左边。
function F = root2d(x)
F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
将此代码保存为⼀个名为root2d的⽂件在你的MATLAB搜索路径下。
求从点[0,0]开始的⽅程组。
fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0)
⽅程解决。
fsolve完成是因为函数值的向量在函数公差的默认值测量下接近于零,⽽这个问题在梯度测量下呈现出规律性。x =
0.3532 0.6061
补充:MATLAB软件计算结果
⽅程解决。函数值的平⽅和r = 5.939402e-14⼩于sqrt(options.FunctionTolerance) = 1.000000e-03。r的梯度的相对范数r,2.023188e-07,⼩于选项OptimalityTolerance = 1.000000e-06。
优化指标选项
相对范数(grad r) = 2.02e-07OptimalityTolerance = 1e-06 (default)
r = 5.94e-14sqrt(FunctionTolerance) = 1.0e-03 (default)
2. x = fsolve(fun,x0,options)⽤选项中指定的优化选项解决⽅程。使⽤optimoptions来设置这些选项。
实例:具有⾮默认选项的解决⽅案
检查⾮线性系统的求解过程。
设置选项为⽆显⽰和⼀个显⽰⼀阶最优性的绘图函数,当算法迭代时,该函数应该收敛到0。
options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);
⾮线性系统中的⽅程是
把⽅程转换成F(x)= 0形式。
编写⼀个函数来计算这两个⽅程的左边。
function F = root2d(x)
F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
将此代码保存为MATLAB®路径上名为root2d.m的⽂件。
从点[0,0]开始求解⾮线性⽅程组,观察求解过程。
fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0,options)
结果
x =
0.3532 0.6061
3. x = fsolve(problem)解决问题,其中问题是在Input Arguments中描述的结构。通过从优化应⽤程序导出问题来创建问题结构,如Exporting Your Work中所述。
实例:解决⼀个问题结构体
为fsolve创建问题结构体并解决问题。
使⽤⾮默认选项解决与解决⽅案相同的问题,但是使⽤问题结构体表⽰问题。
设置没有显⽰的问题选项和显⽰⼀阶最优性的绘图函数,当算法迭代时,它应该收敛到0。
problem.options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);
⾮线性系统中的⽅程是
把⽅程转换成F(x)= 0形式。
编写⼀个函数来计算这两个⽅程的左边。
function F = root2d(x)
F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
将此代码保存为MATLAB®路径上名为root2d.m的⽂件。
在问题结构中创建其余字段。
problem.objective = @root2d;
problem.x0 = [0,0];
problem.solver = 'fsolve';
解决这个问题。
x = fsolve(problem)
x =
0.3532 0.6061
4. [x,fval] = fsolve(___),对于任何语法,返回在解决⽅案x处⽬标函数fun的值。实例:⾮线性系统的解过程
此⽰例返回迭代显⽰,显⽰两个⽅程和两个未知数的系统的求解过程
以F(x)= 0的形式重写⽅程式:
在x0 =[-5 -5]中开始寻解决⽅案。
⾸先,写⼀个计算F的⽂件,计算⽅程在x处的值。
function F = myfun(x)
F = [2*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))];
在MATLAB®路径上将此函数⽂件另存为 设置初始点。设置options以返回迭代显⽰。
x0 = [-5;-5];
options = optimoptions('fsolve','Display','iter');
调⽤fsolve。
[x,fval] = fsolve(@myfun,x0,options)
Iteration
迭代Func- count f(x)
Norm of
step结构体数组不能作为参数传递给函数
First-order
optimality
⼀阶最优性
Trust-region
radius
信赖域半径
0323535.6 2.29e+0041
16
6001.721 5.75e+0031
2
91573.511
1.47e+0031312427.2261388
1
415119.7631107151833.5206130.816218.3520819.051724 1.213941 2.2618270.0163290.7595110.206 2.5930 3.51575e-0060.1119270.00294 2.510
33
1.64763e-013
0.00169132
6.36e-007
2.5
Iteration 迭代
Func- count
f(x)Norm of step
First-order optimality ⼀阶最优性
Trust-region
radius 信赖域半径⽅程解决。
fsolve完成是因为函数值的向量在函数公差的默认值测量下接近于零,⽽这个问题在梯度测量下呈现出规律性。
x = 0.5671 0.5671fval = 1.0e-006 * -0.4059 -0.4059
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论