当前位置:   article > 正文

雅可比迭代法、高斯-赛德尔迭代法、超松弛迭代法 matlab 实现_超松弛迭代法matlab程序

超松弛迭代法matlab程序

雅可比迭代法、高斯-赛德尔迭代法、超松弛迭代法 matlab 实现

一、雅可比迭代法

  程序代码:

function y = Jacobi(A,b,e,M)
% input: A 的对角线元素均不为 0	e: 精度	M: 最大计算次数
% output: y: 方程的解

n = length(A);
x0 = zeros(n,1);
y = zeros(n,1);

[l,w] = size(A);
if (l ~= w) && (l ~= length(b))
    disp('输入错误');
end

% ---------------------------
% 矩阵形式
% D = diag(diag(A),0);
% U = triu(-A,1); %上三角矩阵
% L = tril(-A,-1); %下三角矩阵
% B = inv(D)*(L+U);
% f = inv(D)*b;
% for i = 1:M
%     y = B*x0+f;
%     d = abs(x0-y);
%     if(max(d)<e)
%         break;
%     end
%     x0 = y;
% end
% ---------------------------

% ---------------------------
% 多项式形式
D = diag(A);
for i = 1:M
    for j = 1:n
        y(j) = 1/D(j)*(b(j)-A(j,1:j-1)*x0(1:j-1)-A(j,j+1:n)*x0(j+1:n));
    end
    d = abs(x0-y);
    if(max(d)<e)
        break;
    end
    x0 = y;
end
% ---------------------------
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

  矩阵形式和多项式形式分别是算法的两种实现,且两种方法等价,选择一种运行即可!
  测试:

在这里插入图片描述

在这里插入图片描述

二、高斯-塞德尔迭代法

  程序代码:

function y = G_S(A,b,e,M)
% input: A 的对角线元素均不为 0	e: 精度	M: 最大计算次数
% output: y: 方程的解

n = length(A);
x0 = zeros(n,1);
y = zeros(n,1);

[l,w] = size(A);
if (l ~= w) && (l ~= length(b))
    disp('输入错误');
end

% ---------------------------
% 矩阵形式
% D = diag(diag(A),0);
% U = triu(-A,1); %上三角矩阵
% L = tril(-A,-1); %下三角矩阵
% B = inv(D-L)*U;
% f = inv(D-L)*b;
% for i = 1:M
%     y = B*x0+f;
%     d = abs(x0-y);
%     if(max(d)<e)
%         break;
%     end
%     x0 = y;
% end
% ---------------------------

% ---------------------------
% 多项式形式
D = diag(A);
for i = 1:M
    for j = 1:n
        y(j) = 1/D(j)*(b(j)-A(j,1:j-1)*y(1:j-1)-A(j,j+1:n)*x0(j+1:n));
    end
    d = abs(x0-y);
    if(max(d)<e)
        break;
    end
    x0 = y;
end
% ---------------------------
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

  矩阵形式和多项式形式分别是算法的两种实现,且两种方法等价,选择一种运行即可!
  测试:

在这里插入图片描述

三、超松弛迭代法

  程序代码:

function y = SOR(A,b,r,e,M)
% input: A 的对角线元素均不为 0	r: 松弛因子	e: 精度	M: 最大计算次数
% output: y: 方程的解

n = length(A);
x0 = zeros(n,1);
y = zeros(n,1);
y_bar = zeros(n,1);

[l,w] = size(A);
if (l ~= w) && (l ~= length(b))
    disp('输入错误');
end

% ---------------------------
% 矩阵形式
% D = diag(diag(A),0);
% U = triu(-A,1); %上三角矩阵
% L = tril(-A,-1); %下三角矩阵
% B = inv(D-r*L)*((1-r)*D+r*U);
% f = r*inv(D-r*L)*b;
% for i = 1:M
%     y = B*x0+f;
%     d = abs(x0-y);
%     if(max(d)<e)
%         break;
%     end
%     x0 = y;
% end
% ---------------------------

% ---------------------------
% 多项式形式
D = diag(A);
for i = 1:M
    for j = 1:n
        y_bar(j) = 1/D(j)*(b(j)-A(j,1:j-1)*y(1:j-1)-A(j,j+1:n)*x0(j+1:n));
        y(j) = (1-r)*x0(j)+r*y_bar(j);
    end
    d = abs(x0-y);
    if(max(d)<e)
        break;
    end
    x0 = y;
end
% ---------------------------
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

  矩阵形式和多项式形式分别是算法的两种实现,且两种方法等价,选择一种运行即可!
  测试:

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/176851
推荐阅读
相关标签
  

闽ICP备14008679号