非线性方程组的数学模型为
\[F(x)=0\]
式中,x为一矢量,F(x)为一函数,返回矢量值。
在MATLAB中,用fsolve函数求解非线性方程组。其算法基于最小二乘法。fsolve函数的调用格式为:
x = fsolve(fun, x0) 初值为x0,试图求解由fun函数描述的等式系统。
x = fsolve(fun, x0, options) 用options结构指定的优化参数进行最小化。
x = fsolve(fun, x0, options, P1, P2,...) 将问题参数P1、P2等直接传递给fun函数。
[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处的fun函数的雅可比(Jacob)矩阵。
【例25】 求解下列方程组:
\[\begin{matrix} 2{x}_{1}-{x}_{2}={e}^{-{x}_{2}} \\ -{x}_{1}+2{x}_{2}={e}^{-{x}_{2}} \end{matrix}\]
假设初值为x0 = [-5, -5]。
首先编写一个M文件fsolveo.m,计算x处等式的值F。
code.matlab
function F = myfun(x)
F = [2*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))];
下一步调用优化函数:
code.matlab
>> x0 = [-5; -5]; % 初值
>> options=optimset('Display', 'iter'); % 输出显示的选项
>> [x, fval] = fsolve(@fsolveo, x0, options) % 调用优化函数
计算结果为:
code.matlab
x =
0.5671
0.5671
fval =
1.0e-006 *
-0.4059
-0.4059
【例26】求矩阵x,使其满足方程
\[X*X*X=\left[ \begin{matrix} 1 & 2 \\ 3 & 4 \end{matrix} \right]\]
初值为x = [1, 1; 1, 1]
首先编写一待求等式的M文件fsolve2o.m。
code.matlab
function F = myfun(x)
F = x*x*x-[1, 2; 3, 4];
然后调用优化过程:
code.matlab
>> x0 = ones(2, 2); % 设初值
>> options = optimset('Display', 'off'); % 取消显示
>> [x, Fval, exitflag] = fsolve(@fsolve2o, x0, options)
计算结果为:
code.matlab
x =
-0.1291 0.8602
1.2903 1.1612
Fval =
1.0e-11 *
-0.3505 0.1633
0.2417 -0.1111
exitflag =
1