用MATLAB实现雅克比迭代、高斯-赛德尔迭代以及超松弛迭代

2023-11-05


前言

近期在上南方科技大学何炳生老师的数值分析课程时,学习了解线性方程组的三种迭代方法,即:雅克比(Jacobi)迭代;高斯-塞德尔(Gauss-Seidel)迭代以及超松弛(SOR)迭代。并按要求使用MATLAB对这三种迭代方法进行了仿真设计。通过仿真设计也对这三种迭代法有了一定的认识,希望通过此贴以通俗的形式分享自己对于这类方法的理解,文中一些不够准确或错误的表达,还望大家指证。


一、解线性方程组的方法

求解线性方程组在很多工程领域都是很重要的内容,无论是机器学习也好亦或是其他的工程优化也好。通常来说,对于一个线性方程组 A X = b AX=b AX=b,对其的数值解法一般有两类:直接法和迭代法。

  • 直接法实际就是通过使用各种线性代数知识在有限步算数运算,计算出该线性方程组精确解的办法(在计算过程中没有舍入误差的情况下),例如本科线性代数中的克拉默法则以及考研线性代数大题最常用的高斯消去法
  • 迭代法则是用某种极限过程去逐步逼近线性方程组的精确解的方法,也就是最后得到的是一个无限逼近与精确解的近似解,这个解只有在迭代无穷次下可以看做是精确解(一般有限步内得不到精确解)。

对于熟悉直接法的人而言,可以发现这种方法的求解过程在计算机下编程实际是较为复杂的,例如:高斯消去法常规的求解过程就要求先构建增广矩阵,而后做初等行变换消元将系数矩阵化为一个上三角矩阵,然后再回代求解出解向量 X X X,并且从计算量而言也是较为复杂的,尽管之后变形出了例如三角分解(LU分解)这样的变形解法,但从编程的角度考虑依然是不直观的。
迭代法,其基本思想是将线性方程组转化为便于迭代的等价方程组,然后基于初始 X X X值即 X = x i ( 0 ) = 0 ( i = 1 , 2 , 3 , . . . n ) X = x_{i}^{(0)} = 0 (i = 1,2,3,...n) X=xi(0)=0(i=1,2,3,...n),然后按照一定的计算规则,不断地修正得到新的解 X X X,最终得到满足精度要求的方程组的近似解。这显然是更加直观且易于编程设计的一种方法。而这其中就有三种最常见的迭代方式,即:

  1. 雅克比(Jacobi)迭代
  2. 高斯-塞德尔(Gauss-Seidel)迭代
  3. 超松弛(SOR)迭代

二、解线性方程组的迭代法及其代码实现

1. 迭代法的收敛性

在直接引入三种迭代法及其MATLAB实现之前,需要先提到一点就是迭代法的收敛性,简单的理解其实就是迭代法并不适用于所有线性方程组,即对于一类方程组迭代时会收敛,近似解会不断逼近精确解,但是对于另外一类方程组则会发散,近似解不断远离精确解。而决定迭代法是否收敛,是否可用于该方程组,主要需要考虑的其实就是系数矩阵 A A A。这里直接给出使上述三种迭代法收敛的充分条件系数矩阵 A A A按行(或列)严格对角占优或满足弱对角占优不可约。

(由于本人能力有限,具体的关于于迭代法收敛的充要条件,请参照清华大学出版,李庆阳、王能超、易大义老师编的《数值分析》第五版内容)

2. 基本参数设置

基本参数:矩阵阶数,计算误差,最大迭代次数。其中计算误差和最大迭代次数是迭代终止的判断要求,达到精度或者迭代到最大次数时停止迭代并输出结果。此处对计算误差进行说明,当计算精度满足 m a x 1 ⩽ i ⩽ n ∣ x i ( k + 1 ) − x i ( k ) ∣ < e p s \mathop{max}\limits_{1\leqslant i\leqslant n}\left | x_{i}^{(k+1)} - x_{i}^{(k)}\right | < eps 1inmaxxi(k+1)xi(k)<eps 时结束迭代。

%==基本参数
%矩阵阶数n
n = 4;
%计算误差
eps = 0.000005;
%最大迭代次数
Nmax = 10000;

