sor
深入研究SOR算法
众所周知,SOR算法中,有一个参数是w,那么这个参数是干啥用的呢?
- 根据公式,很容易知道,当w为1时,这个时候就是高斯赛德迭代法了,那其他情况呢?
- 将通过以下的步骤,一步步得出结果
生成随机矩阵
算法设计
- A矩阵的实现,首先需要用rand得到一组特征值,将该组特征值通过diag函数生成对角阵Q,之后通过orth函数生成对称矩阵U,再通过UQU’即可得到对称正定矩阵
- b向量的实现同第一题,用randn函数即可
代码实现:
%n代表的是维度
b = randn([n(k) 1]);
Q = diag(rand([1 n(k)]));
U = orth(rand([n(k) n(k)]));
测试
- 首先设置矩阵的维度为200,即A是一个200*200的矩阵
- 将w的值分别设置成0.7、0.9、1.1、1.3
- 用不同的值跑程序,观察他们的收敛曲线的差别
- 结果如下:
- 实现代码
function [x, y] = SOR(n, A ,b, w)
y = zeros(1000,1);
eps = 1.0e-6;
D = diag(diag(A));
L = -tril(A, -1);
U = -triu(A, 1);
B = (D - w*L) \ ((1-w) * D + w*U);
f = w * inv(D - w*L) * b;
count = 1;
x0 = zeros(n,1);
x = B*x0 + f;
tic;
while norm(x-x0) > eps
x0 = x;
y(count) = norm(x-A\b);
x = B*x0 + f;
count = count + 1;
if count > 2000
disp('ERROR:该矩阵不收敛');
return;
end
end
toc;
y = toc;
disp(count);
end
结果分析
w值的变化,越小收敛的速度越慢,越大收敛的速度越快
相关阅读
网上关于sort qsort stable_sort 等排序函数的介绍已经很多了,因为前几天用到对STL vector 结构体的排序,遇到的问题记录一下。在c
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。 算法分析 在学习堆排序之前我们要先
sort()方法使数组中的元素按照一定的顺序排列。语法:arrayObject.sort(方法函数) 参数说明:1.如果不指定<方法函数>,则按unicode码
函数原型BOOL ClipCursor(CONST RECT * lpRect);函数功能该函数把鼠标限制在屏幕上的一个矩形区域内,如果调用SetCursor或用鼠标设置
camera isp(Image Signal Processor)
转自:http://blog.csdn.net/shenbin1430/article/details/60654441. 目标[52RD.com] 手机摄像头模组用ISP功能模块的市场走向及研