数值分析算法 MATLAB 实践 线性方程组 SOR迭代法

简介: 数值分析算法 MATLAB 实践 线性方程组 SOR迭代法

数值分析算法 MATLAB 实践 线性方程组 SOR迭代法

% 逐次超松驰迭代法(successive over relaxation method)迭代法
% function [x,t,it,w] = SORFunc(A,b,I,eps,w)
% A: 系数矩阵 b: 载荷矩阵 I: 最大迭代次数
% w: 松弛因子(w=1 时即为 Gauss-Seidel 迭代法)
% x: 解矩阵% t: 时间
% it: 迭代次数% w: 松弛因子% 迭代初值默认为 0
A1 = [8 -3 2; 4 11 -1; 6 3 12]; b1 = [20; 33; 36];
w=1.2;%松弛因子
it_max = 1000;eps=1e-6;
[x6,t6,k6_cnt,w] = SORFunc(A1,b1,it_max,eps,w);
disp('迭代次数:k6_cnt=');
disp(k6_cnt)
disp(['方程组的解:x6 = ']);
disp(x6)

%% function [x,n,flag]=SOR(A,b,eps,W,it_max)
%sor函数为用松弛迭代法求解线性方程组
%A为线性方程组的系数矩阵%b为线性方程组的常数向量
%eps为精度要求 %W为超弛因子 %max1为最大迭代次数
%x为线性方程组的解%n为迭代次数
%flag为指标变量,flag='OK!'表示迭代收敛达到指标要求%flag='fail!'表示迭代失败
A2 = [8 -3 2; 4 11 -1; 6 3 12]; b2 = [20; 33; 36];
W=1.2;%松弛因子
it_max = 1000;eps=1e-6;%最大迭代次数
[x7,k7_cnt,flag]=SOR(A2,b2,eps,W,it_max);
disp('迭代次数:k7_cnt=');
disp(k7_cnt)
disp(['方程组的解:x7 = ']);
disp(x7)

%% function [x, k] = SORFunmethod(A, b, x0, MaxIters, err, w)
%  输入:A:系数矩阵   b:常数矩阵;  x0:初始解;
%  MaxIters:最大迭代次数;
%  err:精度阈值;  w:松弛因子; 输出: x:近似解;  k:迭代次数;
x0 = [0;0;0];
%调用SOR超松弛迭代法求解
A3 = [8 -3 2; 4 11 -1; 6 3 12]; b3 = [20; 33; 36];
it_max = 1000; eps=1e-6;
%w松弛因子 w>1 超松弛迭代法 w=1 高斯-赛德尔迭代 w<1 低松弛迭代法
w0 = 0.6;  % w<1 低松弛迭代法
w1 = 1.1; % w>1 超松弛迭代法
w2 = 1.9; % w>1 超松弛迭代法
[x8_0, k8_cnt0] = SORFunmethod(A3, b3, x0, it_max, eps, w0);
[x8_1, k8_cnt1] = SORFunmethod(A3, b3, x0, it_max, eps, w1);
[x8_2, k8_cnt2] = SORFunmethod(A3, b3, x0, it_max, eps, w2);
disp('迭代次数:k8_cnt0=');
disp(k8_cnt0)
disp(['方程组的解:x8_0 = ']);
disp(x8_0)
disp('迭代次数:k8_cnt1=');
disp(k8_cnt1)
disp(['方程组的解:x8_1 = ']);
disp(x8_1)
disp('迭代次数:k8_cnt2=');
disp(k8_cnt2)
disp(['方程组的解:x8_2 = ']);
disp(x8_2)
function [x,n,flag]=SOR(A,b,eps,W,it_max)
%sor函数为用松弛迭代法求解线性方程组
%A为线性方程组的系数矩阵%b为线性方程组的常数向量
%eps为精度要求 %W为超弛因子 %max1为最大迭代次数
%x为线性方程组的解%n为迭代次数
%flag为指标变量,flag='OK!'表示迭代收敛达到指标要求%flag='fail!'表示迭代失败
    if nargin<5
        it_max=10000;
    end
    if nargin<4
        W=1;
    end
    if nargin<3
        eps=1e-11;
    end
    k=length(A);
    n=0;
    x=zeros(k,1);
    y=zeros(k,1);
    flag='OK!';
    while (1)
        y=x;
        for i=1:k
            z=b(i);
            for j=1:k
                if j~=i
                    z=z-A(i,j)*x(j);
                end
            end
            if abs(A(i,i))<1e-10 | n==it_max
                flag='fail!';
                return;
            end
            z=z/A(i,i);
            x(i)=(1-W)*x(i)+W*z;
        end
        if norm(y-x,inf)<eps
            break;
        end
        n=n+1;
    end