矩阵设置:由于以下三种迭代法收敛的充分条件为系数矩阵A满足严格对角占优或按行(或列)满足若对角占优不可约,故在参数设置上设计了两种方法,为方便对比计算结果,之后采用的均是方法一所设置的矩阵
方法一:手动输入系数矩阵 A A A及结果向量 b b b

 % 方法一 : 自行设置矩阵
 A = [-4,1,1,1;
 1,-4,1,1;
 1,1,-4,1;
 1,1,1,-4];
 B = [1,1,1,1];

方法二:根据设置的矩阵阶数,自动生成强对角占优矩阵

 % 方法二:随机生成矩阵
 % 系数矩阵(默认生成一个对角占优矩阵)
 A = 100 * rand(n) - 50;
 for i=1:n
 A(i,i) = sum(abs(A(i,:)))+25 * rand(1); 
 end
 %结果向量
 B = 100 * rand([n 1]);

3. 雅克比(Jacobi)迭代

雅克比迭代实际是将系数矩阵A分解为了三个矩阵的组合,如下图
在这里插入图片描述
将其记做 A = D − L − U A = D-L-U A=DLU,则原方程组 A X = b AX=b AX=b 等价于 ( D − L − U ) X = b (D-L-U)X = b (DLU)X=b,即
D X = ( L + U ) X + b DX = (L+U)X+b DX=(L+U)X+b
因为 a i i ≠ 0 ( i = 1 , 2 , . . . n ) a_{ii}\neq 0 (i = 1,2,...n) aii=0(i=1,2,...n),故
X = D − 1 ( L + U ) X + D − 1 b X = D^{-1}(L+U)X+D^{-1}b X=D1(L+U)X+D1b
由此便可以得到一个迭代公式
X ( k + 1 ) = D − 1 ( L + U ) X ( k ) + D − 1 b X^{(k+1)}=D^{-1}(L+U)X^{(k)}+D^{-1}b X(k+1)=D1(L+U)X(k)+D1b
B = D − 1 ( L + U ) B = D^{-1}(L+U) B=D1(L+U) f = D − 1 b f = D^{-1}b f=D1b,即可得到雅克比迭代公式
X ( k + 1 ) = B X ( k ) + f X^{(k+1)}=BX^{(k)}+f X(k+1)=BX(k)+f
写成便于编程理解的形式即:
X i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 j ≠ i n a i j X j ( k ) ) X_{i}^{(k+1)}=\frac{1}{a_{ii}}(b_{i} - \sum\limits_{\mathop{j=1}\limits_{j\neq i}}^{n}a_{ij}X_{j}^{(k)}) Xi(k+1)=aii1(bij=ij=1naijXj(k))
代码:

x = zeros(1,n);
y = zeros(1,n);
count = 1;

while(1)
     for i = 1:n
        for j = 1:n
            %j≠k时
            if i ~= j
                y(i) = y(i) + A(i,j)*x(j);
            end
        end
        y(i)=( B(i) - y(i))/A(i,i);
    end
    if max(abs(x-y)) < eps
        %c为将结果回带到方程组中求解的结果向量,以确认结果无误
        c = A * y';
        fprintf('迭代结束,次数%d,最终结果:\n',count);
        disp(y);
        disp(c);
        break;
    else
        fprintf('第%d次迭代结果:\n',count);
        disp(y)
    end
    if count == Nmax
        c = A * y';
        fprintf('超过最大迭代次数,迭代结束,最终结果:\n');
        disp(y);
        disp(c);
        break; 
    end
    count = count + 1;
    x = y;
    y(1: n) = 0;
end

仿真结果:
雅克比(Jacobi)迭代结果

4. 高斯-塞德尔(Gauss-Seidel)迭代

在雅克比迭代中,我们可以看出,每一次迭代得到的新的解向量 X ( k + 1 ) X^{(k+1)} X(k+1)中的每一个元素均是由上一个解向量 X ( k ) X^{(k)} X(k)的所有元素计算得出,但实际上计算新的解向量 X ( k + 1 ) X^{(k+1)} X(k+1)的一个元素时,其前面的元素实际已经计算得出了,所以高斯-塞德尔(Gauss-Seidel)迭代的核心思想即:将本次迭代中前面已经计算出来的元素加入到迭代公式中,替代掉相对应的上一个解向量中的元素,从而实现加速收敛

高斯-塞德尔(Gauss-Seidel)迭代迭代公式可以写作
X i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 i − 1 a i j X j ( k + 1 ) − ∑ j = i + 1 n a i j X j ( k ) ) X_{i}^{(k+1)}=\frac{1}{a_{ii}}(b_{i} - \sum\limits_{j = 1}^{i - 1}a_{ij}X_{j}^{(k+1)} - \sum\limits_{\mathop{j=i+1}}^{n}a_{ij}X_{j}^{(k)}) Xi(k+1)=aii1(bij=1i1aijXj(k+1)j=i+1naijXj(k))
代码:

