通过为 pcg 提供用来计算 A*x 的函数句柄(而非系数矩阵 A)来求解线性方程组。
使用 gallery 生成一个 20×20 正定三对角矩阵。上对角线和下对角线上的元素都是 1,而主对角线上的元素是从 20 递减到 1。预览该矩阵。
n = 20;
A = gallery('tridiag',ones(n-1,1),n:-1:1,ones(n-1,1));
full(A)
ans = 20×20
20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 19 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 15 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 14 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 13 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 12 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 11 1 0 0 0 0 0 0 0 0 0
⋮
由于此三对角矩阵有特殊的结构,您可以用函数句柄来表示 A*x 运算。当 A 乘以向量时,所得向量中的大多数元素为零。结果中的非零元素对应于 A 的非零三对角元素。此外,只有主对角线具有不等于 1 的非零值。
表达式 Ax 变为:
[2010⋯⋯⋯0