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

news2024/11/25 0:31:03

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

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

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

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

目录

💥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 evaluation
    NodesCoord=[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) );
    end
    if(size(NewNodesCoord,1)>0)
        SingleNodeTime = toc(TimerOfFunEval)/size(NewNodesCoord,1);
    else
        SingleNodeTime=NaN;
    end
​
    %%% meshing operation
    NrOfNodes=size(NodesCoord,1);
    disp(['Triangulation and analysis of ',num2str(NrOfNodes),' nodes...'])
    DT = delaunayTriangulation(NodesCoord(:,1),NodesCoord(:,2));
    Elements = DT.ConnectivityList;
    Edges = edges(DT);
​
    %phase analysis
    PhasesDiff=abs(Quadrants(Edges(:,1))-Quadrants(Edges(:,2)));
    PhasesDiff(PhasesDiff==3)=1;
    CandidateEdges=Edges(PhasesDiff==2|isnan(PhasesDiff),:);
​
    %Self-adaptive Mesh Generator Mode
    if(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)
            %visualization
            vis(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<0
                Prompt = '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;
                end
            end
        elseif(NrOfNodes>=NodesMax)
            Mode = 1;
        end
        if(Mode==1)
            disp("The mode has been switched to the regular GRPF")
            disp('---------------------')
        end
    end
​
    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代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/880152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS 将 json 对象转成字符串并保留格式 - JSON.stringify()

JSON.stringify(value, replacer, space) value&#xff1a;将要序列化成一个 JSON 字符串的值。 replacer&#xff08;可选&#xff09;&#xff1a;如果该参数是一个函数&#xff0c;则在序列化过程中&#xff0c;被序列化的值的每个属性都会经过该函数的转换和处理&#xf…

Prometheus的搭建与使用

一、安装Prometheus 官网下载地址&#xff1a;Download | Prometheus 解压&#xff1a;tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名&#xff1a; mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录&#xff1a; cd /home/prometheus查看配置文件&am…

item_get_desc-获得TB商品描述

一、接口参数说明&#xff1a; item_get_desc-获得淘宝商品描述&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_desc 名称类型必须描述keyString是调用key&#xff08;点…

安全加密框架图——Oracle安全开发者

Oracle安全开发者 ACLs 设计 ACLs&#xff08;访问控制列表&#xff09;时&#xff0c;可以根据以下思路进行设计&#xff1a; 所有者文件权限&#xff1a;确定文件的所有者能够对文件执行哪些操作&#xff0c;如读取、写入、执行等。这可以根据文件的性质和拥有者的职责来决…

Cygwin 配置C/C++编译环境以及如何编译项目

文章目录 一、安装C、C编译环境需要的包1. 选择gcc-core、gcc-g2. 选择gdb3. 选择mingw64下的gcc-core、gcc-g4. 选择make5. 选择cmake6. 确认更改7. 查看包安装状态 二、C、C 项目编译示例step1&#xff1a;解压缩sed-4.9.tar.gzstep2&#xff1a;执行./configure生成Makefile…

Nginx网站服务(安装nginx、平滑升级nginx、nginx各种访问配置)

一、Nginx概述 1、什么是nginx&#xff1f; 稳定性高、系统资源消耗低、对HTTP并发连接的处理能力高&#xff08;单台物理器可支持30000-50000个并发请求&#xff09; NG并发连接能力有2个因素的影响 ①CPU的个数 ②本地吴立琪系统的最大文件打开数2、Nginx应用场景 静态服…

日常BUG——普通页面跳转tabbar页面报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 微信小程序页面跳转的时候出现下面的问题&#xff1a; wx.redirectTo({url: /pages/index/i…

行业分析(思维逻辑)

1、 如何着手分析一个行业&#xff1f; - 知乎做行业分析&#xff0c;很容易陷入一个误区&#xff0c;就是认为&#xff1a;我只要能找到最全的、最准的信息&#xff0c;就能做好行研。所以很多知…https://www.zhihu.com/question/20219092/answer/666346625 2、 3、 4、 …

Linux下搭建java环境

文章目录 一&#xff0c;xshell链接linux二&#xff0c;linux安装jdk环境 一&#xff0c;xshell链接linux 这里用到的工具,VMware搭配CentOS7 64位Xshell5 操作之前确保,传输Xshell连接了虚拟机 打开Xshell,文件->新建 主机ip—>进入虚拟机,右键打开终端,输入命令:ifco…

统筹型人才PK执行型人才,有啥区别?

统筹型人才PK执行型人才&#xff0c;有啥区别&#xff1f; 在大企业成长序列中 在着力培养统筹型人才 趣讲大白话&#xff1a;将还是兵&#xff1f; 【趣讲信息科技257期】 **************************** 我有华为公司当员工的同事 当干到一定年龄和职位后 有个判定&#xff1a…

手把手教你更改Vue项目图标

引言&#xff1a; Vue.js 是一款轻量级的前端框架&#xff0c;具有灵活、高效和易用等特点。在开发Vue项目时&#xff0c;我们经常会使用第三方库或工具来为项目添加图标&#xff0c;以提升用户界面的美观度。在本文中&#xff0c;将向大家介绍如何手把手更改Vue项目的图标&am…

R语言实现计算净重新分类指数(NRI)和综合判别改善指数(IDI)

两个模型比较&#xff0c;与第一个模型相比&#xff0c;NRI&#xff08;重新分对的 - 重新分错的&#xff09;/总人数。IDI&#xff08;新模型患者平均预测概率-旧模型患者平均预测概率&#xff09;-&#xff08;新模型非患者平均预测概率-旧模型非患者平均预测概率&#xff09…

【Unity每日一记】关于物体(敌方)检测—(向量点乘相关)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

【游戏开发教程】Unity Cinemachine快速上手,详细案例讲解(虚拟相机系统 | 新发出品 | 良心教程)

文章目录 一、前言二、插件下载三、案例1&#xff1a;第三人称自由视角&#xff0c;Free Look character场景1、场景演示2、组件参数2.1、CinemachineBrain&#xff1a;核心2.2、CinemachineFreeLook&#xff1a;第三人称自由视角相机2.2.1、设置Follow&#xff1a;跟随2.2.2、…

“Linux vs. Windows: 一些你可能不知道的区别“

文章目录 每日一句正能量前言分享一些在Linux上顺理成章&#xff0c;换到Windows上就可能令人费解的事介绍或分享一些Linux的使用技巧介绍或分享一些Windows的使用技巧后记 每日一句正能量 世界上最暖心的一句话&#xff0c;不是你在成功时多热切地喝彩&#xff0c;而是在失意时…

大疆秋招指南,网申测评和面试攻略

大疆秋招内容简介 这是一个非常卷的时代&#xff0c;一到毕业季&#xff0c;各种各样规模不一的公司&#xff0c;纷纷向社会招聘&#xff0c;竞争实力强&#xff0c;知名度越高的企业&#xff0c;往往越能得到能力出众的人才的青睐&#xff0c;也正是在一批批新血液的注入下&a…

使用插件实现pdf,word预览功能

效果 代码&#xff1a; 插件地址&#xff1a; https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…

运营商三要素 API:构建安全高效的身份验证系统

当今数字化的世界中&#xff0c;身份验证是各行各业中至关重要的一环。为了保护用户的隐私和数据安全&#xff0c;企业需要寻求一种既安全可靠又高效便捷的身份验证方式。运营商三要素 API 应运而生&#xff0c;为构建安全高效的身份验证系统提供了有力的解决方案。 运营商三要…

【Apple】Logic Pro导入7.1.4.wav并自动分析多声道

Step1: 创建空项目 Step2: 选中下图“使用麦克风或...”这一项&#xff0c;底下要创建的轨道数填1就行。 点击创建之后&#xff1a; Step3: 拖动文件、拖动文件、拖动文件到项目中&#xff0c;并选中复选框“所有所选文件都源自一个项目&#xff08;将创建一个智能速度多轨道集…

Vue3使用vue-print-nb插件调起打印功能

一、效果图 二、使用方式 安装插件 //Vue2.0版本安装方法 npm install vue-print-nb --save yarn add vue-print-nb//Vue3.0版本安装方法&#xff1a; npm install vue3-print-nb --save yarn add vue3-print-nb在全局引用 import Print from vue-print-nb Vue.use(Print)打…