用于全局复根和极点查找算法的自适应网格生成器(Matlab代码实现)

本文主要是介绍用于全局复根和极点查找算法的自适应网格生成器(Matlab代码实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果​编辑

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

SA-GRPF算法旨在找到固定区域中函数的所有零点和极点。该程序包括一种为常规GRPF算法创建自适应初始网格的方法。所提出的解决方案使用梯度计算来确定需要细化的网格区域,包括零点和极点接近的区域。可以分析一类函数,并且可以考虑任意形状的搜索区域。如所附示例所示,自适应网格允许使用更少的样本更快、更准确地分析函数。该算法不仅限于计算电动力学。它可用于类似的问题,例如声学、控制理论和量子力学。

文件简介:

  1. SA_GRPF.m - 启动程序
  2. analysis_parameters.m - 包含分析的所有参数,例如:
  • 矩形域大小(XB,XE,YB,YE)
  • 精度
  • 方法:两个可用的自适应和常规GRPF - (模式)
  • 可选趣味参数(可选))
  • 缓冲区(ItMax, NodesMin, NodesMax)
  1. fun.m - 计算根和极的函数的定义
  2. 运行示例:在 SA_GRPF.m (addpath) 中添加文件夹取消注释行 23 或 24,以便包含包含 (analysis_parameters.m) 和 (fun.m) 文件的文件夹,或将它们从包含示例的文件夹复制到主文件夹并启动 SA_GRPF 程序。

自适应网格生成器是一种用于优化算法的工具,可以帮助在复杂的问题空间中进行搜索。在全局复根和极点查找算法中,自适应网格生成器可以用来帮助确定算法在复杂函数中查找根和极点的位置。​以下是一个自适应网格生成器的工作流程,适用于全局复根和极点查找算法:

初始网格生成: 确定搜索空间的初始边界和分辨率。这可以是一个较大的矩形区域,或者是函数定义域的一部分。选择初始网格的分辨率,即在每个维度上分割区间的数量。

函数评估: 在初始网格中的每个网格点处评估函数的值。根据函数值的正负性,可以确定是否可能存在根或极点。

网格点分析: 分析网格点处的函数值,尤其是找到可能的根和极点。这可以通过观察函数值的符号变化、斜率变化等来实现。

细分网格: 对于在前一步中找到的可能的根和极点,可以选择在其周围细分网格以进一步精细搜索。这可以是固定的细分因子,或者可以根据函数的性质自适应地确定。

迭代: 重复执行步骤 3 和步骤 4,直到达到预定的迭代次数或满足一定的收敛条件。每次迭代都会根据当前网格的情况进行进一步的网格细化。

结果提取: 在最终的网格中,可以确定函数的根和极点的位置。这可以通过分析细分网格中的函数值和性质来完成。

收敛性判断: 在算法运行过程中,可以监控根和极点的位置是否收敛到某个稳定状态。如果在连续的迭代中,根和极点的位置变化很小,可以认为算法已经收敛。

📚2 运行结果

主函数部分代码:

