数值分析算法 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天前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
|
1天前
|
算法 安全 机器人
基于包围盒的机械臂防碰撞算法matlab仿真
基于包围盒的机械臂防碰撞算法通过构建包围盒来近似表示机械臂及其环境中各实体的空间占用,检测包围盒是否相交以预判并规避潜在碰撞风险。该算法适用于复杂结构对象,通过细分目标对象并逐级检测,确保操作安全。系统采用MATLAB2022a开发,仿真结果显示其有效性。此技术广泛应用于机器人运动规划与控制领域,确保机器人在复杂环境中的安全作业。
|
1天前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
2天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
6月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
162 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
6月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
139 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
9月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
9月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)

热门文章

最新文章