主要内容

大型非线性方程组与雅可比矩阵稀疏模式

这个例子展示了如何提供一个雅可比矩阵稀疏模式有效地解决大型稀疏方程组。示例使用目标函数,定义了一个系统的n方程,

F ( 1 ) = 3 x 1 - - - - - - 2 x 1 2 - - - - - - 2 x 2 + 1 , F ( ) = 3 x - - - - - - 2 x 2 - - - - - - x - - - - - - 1 - - - - - - 2 x + 1 + 1 , F ( n ) = 3 x n - - - - - - 2 x n 2 - - - - - - x n - - - - - - 1 + 1

方程来解决 F ( x ) = 0 , 1 n 。本例使用 n = 1 0 0 0 。的nlsf1a辅助函数在这个例子实现了目标函数 F ( x )

在这个例子中大型稀疏系统非线性方程的雅可比矩阵解决了同一系统,目标函数有一个显式的雅可比矩阵。然而,有时你不能显式计算雅可比矩阵,但你可以决定哪些雅可比矩阵的非零元素。在这个例子中,雅可比矩阵是三对角,因为唯一的变量的定义出现在 F ( ) x - - - - - - 1 , x , x + 1 。所以唯一的非零部分的雅可比矩阵主对角线和它的两个邻国对角线。雅可比矩阵稀疏模式矩阵的非零元素对应于(潜在)雅可比矩阵中的非零元素。

创建一个稀疏 n ——- - - - - - n 三对角矩阵代表雅可比矩阵的稀疏模式。(解释这段代码,请参阅spdiags。)

n = 1000;e =的(n - 1);Jstr = spdiags ([e e e], 1:1, n, n);

视图的结构Jstr

间谍(Jstr)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象。

fsolve选择使用“信赖域”算法,它是唯一的fsolve算法可以使用雅可比矩阵稀疏模式。

选择= optimoptions (“fsolve”,“算法”,“信赖域”,“JacobPattern”,Jstr);

设置初始点x0一个向量的1项。

x0 = 1 * 1 (n, 1);

解决这个问题。

[x, fval exitflag、输出]= fsolve (x0, @nlsf1a选项);
方程解决。fsolve完成因为函数值接近于零的向量的值函数的宽容,问题出现普通的梯度。

检查产生的残留标准和功能评估的数量fsolve需要。

disp(规范(fval))
1.0522 e-09
disp (output.funcCount)
25

附近的残留标准是零,表明fsolve正确地解决问题。函数评估相当小的数量,大约两打。比较这个数量的函数评估数量没有提供雅可比矩阵稀疏模式。

选择= optimoptions (“fsolve”,“算法”,“信赖域”);[x, fval exitflag、输出]= fsolve (x0, @nlsf1a选项);
方程解决。fsolve完成因为函数值接近于零的向量的值函数的宽容,问题出现普通的梯度。
disp(规范(fval))
1.0659 e-09
disp (output.funcCount)
5005年

解算器达到基本相同的解决方案,但是需要成千上万的功能评估。

Helper函数

这段代码创建了nlsf1ahelper函数。

函数F = nlsf1a (x)%评估向量函数n =长度(x);F = 0 (n, 1);我= 2 (n - 1);F (i) = x(我))(3 - 2 *。* x (i) - x(张)2 * x (i + 1) + 1;F (n) = (3 - 2 * x (n)) * x (n) - x (n - 1) + 1;F (1) = (3 - 2 * x (1)) * (1) 2 * x (2) + 1;结束

另请参阅

相关的话题