close all;
clear all;
clc;
format long;
restoredefaultpath
​
%choose the example
%addpath('0_rational_function');
addpath('3_graphene_transmission_line');
​
analysis_parameters %input file
NewNodesCoord = rect_dom(xb,xe,yb,ye); %generates the initial mesh
​
%initialization of the variables
it=0;
NodesCoord=[];
PreviousIt.EdgesToSplit=[];
PreviousIt.Elements=[];
PreviousIt.GradeInElements=[];
NrOfNodes = size(NodesCoord,1);
​
%%%% analysis modes    
%Mode = 0 - Self-adaptive Mesh Generator 
%Mode = 1 - Regular Global complex Roots and Poles Finding algorithm -> https://github.com/PioKow/GRPF
%Mode = 2 - The result of aborted analysis
%Mode = 3 - The final result (accuracy achieved)
%%%%
%% general loop
while it<ItMax && Mode<2
​%function evaluationNodesCoord=[NodesCoord ; NewNodesCoord];disp(['Evaluation of the function in ',num2str(size(NewNodesCoord,1)),' new points...'])
​TimerOfFunEval = tic;for Node=NrOfNodes+1:NrOfNodes+size(NewNodesCoord,1)FunctionValues(Node,1)=fun(NodesCoord(Node,:),Optional);Quadrants(Node,1) = vinq( FunctionValues(Node,1) );endif(size(NewNodesCoord,1)>0)SingleNodeTime = toc(TimerOfFunEval)/size(NewNodesCoord,1);elseSingleNodeTime=NaN;end
​%%% meshing operationNrOfNodes=size(NodesCoord,1);disp(['Triangulation and analysis of ',num2str(NrOfNodes),' nodes...'])DT = delaunayTriangulation(NodesCoord(:,1),NodesCoord(:,2));Elements = DT.ConnectivityList;Edges = edges(DT);
​%phase analysisPhasesDiff=abs(Quadrants(Edges(:,1))-Quadrants(Edges(:,2)));PhasesDiff(PhasesDiff==3)=1;CandidateEdges=Edges(PhasesDiff==2|isnan(PhasesDiff),:);
​%Self-adaptive Mesh Generator Modeif(Mode==0)[EdgesToSplit,GradeInElements] = adaptive(NodesCoord,FunctionValues,DT,Elements,Edges,CandidateEdges,PreviousIt,Tol);PreviousIt.EdgesToSplit=EdgesToSplit;PreviousIt.Elements=Elements;PreviousIt.GradeInElements=GradeInElements;
​if(isempty(EdgesToSplit))Mode = 3;elseif(NrOfNodes>NodesMin && NrOfNodes<NodesMax)%visualizationvis(NodesCoord, Edges, Quadrants,PhasesDiff)disp(['Do you want to continue the SA mode and add new ',num2str(size(EdgesToSplit,1)),' points?'])disp(['Estimated time of the analysis: ',num2str(floor(size(EdgesToSplit,1)*SingleNodeTime)),' s'])Mode=-1;while Mode<0Prompt = 'Select analysis mode -> Adaptive/Regular/Cancel? [a]/[r]/[c]';str = input(Prompt,'s');if(str=="r")Mode=1;elseif(str=="c")Mode=2;elseif(str=="a")Mode=0;endendelseif(NrOfNodes>=NodesMax)Mode = 1;endif(Mode==1)disp("The mode has been switched to the regular GRPF")disp('---------------------')endend
​if(Mode==1) %Regular Global complex Roots and Poles Finding algorithm[EdgesToSplit, Mode] = regular(NodesCoord,Tol,DT,Elements,CandidateEdges);end

🎉3 参考文献

[1]王天荆,李秀琴,白光伟等.无线传感器网络中基于自适应网格的多目标定位算法[J].通信学报,2019,40(07):197-207.

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码实现

这篇关于用于全局复根和极点查找算法的自适应网格生成器(Matlab代码实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303950

相关文章

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

基于SpringBoot实现分布式锁的三种方法

《基于SpringBoot实现分布式锁的三种方法》这篇文章主要为大家详细介绍了基于SpringBoot实现分布式锁的三种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、基于Redis原生命令实现分布式锁1. 基础版Redis分布式锁2. 可重入锁实现二、使用Redisso

SpringBoo WebFlux+MongoDB实现非阻塞API过程

《SpringBooWebFlux+MongoDB实现非阻塞API过程》本文介绍了如何使用SpringBootWebFlux和MongoDB实现非阻塞API,通过响应式编程提高系统的吞吐量和响应性能... 目录一、引言二、响应式编程基础2.1 响应式编程概念2.2 响应式编程的优势2.3 响应式编程相关技术

SpringBoot的全局异常拦截实践过程

《SpringBoot的全局异常拦截实践过程》SpringBoot中使用@ControllerAdvice和@ExceptionHandler实现全局异常拦截,@RestControllerAdvic... 目录@RestControllerAdvice@ResponseStatus(...)@Except

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

Nginx之https证书配置实现

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录背景介绍为什么不能部署在 IIS 或 NAT 设备上?具体实现证书获取nginx配置扩展结果验证

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1