三维光子晶体能带结构计算的快速算法(FAME,Fast Algorithms for Maxwell's Equations)作者:南京应用数学中心林文伟教授团队及东南大学李铁香教授团队用途:光通讯、光子集成器件设计及国防科技等领域的研究4.0版本的北太天元更新了FAME到FAME2.0,包括Windows版本和Ubuntu22.04版本。FAME2.0 需要 CUDA环境才能正常加载和使用,推荐 NVIDIA® GeForce® GTX 1050、Tesla® K40、Quadro® P1000 及以上显卡,并推荐安装 CUDA 10 及以上版本。FAME2.0配套的CUDA环境可以在网盘上下载,下载对应的系统的库文件后放到 软件安装目录/plugins/FAME目录下通过网盘分享的文件:FAME2.0依赖库链接: https://pan.baidu.com/s/1MQVk8xjzHclt19gpFxmI9Q?pwd=j26v 提取码: j26v
利用估值法结合estlimt(f,a)函数(下面已给出该函数),通过table数据来估计下列函数f(x)在趋近于a点处的极限(保留四位小数)。functionestlimt=estlimt(f,a)formatlongifa==Infx0=[1e81e71e61e51e41e31e21e11];x00=x0(end:-1:1);xr=x00;xl=-1*xr;elsex0=[1e-61e-51e-41e-31e-21e-11];x00=x0(end:-1:1);xr=a+x00;xl=a-x00;endb1=f(xl);b2=f(xr);estlimt=table(xl',b1',x00',b2',xr','VariableNames',...{'自变量取值左','极限估值左','误差','极限估值右','自变量取值右'});end
在进行符号计算时,出现“运算 'sin' 不支持输入类型为 extern 的变量。”的问题,请问如何解决才能进行x的三角函数形式的符号运算?【帮助文档显示sin函数同时接受实数和复数输入,并未告知如何支持extern类型的变量输入】
%% Copyright(c) Naushad Ansari, 2017. % %% Please feel free to use this open-source code for research purposes only. % %% % %% contact at naushadansari09797@gmail.com in case of any query. % %% % %% % %% This function adds additive white Gaussian noise (with zero mean and % %% given snr) to a signal. Signal can be any n-D signal. %%-----------------------------------------------------------------------%% %%-----------------------------------------------------------------------%% % %% output: noisySig-> resultant n-dimensional noisy signal. % % %% input: sig-> original n-dimensional signal % reqSNR-> required/given SNR of the noise, to be added in the % given signal. %%-----------------------------------------------------------------------%% %%-----------------------------------------------------------------------%% function noisySig = addGaussianNoise(sig,reqSNR) sigEner = norm(sig(:))^2; % energy of the signal noiseEner = sigEner/(10^(reqSNR/10)); % energy of noise to be added noiseVar = noiseEner/(length(sig(:))-1); % variance of noise to be added noiseStd = sqrt(noiseVar); % std. deviation of noise to be added noise = noiseStd*randn(size(sig)); % noise noisySig = sig+noise; % noisy signal上面是一个可能的实现。目前使用这个函数和matlab的awgn基本效果差不多
信号处理出中,配合fft和ifft使用时,建议开发fftshift和ifftshift配合使用,便于工程师可视化分析。
gamma 函数在部分点的实现有些问题。例如 gamma(-4) Matlab 选择的是 +Inf,目前北太会给出错误。可以和 Matlab 行为保持一致,或者直接返回 NaN。这样对画图方便一些。目前的实现要画图,就只能手动分段。计算 1/gamma(x) 也变成不连续的了。即 Matlab 可以执行以下代码并画图
gamma([-5 -4 -3 -2 -1 0 5]) x = -5:0.01:5; plot(x, gamma(x))Matlab R2023b 输出
>> gamma([-5 -4 -3 -2 -1 0 5]) ans = Inf Inf Inf Inf Inf Inf 24北太 3.1.0 目前会报定义域错误
>> x = -5:0.01:5; >> plot(x, gamma(x)); 错误使用函数 gamma domain error 程序执行中显示有错误信息,请反馈给开发团队。目前要绘制 gamma 函数只能手动分段绘图:代码如下:
% 生成开区间 (start:stop) function range=openRange(start, step, stop) range = (start+eps(start)):step:(stop-eps(stop)); end % 绘制 gamma 函数 function gamma_plot() step = 0.01; x1 = [ openRange(-5.0, step, -4.0) openRange(-4.0, step, -3.0) openRange(-3.0, step, -2.0) openRange(-2.0, step, -1.0) openRange(-1.0, step, -0.0) ]'; x2 = [ openRange(0.0, step, 5.0) ]'; % draw plot(... x1,gamma(x1),... x2,gamma(x2),... 'LineWidth',2,... ); grid on; xlim([-5, 5]); ylim([-10, 10]); title('Gamma(x) Line Plot') xlabel('x'); ylabel('Gamma(x)'); end
北太天元是面向科学计算与工程计算的国产通用型科学计算软件,提供科学计算、可视化、交互式程序设计,具备丰富的底层数学函数库,支持数值计算、数据分析、数据可视化、数据优化、算法开发等工作,并通过SDK与API接口,扩展支持各类学科与行业场景,为各领域科学家与工程师提供优质、可靠的科学计算环境。北太天元V2.5(Windows版本)现已上线,绘图功能重磅升级,内置函数、工具箱丰富更新,让您感受多方位体验升级。查看下方视频可“沉浸式”体验功能升级亮点。 戳链接即刻下载免费试用:www.baltamatica.com/download一、绘图功能全新升级1、支持导出、网格线、缩小、放大、平移、旋转、还原视图等功能绘图窗口界面已全面更新,工具栏功能进一步完善。可使用鼠标对图形进行导出、增删网格线、缩放、平移、旋转、还原视图等操作。2、支持15种以上绘图类型可绘制二维线图、三维线图、曲面图、散点图、饼图、区域图、条形图、直方图、三维散点图、等高线图、箭头图、气泡图、阶梯图、含误差条的线图、箱线图等。3、支持设置图形属性,添加文本描述、轴标签、标题、图例和颜色栏等可设置线条颜色、线型、标记符号等图形属性,并支持添加图例、标题等,进一步提升绘图美观度与实用性。 可调整线条颜色并增加图例、颜色栏、标题等二、内置函数类型丰富1、基础数学支持基本算术运算、三角函数、特殊函数、线性方程、特征值和奇异值、矩阵分解、矩阵运算、随机数的生成、优化、稀疏矩阵的创建和运算等。2、语言基础北太天元目前支持的数据类型包括:int8/uint8/int16/uint16int32/uint32/int64/uint64double/single/complex/charlogical/string/struct/cell该版本可满足二维矩阵和数组的创建、合并、重构等使用需求,并支持常见数据类型和不同数据类型之间的转换,字符和字符串操作,以及高维矩阵的创建(高维矩阵相关操作正在开发中)。3、编程支持创建、运行、调试脚本,以及创建脚本函数、局部函数、匿名函数等。4、数据导入导出支持导入导出的数据类型包含double,single,int32,int64,logical,char,string,支持导入导出的文件格式包括csv,xlsx,mat,txt等。三、工具箱功能更新1、optimization 优化工具箱提供求解线性规划和混合整数线性规划、二次规划等函数。2、ODE支持常微分方程的初始值问题求解器,提供非刚性求解器、刚性求解器。3、fft 快速傅里叶变换提供一维二维的快速傅里叶变换、快速傅里叶逆变换等函数。4、spline 曲线拟合工具箱提供线性与非线性回归、插值、平滑化、后处理拟合等函数。5、computational_geometry 计算几何提供计算几何相关的数据结构和算法,如三角剖分、Voronoi图、多边形、多面体等函数。更多详细功能更新介绍可查看北太天元软件baltamatica_2.5.1 更新日志一、软件使用如您需学习使用北太天元,您可下载产品白皮书、用户手册等文档资料,或通过观看课程视频进一步了解软件操作。详细资料可通过【必看】北太天元软件新手指南查找。二、反馈与交流您的使用与建议是北太天元前进的重要动力,诚邀您反馈软件使用体验(如安装情况、响应时间、稳定性等),我们将第一时间回复您的问题与需求。欢迎大家在社区多多发帖讨论。
感觉你们这随机数生成还有点问题呀,搞个hist(randn(200000,1),200)出的图中间有个奇怪的峰,不敢拿来做随机试验了。
17.1 原理 完整思想请看我前面写的路径规划(十三)基于搜索的路径规划算法-前言,,和其他的基于搜索的路径规划算法的区别仅在于启发式函数的不同. 双向A*则稍微复杂些,但可以简单理解为起始节点和终点同时将对方视为目标节点,并按照A*的启发式函数,相向生长,当两者相遇时,则停止迭代,并分别往回追溯自己的父节点即可得到路径。17.2 程序示例
16.1 原理 完整思想请看我前面写的路径规划(十三)基于搜索的路径规划算法-前言,,和其他的基于搜索的路径规划算法的区别仅在于启发式函数的不同 A*则是结合了Best-first Searching和Dijkstra,它将当前节点到初始节点和到目标节点的距离之和作为启发式函数。16.2 程序示例16.3 参考A Formal Basis for the heuristic Determination of Minimum Cost Paths
15.1 原理完整思想请看我前面写的路径规划(十三)基于搜索的路径规划算法-前言,和其他的基于搜索的路径规划算法的区别仅在于启发式函数的不同Dijkstra则和Best-first-searching相反,它不是将到目标节点的距离作为启发式函数,而是将到起始节点的距离作为启发式函数。15.2 程序示例
14.1 原理这里的Best-first-searching和数据结构里学的图搜索算法BFS(广度优先搜索)不是一个东西。完整思想请看我前面写的路径规划(十三)基于搜索的路径规划算法-前言下面说说Best-first-searching的核心思想:Best-first Searching的启发式函数f(x)=dist(x,x_goal),即Best-first Searching每一步都在预选集合中寻找距离目标节点最近的的那个节点。这里的dist(x,y),如果节点x,y无法通过碰撞检测,则为inf,如果能通过碰撞检测,可以直接用欧几里得距离代替。14.2 程序示例14.3 参考https://blog.csdn.net/potato_uncle/article/details/109124362?ops_request_misc=&request_id=&biz_id=102&utm_term=best%20first%20search&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-109124362.nonecase&spm=1018.2226.3001.4187
基于搜索的路径规划算法基本都是一个套路,它们都是根据启发函数重备用节点的集合中来寻找下一个节点,不同的启发函数也就有不同的搜索类算法。搜索类算法是离散化的算法,体现在整个图的区域是由有限个小方块区域组成的。我们暂且把这些小方块区域称为“节点”。因此,整个区域被有限个节点填充,且每个节点的邻居节点为有限个。设置两个集合OPEN,CLOSE,OPEN初始状态设为{x_init},CLOSE 初始状态设为空集。依据不同的启发式函数,从open集中选择一个点加入到close集中,然后拓展open集,如上图,右下角的某个点被某种启发式函数选中,加入到close集中,并相继拓展open集下面介绍下搜索类算法的前进过程:当上述伪码退出循环后,沿着x_goal的父节点往前回溯极为路径各搜索类算法的区别在于第三行启发函数的类型的不同,导致连接的节点不同。
几种RRT对比如下:几种RRT对比视图mp4 RRT及其变种都是依托于采样+在树结构上加减枝的形式进行路径规划的,具有全局收敛特性,但是效率稳定性不高。不过可以针对性地对其主要函数进行优化进行效率的改进:优化采样,优化树结构等。一种加速RRT的思路就是,从起始点和目标节点同时生长RRT树,这就是connected_RRT。此外,针对变化的环境,还有extend_RRT和Dynamic_RRT。 RRT*是一种趋近于最优路径的方案,它通过重布线来实现这一目的,它在理论上能达到最优解,但它全局随机撒点的特性导致它在远离目标路径的地方做了过多的生长。 为了集中优化资源,RRT*-smart应运而生,它比较在乎路径和障碍物的拐点的附近的优化,它通过路径优化步骤判断出路径和障碍物的拐点,并在拐点的邻域内投入更多的资源(即撒更多的点),以实现集中优化资源。 但RRT*-smart依然浪费了太多的随机点在远离目标路径的区域,那什么才叫不远离目标路径的区域呢?informed RRT*则解决了这一问题,它利用初始路径的长度,起始点和目标点,画出了一个椭圆,informed RRT*认为,这个椭圆区域就是不远离目标路径的区域,生成这个椭圆后,后续的随机撒点只洒在这个椭圆区域内,当更优的路径被发现,则根据这个新路径的长度,缩小椭圆,进一步在有效区域集中撒点资源,以实现加速。 然而,RRT*类的算法是总会面临一个问题,那就是重布线,这个令RRT*能够逼近最优解的创新恰恰成为了它慢的原因。 于是,另一种思路被提出,那就是提前给定随机点,然后通过启发式函数来连接这些点以生长路径,这就是FMT*,FMT*专门针对解决高维构型空间中的复杂运动规划问题,在预先确定的采样点数量上执行前向动态规划递归,并相应地通过在代价到达空间中稳步向外移动生成路径树。FMT*能很快的找到一条路径,但是当我们想对这条路径进行优化时,只有通过加密随机采样点的方式,然而,FMT*是一种单批算法,面对新的采样点分布时,它只能重新开始计算。 为了融合informed RRT*在有效区域集中随机点的特点和FMT*快速生长的特点,就诞生了BIT*。它能够在椭圆区域内分批撒点,实现快速生长的同时,还能自我优化。参考https://www.youtube.com/watch?v=TQIoCC48gp4
11.1 原理 简单来说,BIT*是结合了Informed RRT*和FMT*的优点的一种算法。回顾一下,Informed RRT*是对RRT*的一种优化,在RRT*生成一个初始路径后,则以初始路径的长度,起始点和目标点为焦点,画一个椭圆,Informed RRT*在后续随机采点时,只取落在这个椭圆内的点,一次采一个点,重复lm次。FMT*则与RRT那一套不同,它不是边采点,边生长树,而是一次性提前在整个区域(不包含障碍物区域)内采lm个点,只重复一次。 下面我们来说说,Informed RRT*和优缺点FMT*,然后就知道为什么要引出BIT*了。 先说FMT*,FMT*的优点是从起始位置开始构建,没有重布线过程,因此节约时间,适用于复杂的障碍物环境。但是FMT*的缺点是,它只有1批,FMT*路径的精度完全取决于当前批撒点的密度,当你想要提升精度时,只能重新开始一批,重新更密集的撒点,然后重新开始规划。 再说Informed RRT*,Informed RRT*的优点恰好弥补了FMT*的缺点,想要提升精度,只需撒更多的点就好了,而Informed RRT*的撒点过程时一直在进行的,它一批只撒一个点,重复很多批,开始新的批的时候之前的信息不会被抛弃,只要Informed RRT*一直撒点,就可以达到任意精度。但是Informed RRT*的缺点也显而易见,它需要重布线,计算效率低。 所以自然就想到,能不能利用FMT*的优点,提前撒好点,不用重布线,提升计算效率,又能多批进行,以不断提升精度?当然能,这就是BIT*算法 BIT*的过程总结为下图:11.2 伪码11.3 参考1、Batch Informed Trees (BIT*): Informed Asymptotically Optimal Anytime Search2、Batch Informed Trees (BIT*): Sampling-based Optimal Planning via the Heuristically Guided Search of Implicit Random Geometric Graphs