数值分析算法 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
目录
相关文章
|
6天前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
2天前
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
9 2
|
5天前
|
机器学习/深度学习 算法 定位技术
MATLAB - 遗传算法(GA)求解旅行商问题(TSP)
MATLAB - 遗传算法(GA)求解旅行商问题(TSP)
12 3
|
6天前
|
算法
基于EM期望最大化算法的GMM模型参数估计matlab仿真
此程序在MATLAB 2022a中实现了基于EM算法的GMM参数估计,用于分析由多个高斯分布组成的混合数据。程序通过迭代优化各高斯组件的权重、均值与协方差,直至收敛,并输出迭代过程的收敛曲线及最终参数估计结果。GMM假设数据由K个高斯分布混合而成,EM算法通过E步计算样本归属概率,M步更新参数,循环迭代直至收敛。
|
7天前
|
算法
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。
|
1月前
|
传感器 算法
基于无线传感器网络的MCKP-MMF算法matlab仿真
MCKP-MMF算法是一种启发式流量估计方法,用于寻找无线传感器网络的局部最优解。它从最小配置开始,逐步优化部分解,调整访问点的状态。算法处理访问点的动态影响半径,根据带宽需求调整,以避免拥塞。在MATLAB 2022a中进行了仿真,显示了访问点半径请求变化和代价函数随时间的演变。算法分两阶段:慢启动阶段识别瓶颈并重设半径,随后进入周期性调整阶段,追求最大最小公平性。
基于无线传感器网络的MCKP-MMF算法matlab仿真
|
17天前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
24天前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
|
15天前
|
存储 算法 调度
基于和声搜索算法(Harmony Search,HS)的机器设备工作最优调度方案求解matlab仿真
通过和声搜索算法(HS)实现多机器并行工作调度,以最小化任务完成时间。在MATLAB2022a环境下,不仅输出了工作调度甘特图,还展示了算法适应度值的收敛曲线。HS算法模拟音乐家即兴创作过程,随机生成初始解(和声库),并通过选择、微调生成新解,不断迭代直至获得最优调度方案。参数包括和声库大小、记忆考虑率、音调微调率及带宽。编码策略将任务与设备分配映射为和声,目标是最小化完成时间,同时确保满足各种约束条件。
|
25天前
|
算法 网络性能优化 调度
基于De-Jitter Buffer算法的无线网络业务调度matlab仿真,对比RR调度算法
1. **功能描述**: 提出了一个去抖动缓冲区感知调度器,结合用户终端的缓冲状态减少服务中断。该算法通过动态调整数据包发送速率以优化网络延迟和吞吐量。 2. **测试结果**: 使用MATLAB 2022a进行了仿真测试,结果显示De-Jitter Buffer算法在网络拥塞时比RR调度算法更能有效利用资源,减少延迟,并能根据网络状态动态调整发送速率。 3. **核心程序**: MATLAB代码实现了调度逻辑,包括排序、流量更新、超时和中断处理等功能。 仿真结果和算法原理验证了De-Jitter Buffer算法在无线网络调度中的优势。

热门文章

最新文章