x = zeros(1,n);
y = zeros(1,n);
count = 1;
%中间变量
x1 = zeros(1,n);
x2 = zeros(1,n);

while(1)
    x1(1:n) = 0;
    x2(1:n) = 0;
     for i = 1:n
        for j = 1: i-1
            x1(i) =x1(i) + A(i,j) * y(j);
        end
        for k = i + 1 : n
           x2(i) = x2(i) + A(i,k) * x(k); 
        end
        y(i)=(B(i) - x1(i) - x2(i))/A(i,i);
    end
    if max(abs(x-y)) < eps
        c = A * y';
        fprintf('迭代结束,次数%d,最终结果:\n',count);
        disp(y);
        disp(c);
        break;
    else
        fprintf('第%d次迭代结果:\n',count);
        disp(y)
    end
    if count == Nmax
        c = A * y';
        fprintf('超过最大迭代次数,迭代结束,最终结果:\n');
        disp(y);
        disp(c);
        break; 
    end
    count = count + 1;
    x = y;
end

仿真结果:
在这里插入图片描述

5. 超松弛(SOR)迭代

超松弛迭代法实际是在高斯-塞德尔迭代的基础上的一个加速方法,可以看做是带参数的高斯-塞德尔迭代,是求解大型稀疏矩阵方程组的有效方法,有着很广泛的应用,其核心思想为将高斯-塞德尔迭代求解出的新的解向量元素与上一个解向量中相对应的元素,做加权平均组合成一个全新的解向量的元素,这个全新的解向量即为超松弛迭代法的解,其中的权重被称为松弛因子

其具体计算公式如下:

  1. 用高斯-塞德尔迭代公式定义一个辅助量
    X ~ i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 i − 1 a i j X j ( k + 1 ) − ∑ j = i + 1 n a i j X j ( k ) ) \widetilde{X}_{i}^{(k+1)}=\frac{1}{a_{ii}}(b_{i} - \sum\limits_{j = 1}^{i - 1}a_{ij}X_{j}^{(k+1)} - \sum\limits_{\mathop{j=i+1}}^{n}a_{ij}X_{j}^{(k)}) X i(k+1)=aii1(bij=1i1aijXj(k+1)j=i+1naijXj(k))
  2. X i ( k + 1 ) X_{i}^{(k+1)} Xi(k+1)取做 X ~ i ( k + 1 ) \widetilde{X}_{i}^{(k+1)} X i(k+1) X i ( k ) X_{i}^{(k)} Xi(k)的加权平均
    X i ( k + 1 ) = ( 1 − ω ) X i ( k ) + ω X ~ i ( k + 1 ) X_{i}^{(k+1)}=(1-\omega )X_{i}^{(k)} + \omega\widetilde{X}_{i}^{(k+1)} Xi(k+1)=(1ω)Xi(k)+ωX i(k+1)

    X i ( k + 1 ) = ( 1 − ω ) X i ( k ) + ω a i i ( b i − ∑ j = 1 i − 1 a i j X j ( k + 1 ) − ∑ j = i + 1 n a i j X j ( k ) ) X_{i}^{(k+1)}=(1-\omega )X_{i}^{(k)} + \frac{\omega}{a_{ii}}(b_{i} - \sum\limits_{j = 1}^{i - 1}a_{ij}X_{j}^{(k+1)} - \sum\limits_{\mathop{j=i+1}}^{n}a_{ij}X_{j}^{(k)}) Xi(k+1)=(1ω)Xi(k)+aiiω(bij=1i1aijXj(k+1)j=i+1naijXj(k))
    式中的系数 ω \omega ω被称为松弛因子,当 ω = 1 \omega = 1 ω=1时即为高斯-塞德尔迭代,为了保证迭代过程收敛,要求 0 < ω < 2 0 < \omega<2 0<ω<2
    0 < ω < 1 0 < \omega<1 0<ω<1时,是低松弛法
    1 < ω < 2 1 < \omega<2 1<ω<2时,是超松弛法

代码:

x = zeros(1,n);
y = zeros(1,n);
count = 1;
%中间变量
x1 = zeros(1,n);
x2 = zeros(1,n);
%松弛因子w
w = 1.3;

