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

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

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

Jacobi迭代法

雅可比迭代法保证收敛的条件是矩阵A(Ax=b)为严格的行对角占优矩阵,对于每一行,对角线上的元素之绝对值大于其余元素绝对值的和。需要说明的是:即使不满足此条件,雅可比法有时仍可以收敛。

在这里插入图片描述

%% 雅可比迭代法 [x,k,index] = Jacobimethod(A,b,ep)
% A为方程组的系数矩阵;
% b为方程组的右端项;
% ep为精度要求,缺省值为1e-5;
% it_max为最大迭代次数,缺省值为100;
% x为方程组的解;
% k为迭代次数;
% index为指标变量,index=0表示迭代失败,index=1表示收敛到指定要求
A = [10 3 1; 2 -10 3 ;1 3 10];
b = [14 -5 14 ]'; %b = [14; -5; 14 ];
eps = 0.005;
[x_0,k0_cnt,index] = Jacobimethod(A,b,eps);
disp('迭代次数:k0_cnt=')
disp(k0_cnt)
disp(['方程组的解:x_0 = '])
disp(x_0)

%% 求线性方程组的Jacobi迭代法,调用格式为[x, k] = JacobiFunc(A,b,x0,eps,it_max)
%  其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-6,x0迭代初始值
%  it_max 为最大迭代次数,默认为1000
%  x 为线性方程组的解,k迭代次数
x0=[0,0,0]';%[x1;x2;x3]列向量
it_max = 1000;eps=1e-6;
[x1, k1_cnt] = JacobiFunc(A,b,x0,eps,it_max);
disp('迭代次数:k1_cnt=');
disp(k1_cnt)
disp(['方程组的解:x1 = ']);
disp(x1)

 %% [x,k]=JacobiFunmethod(A,b,x0,N,emg)
 % A:线性方程组左端矩阵,b:线性方程组右端向量,x0:迭代初值
 % N:迭代次数上界,若迭代次数大于n,则迭代失败, emg:精度指标
 % k:迭代次数,
 % x:用迭代法求得的线性方程组的近似解
x0=[0,0,0]';%[x1;x2;x3]列向量
it_max = 1000;eps=1e-6;
[x2,k2_cnt]=JacobiFunmethod(A,b,x0,it_max,eps);
disp('迭代次数:k2_cnt=');
disp(k2_cnt)
disp(['方程组的解:x2 = ']);
disp(x2)
function [x,k] = JacobiFunc(A,b,x0,eps,it_max)
%  求线性方程组的Jacobi迭代法,调用格式为[x, k] = JacobiFunc(A,b,x0,eps,it_max)
%  其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-6,x0迭代初始值
%  it_max 为最大迭代次数,默认为200
%  x 为线性方程组的解,k迭代次数
  if nargin == 3
      eps = 1.0e-6;
      M = 200;
  elseif nargin<3
      disp('输入参数数目不足3个');
      return
  elseif nargin ==5
      M = it_max;
  end
  D = diag(diag(A));%求A的对角矩阵
  L = -tril(A,-1);%求A的下三角矩阵
  U = -triu(A,1);%求A的上三角矩阵
  B = D\(L+U);
  f = D\b;
  x = B*x0+f;
  k = 1;%迭代次数
  while norm(x-x0)>=eps
      x0 = x;
      x = B*x0+f;
      k = k+1;
      if(k>=M)
          disp('Warning:迭代次数太多,可能不收敛!');
          return;
      end
  end
end
function [ x,k,index]=Jacobimethod(A,b,ep,it_max)
% 求线性方程组的雅可比迭代法,其中,
% A为方程组的系数矩阵;
% b为方程组的右端项;
% ep为精度要求,缺省值为1e-5;
% it_max为最大迭代次数,缺省值为100;
% x为方程组的解;
% k为迭代次数;
% index为指标变量,index=0表示迭代失败,index=1表示收敛到指定要求,
    [n,m] = size(A);nb = length(b);
%当方程组行与列的维数不相等时,停止计算,并输出出错信息。
    if n ~=m
            error('The rows and columns of matrix A must be equal! ');
            return;
    end
    % 当方程组与右端项的维数不匹配时,停止计算,并输出出错信息。
    if m~=nb
            error ('The columns of A must be equal the length of b! ');
            return;
    end

    if nargin<4
        it_max =100;
    end
    if nargin<3 
        ep = 1e-5;
    end

    k=0;x = zeros (n,1);y=zeros (n,1);index=1;
    while 1
        for i=1 :n
                y(i) =b(i) ;
                for j=1:n
                    if j~=i
                            y(i) =y(i) -A(i,j)*x(j);
                    end
                end
       if abs(A(i,i))<1e-10  &&k==it_max       % abs绝对值函数
                    index =0 ;return;
                end
                y(i) =y(i)/A(i,i);
        end
        k = k +1;
        if norm(y-x,inf) <ep
            break;
        end
        x = y;
end
function [x,k]=JacobiFunmethod(A,b,x0,N,emg)
 % A:线性方程组左端矩阵,b:线性方程组右端向量,x0:迭代初值
 % N:迭代次数上界,若迭代次数大于n,则迭代失败, emg:精度指标
 % k:迭代次数,
 % x:用迭代法求得的线性方程组的近似解
     n=length(A);      
     x=zeros(n,1); %设置变量
     X=zeros(n,1); % X
     x=x0; k=0; 
     r=max(abs(b-A*x));
     while (r>emg)          % 迭代循环过程
       for i=1:n
           sum=0;
           for j=1:n
                if i~=j
                 sum=sum+A(i,j)*x(j);
                end
           end
           X(i)=(b(i)-sum)/A(i,i);
       end
       r=max(abs(X-x)); 
       x=X; 
       k=k+1;
       if k>N
          disp('迭代失败,返回');
          return;
       end
end
目录
相关文章
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
2天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
5天前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
5天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
1月前
|
算法 决策智能
基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法
本项目基于MATLAB2022A,使用模拟退火(SA)和蚁群优化(ACO)算法求解旅行商问题(TSP),对比两者的仿真时间、收敛曲线及最短路径长度。SA源于金属退火过程,允许暂时接受较差解以跳出局部最优;ACO模仿蚂蚁信息素机制,通过正反馈发现最优路径。结果显示SA全局探索能力强,ACO在路径优化类问题中表现优异。

热门文章

最新文章