end
function [x,t,it,w] = SORFunc(A,b,I,eps,w)
% 逐次超松驰迭代法(successive over relaxation method)迭代法
% A: 系数矩阵 b: 载荷矩阵 I: 最大迭代次数
% w: 松弛因子(w=1 时即为 Gauss-Seidel 迭代法)
% x: 解矩阵% t: 时间
% it: 迭代次数% w: 松弛因子% 迭代初值默认为 0
tic%开始时间
    [n,~] = size(A);
    x = zeros(n,1);
    D = diag(diag(A)); %求 A 的对角矩阵
    L = -tril(A,-1); %求 A 的下三角矩阵,不带对角线
    U = -triu(A,1); %求 A 的上三角矩阵
    w_opt = 2/(1+sqrt(1-(vrho(D\(L+U)))^2)); % 最佳松弛因子
    if nargin < 4
        eps = 1e-6;
        w = w_opt;
    end
    if nargin < 5
        w = w_opt;
    end
    Lw = (D-w*L)\((1-w)*D+w*U);
    f = w*((D-w*L)\b);
    x_exact = A\b;
    it = 1;
    for k = 1:I-1
        x = Lw*x+f;
        if norm(x-x_exact)>eps
        it = it+1;
        end
    end
    t = toc;%结束时间
end
function [x, k] = SORFunmethod(A, b, x0, MaxIters, err, w)
%  函数功能:对超松弛迭代法求解线性方程组;
% function [x, k] = SORFunmethod(A, b, x0, MaxIters, err, w)
%  输入:A:系数矩阵   b:常数矩阵;  x0:初始解;
%  MaxIters:最大迭代次数;
%  err:精度阈值;  w:松弛因子; 输出: x:近似解;  k:迭代次数;
  n = length(x0); 
  x1 = x0;  
  x2 = zeros(n, 1); 
  x3 = zeros(n, 1);
  r = max(abs(b - A*x1));
  k = 0;
  while r > err
    for i = 1:n
        sum = 0;
        for j = 1:n
            if j > i
                sum = sum + A(i, j) * x1(j);
            elseif j < i
                sum = sum + A(i, j) * x2(j);
            end
        end
        x2(i) = (1 - w)*x1(i) + w*(b(i) - sum) / (A(i, i) + eps);
    end
    for i = n:-1:1
        sum = 0;
        for j = 1:n
            if j > i
                sum = sum + A(i, j) * x3(j);
            elseif j < i
                sum = sum + A(i, j) * x2(j);
            end
        end
        x3(i) = (1 - w) * x2(i) + w * (b(i) - sum) / A(i, i);
    end
    r = max(abs(x3 - x1));
    x1 = x3;
    k = k + 1;
    if k > MaxIters
        x = [];
        return;
    end
  end
  x = x1;       %最终输出结果
end
目录
相关文章
|
4天前
|
编解码 算法 数据安全/隐私保护
一维信号的小波变换与重构算法matlab仿真
本程序使用MATLAB2022A实现一维信号的小波变换与重构,对正弦测试信号进行小波分解和重构,并计算重构信号与原信号的误差。核心步骤包括:绘制分解系数图像、上抽取与滤波重构、对比原始与重构信号及误差分析。小波变换通过多分辨率分析捕捉信号的局部特征,适用于非平稳信号处理,在信号去噪、压缩等领域有广泛应用。
|
4天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。
|
3天前
|
算法 数据安全/隐私保护 索引
基于GWO灰狼优化的多目标优化算法matlab仿真
本程序基于灰狼优化(GWO)算法实现多目标优化,适用于2个目标函数的MATLAB仿真。使用MATLAB2022A版本运行,迭代1000次后无水印输出结果。GWO通过模拟灰狼的社会层级和狩猎行为,有效搜索解空间,找到帕累托最优解集。核心步骤包括初始化狼群、更新领导者位置及适应值计算,确保高效探索多目标优化问题。该方法适用于工程、经济等领域复杂决策问题。
|
1天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法matlab仿真
本项目基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法,实现MATLAB仿真,并对比Kawasaki sampler、IMExpert、IMUnif和IMBayesOpt四种方法。核心在于利用历史采样信息动态调整MCMC参数,以高效探索复杂概率分布。完整程序在MATLAB2022A上运行,展示T1-T7结果,无水印。该算法结合贝叶斯优化与MCMC技术,通过代理模型和采集函数优化采样效率。
|
7月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
282 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
7月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
165 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
7月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
142 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
10月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
10月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)

热门文章

最新文章