while(1)
    x1(1:n) = 0;
    x2(1:n) = 0;
     for i = 1:n
        for j = 1: i-1
            x1(i) =x1(i) + A(i,j) * y(j);
        end
        for k = i + 1 : n
           x2(i) = x2(i) + A(i,k) * x(k); 
        end
        temp = (B(i) - x1(i) - x2(i))/A(i,i);
        y(i) = (1 - w)* x(i) + w * temp;
    end
    if max(abs(x-y)) < eps
        c = A * y';
        fprintf('迭代结束,次数%d,最终结果:\n',count);
        disp(y);
        disp(c);
        break;
    else
        fprintf('第%d次迭代结果:\n',count);
        disp(y)
    end
    if count == Nmax
        c = A * y';
        fprintf('超过最大迭代次数,迭代结束,最终结果:\n');
        disp(y);
        disp(c);
        break; 
    end
    count = count + 1;
    x = y;
end

仿真结果:
在这里插入图片描述

总结

从结果上来看,对于所设置的系数矩阵A,要满足小数点后6位的精度要求,雅克比迭代法迭代次数39次;高斯赛德尔迭代法迭代次数22次;松弛因子为1.3时的SOR超松弛迭代法迭代12次。可见SOR迭代法是三种迭代法中收敛最快的。
除此之外,在测试SOR超松弛迭代法时还发现尽管其作为一种高斯赛德尔迭代法的加速,但有时,对于某些矩阵而言,松弛因子 w > 1 w>1 w>1反而会有反作用,此时使用 w = 1 w=1 w=1(即高斯赛德尔迭代法)效果会更好,个人认为关于 w w w的取值值得思考和探究。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用MATLAB实现雅克比迭代、高斯-赛德尔迭代以及超松弛迭代 的相关文章

  • 查找数组中元素之间的平均差异的有效方法

    希望标题不会让人困惑 通过例子来展示很简单 我有一个像这样的行向量 1 5 6 我想找到每个元素之间的平均差异 此示例中的差异为 4 和 1 因此平均值为 2 5 这是一个小例子 我的行向量可能非常大 我是 MatLab 新手 那么有没有一
  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • 将单元格转换为双精度

    gt gt C 1 2 CF 2 C 1 2 CF 2 gt gt whos C Name Size Bytes Class Attributes C 2x2 478 cell 我怎样才能转换C into double以便 gt gt C
  • 使用 java 执行 Matlab 函数

    我正在编写一个应用程序 它使用 matlab 进行图像处理 然后使用 Java 接口显示结果 由于某些原因 我必须同时使用 Java 和 Matlab 如何在java中使用matlab函数 如何创建和访问界面 MATLAB控制 http m
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 非模态 questdlg.m 提示

    我的代码绘制了一个图 然后提示用户是否想使用不同的参数绘制另一个图 问题是 当 questdlg m 打开时 用户无法查看绘图的详细信息 这是代码 while strcmp Cont Yes 1 Some code modifying da
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • getappdata 在 MATLAB 中返回空矩阵

    我有一段代码 我在其中使用setappdata然后我使用以下方式调用数据getappdata即使它不为空 它也会返回一个空矩阵 我的一段简化代码如下 function edit1 Callback hObject eventdata han
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以

随机推荐

  • C#控件命名规范

    类 型 前 缀 示 例 Adrotator adrt adrtTopAd BulletedList blst blstCity Button btn btnSubmit Calendar cal calMettingDates CheckB
  • nginx: [emerg] could not build the server_names_hash

    手头有块板子 上面起了nginx配置了多个域名 启动的时候发现报错 nginx emerg could not build the server names hash you should increase server names has
  • pandas中的时间序列

    一 夯实基础 datetime 模块中的数据类型 date 以公历形式存储日历日期 年月日 time 将时间存储为时分秒毫秒 datetime 存储日期和时间 timedelta 表示两个datetime值之间的差 日 秒 毫秒 1 获取当
  • 无效数据处理攻略: 如何从源头开始预防无效数据带来的风险

    数据处理在现代社会中变得越来越重要 而对于数据的可靠性和准确性 我们始终非常关注 然而 即使在对数据进行了精心管理的情况下 无效数据依然可能存在 并可能对数据分析和决策带来不良影响 因此 处理无效数据变得愈发重要 一 什么是无效数据 在处理
  • app数据分析体系 - 用户粘性 DAU,MAU 和 月人均活跃天数

    用户粘性指标 DAU MAU 月均活跃天数 DAU 和 MAU 日活跃用户占月活跃用户的比例越高 表明用户对App的使用粘性越高 DAU 即 Daily Active User 指日活跃用户数 MAU 即 Monthly Active Us
  • 后端进阶之路——深入理解Spring Security配置(二)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 后端进阶之路 文章
  • A/B测试是什么?面试官把我问懵了!

    什么是A B测试 A B测试是为 web 或 app 界面或流程制作两个 A B 或多个版本 在同一时间维度 分别让组成成分相同 相似 的访客群组 目标人群 随机的访问这些版本 收集各群组的用户体验数据和业务数据 最后分析 评估出最好版本
  • Golang 枚举详解

    什么是枚举 枚举 Enumeration 是一种常见的编程概念 它定义了一组命名常量 我们知道在 Go 语言中定义常量是这样的形式 const A a B b 开发者可以使用枚举创建复杂的 有限的常量集 这些常量集具有有意义的名称和唯一的值
  • 将 Bean 注入 Spring 容器的方法

    这里写目录标题 1 Configuration Bean 2 Componet ComponentScan 3 Import 注解导入 3 1 Import 直接导入类 3 2 Import ImportSelector接口 3 3 Imp
  • Microsoft Visual Studio 2013产品激活密钥

    win7 win8 win10系统下Visual Studio 2013各个版本的密钥 Visual Studio Ultimate 2013 KEY BWG7X J98B3 W34RT 33B3R JVYW9 Visual Studio
  • unity3D 物体跟随移动

    脚本挂载移动的物体上 public class Player MonoBehaviour public float Speed 4 Use this for initialization void Start Update is calle
  • c++打怪小游戏——修仙之路1.5

    这次我们要出示的程序是修仙之路1 5版本的 这个程序在c 打怪小游戏 修仙之路1 0多加了好几个功能 这次我们在这个程序中多加了一些代码 我们为下面的优化多准备一个头文件 include
  • MAVEN在IDEA中的应用

    idea集成maven插件 settings gt 输入maven gt 选择本地maven安装路径 配置文件以及本地仓库的路径 创建非web的maven工程 创建工程 gt 选择maven 下一步之后填写项目的坐标 类似于全类名 下一步之
  • Zotero win10/mac/iPad三台设备同步

    刚入坑Zotero 发现同步功能很强大 刚好手上有三台设备 就试着捣鼓了下 最终结果不错 记录一下 参考来源 https sspai com post 64283 少数派 用 Zotero 坚果云搞定多设备文献管理 https blog c
  • 虚拟机中linux_server搭建

    linux server environment 1 Installation in vmware workstation 1 1 steps 略 普通的虚拟机系统安装模式 2 linux 中存储设备的使用 linux 中所有存储设备都是通
  • 华为云服务器无法ssh连接&&可以公网ip访问

    基本是SSH服务没有打开的原因 在华为的配置里面默认打开了22号端口 但是需要修改ssh配置文件 首先从华为云服务管理界面远程登录进去 然后会看到 然后登陆之后修改ssh的配置文件 sudo vi etc ssh sshd config 将
  • Scrapy 爬虫完整案例—从小白到大神(银行网点信息为例)

    采用selenium界面抓取信息 需要渲染界面 并且也是单线程操作 效率极低 一晚上只爬去了一个工行的数据 突然想到了分布式爬虫 安装 Scrapy pip版本过于老旧不能使用 需要升级pip版本 输入python m pip instal
  • OpenCV学习三十三:pointPolygonTest 检测点是否在轮廓内

    opencv函数 pointPolygonTest C double pointPolygonTest InputArray contour Point2f pt bool measureDist 用于测试一个点是否在多边形中 当measu
  • 云计算知识点

    一 理解云计算 一 云计算的基本概念 1 定义 云计算是以服务的形式 按需向用户提供计算资源的一种模式 它是分布式计算的一种特殊形式 引入了效用模型来远程供给可扩展和可测量的资源 2 基本要点 提供IT资源 包括计算 存储以及网络资源 提供
  • 用MATLAB实现雅克比迭代、高斯-赛德尔迭代以及超松弛迭代

    文章目录 前言 一 解线性方程组的方法 二 解线性方程组的迭代法及其代码实现 1 迭代法的收敛性 2 基本参数设置 3 雅克比 Jacobi 迭代 4 高斯 塞德尔 Gauss Seidel 迭代 5 超松弛 SOR 迭代 总结 前言 近期