首页> 标签> 开发者
"开发者"
共 53014 条结果
全部 问答 文章 公开课 课程 电子书 技术圈 体验
你会选择云原生数据库吗?
阿里云数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。如今,阿里云数据库已为超过10万客户服务,超过40万数据库实例迁移至阿里云上。 如今,云原生已经成为阿里云的一大标签,最早布局云原生技术,同时也打造出了丰富的云原生产品家族。其中云原生数据库尤为突出,目前已经进入云原生数据库2.0时代。 阿里云瑶池数据库峰会将于3月24日于北京举办,本次峰会集结了国内外产学研大咖,凝聚知名数据库技术领袖、资深行业专家、生态合作伙伴和媒体同仁,共论云原生一站式数据管理与服务的发展之路。届时会有线上直播同步进行,欢迎大家一同收看直播点击观看 也欢迎开发者一同参与到数据库相关讨论中来,一起联动碰撞思维! 本期话题: 你用过哪些云原生数据库?使用相比于传统数据库,你从实际使用体验出发,觉得云原生数据库有哪些优势呢? 你知道什么是云原生数据库的serverless能力吗?你认为云原生数据库serverless能有效帮你的业务“降本增效”吗? 你认为在哪些场景下云原生数据库会发挥更大的作用?欢迎结合实际业务进行分享。 本期奖品: 截止2023年3月31日24时,本次话题将选取3名高质量的回答,奖励社区定制卫衣*1。 注:话题讨论要求原创,如有参考,一律注明出处,否则视为抄袭不予发奖。获奖名单将于3个工作日内公布,礼品将于7个工作日内发放,节假日顺延。
问答
Cloud Native  ·  数据管理  ·  Serverless  ·  数据库  ·  开发者
2023-03-22
Git之使用GitHub搭建远程仓库
在上一节中,我们学习了如何使用Git,构建我们的本地仓库,轻松的实现了版本控制以及代码还原,修改日志查看等;读者肯定不满足与本地是吧,假如是多个人一起来开发一个程序呢?我们需要一个作为服务器的远程仓库!当然搭建一个服务器是需要成本的,为什么不把项目托管到Github上呢?作为开源代码库以及版本控制系统,Github拥有140多万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法,不需要任何成本,为何不使用呢?本节就来学习如何把我们的代码托管到Github上!1.账号注册&仓库创建打开Github官网注册:Github官网,填写注册相关信息:用户呢称,邮箱,密码注册完,跳转到如下页面,选择仓库购买方式(私有仓库,别人不可以访问,要权限),一般我们自己玩选Free:PS:对了,这时候你邮箱可能收到一封验证邮件,点下完成验证。接下来,创建一个我们的代码仓库:为自己的仓库添加点内容提示,就是项目的一些概述简单介绍下主页的一些东西:2.Clone代码库到本地当然,你可以直接用图形化界面克隆,不过我还是喜欢通过命令行来Clone,先复制下Clone的地址然后在某个地方,右键打开Git Bash:键入:git clone https://github.com/ZPJay/Garbage.git然后可以看到我们的代码库就下载完成了:打开文件夹,可以看到下述内容:3.分支管理对于刚接触版本控制工具的朋友来说,分支可能比较陌生,但是他会给我们带来很大的便利!限于篇幅,笔者直接丢个链接,大家看看图就知道了:廖雪峰的官方网站:创建和合并分支!写得真心很赞~建议收藏!了解概念后,我们来熟悉与分支相关的几个命令:①创建分支(后者创建同时会切换分支):git branch v1.0.3 或 git checkout -b v1.0.4②查看版本库中所有分支:git branch -a③切换到某一分支:git checkout v1.0.3④删除某一分支:git branch -D v1.0.4⑤合并分支git merge v1.0.34.本地仓库与远程仓库同步问题前面执行的这些分支操作都是在本地进行的,说了项目托管到GitHub上,我们肯定要跟远程仓库有交流是吧!我们去年前面已经试过用clone命令把项目下载到本地,那么我们修改后如何把代码同步到Github上呢?我们先对我们的本地仓库做一点点修改,接着git add和git commit本地准备后,然后:git push origin master 或者直接 git push将我们本地的内容提交上去:然后看下我们的Github,可以看到内容已经发生改变,而且提交者是我的另一个账号!有同步到服务器,肯定有服务器同步到本地是吧,很简单,就一个git pull然后就可以啦!好吧,本节就写那么多,相信你看到上面的Git教程还有一些冲突解决,分支管理,Bug分支等待高级的Git用法。①使用Github作为我们的项目管理工具:我们都是把项目托管到Github上的,然后有两个分支:开发和测试两个分支,每个版本一个分支,最后发布时才把分支合并到master上!提bug也是在上面提的,还是比较便利的!②使用Trello来做流程控制,也是比较简洁高效的!有兴趣的可以了解了解!另外,国内访问Github可能比较缓慢,而且如果是私有仓库是要收费的,如果公司没有使用代理或者是私人开发,可能略显鸡肋,不过可以考虑下使用国产的开源仓库:Git@OSC,由开源中国提供的,提供了1000个私人仓库,好像,感觉还不错。有兴趣的可以考虑将代码托管到这里:http://git.oschina.net/!
文章
Shell  ·  开发工具  ·  数据安全/隐私保护  ·  git  ·  开发者
2023-03-24
【SVM回归预测】基于遗传算法优化支持向量机GA-SVM的塑料热压成型预测(多输入单输出)附Matlab源码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。更多Matlab仿真内容点击👇智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统信号处理              图像处理               路径规划       元胞自动机        无人机 ⛄ 内容介绍受固化温度,固化时间,固化压 力,升温速度,加压温度和加压时间等多因素影响,塑料热压成型温升模型难以准确建立.通过已有试验数据,建立起遗传算法-支持向量机(GA-SVM)塑料 热压成型模型,有效利用SVM学习速度快的特点,在小样本情况下具有良好的非线性建模和泛化能力,基于SVM的优化控制算法具有很好的控制性能.试验表 明,该模型实现了对塑料热压成型的智能优化预测;这种方法在塑料生产控制中具有广阔的应用前景.⛄ 部分代码function NewChrom = xovsp(OldChrom, XOVR)%%  交叉单点% This function performs single-point crossover between pairs of % individuals and returns the current generation after mating.% Input parameters:%    OldChrom  - Matrix containing the chromosomes of the old%                population. Each line corresponds to one individual%                (in any form, not necessarily real values).%    XOVR      - Probability of recombination occurring between pairs%                of individuals.% Output parameter:%    NewChrom  - Matrix containing the chromosomes of the population%                after mating, ready to be mutated and/or evaluated,%                in the same format as OldChrom.%%  使用适当的参数调用低级函数if nargin < 2    XOVR = NaN; endNewChrom = xovmp(OldChrom, XOVR, 1, 0);⛄ 运行结果⛄ 参考文献[1] 王飞. 基于支持向量机的热压混合材料板力学特性预测模型研究[D]. 东北农业大学.[2] 方向, 丁兆军, 舒新前. 基于遗传算法优化的支持向量机(SVM-GA)低阶煤制氢产量预测模型[J]. 煤炭学报, 2010(S1):5.[3] 胡双俊, 贺春尧. 基于GA-SVM塑料热压成型优化预测[J]. 现代塑料加工应用, 2015, 27(3):3.[4] 李晓斌. 基于遗传算法优化支持向量机的交通流量预测[J]. 微电子学与计算机, 2010(10):4.⛳️ 完整代码❤️部分理论引用网络文献,若有侵权联系博主删除❤️ 关注我领取海量matlab电子书和数学建模资料
文章
机器学习/深度学习  ·  传感器  ·  算法  ·  计算机视觉  ·  开发者
2023-03-24
【通信】基于最大容量的SCMA系统功率分配算法设计附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。更多Matlab仿真内容点击👇智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统信号处理              图像处理               路径规划       元胞自动机        无人机 ⛄ 内容介绍按照移动通信行业"使用一代,建设一代,研发一代"的发展节奏,业界预计2030年左右会商用第六代移动通信系统(Sixth Generation,6G).与现在的移动通信系统相比,未来的6G将更加的灵活,智能,安全和可靠.其更大的传输速率和容量将满足更多的应用场景.目前6G移动通信系统还没有统一的标准,根据国内外的研究情况,可以预见去蜂窝(Cell-Free,CF)大规模MIMO有望成为6G标准技术之一.在蜂窝网络中,设备到设备(Device-to-Device,D2D)通信技术通过使D2D用户复用蜂窝用户的频谱资源来有效提高系统的频谱效率.但是,频谱复用会造成蜂窝用户和D2D用户之间的干扰,影响整体的通信质量.在保证二者的用户服务质量的前提下,提出了一种以系统容量最大化为目标的资源分配方法.⛄ 部分代码function LTEconfig= lteparset3 %%系统仿真参数设置LTEconfig.SubFrame.Number=50;%%系统仿真子帧数LTEconfig.System.Bandwidth=625e3;%%系统总带宽(Hz)LTEconfig.PRB.deta_bandwidth=0;%%系统物理资源块的间隔带宽(Hz)LTEconfig.Subcarrier.bandwidth=156e3;%系统子载波带宽(Hz)LTEconfig.Subcarrier.Number=4;%系统子载波数LTEconfig.SpeedOfLight=3e8;%%光速(m/s)LTEconfig.inter_bts_distance=250*sqrt(3);%%小区边长LTEconfig.number_of_sectors=3;%六边形小区被划分为3个扇区LTEconfig.eNB_max_antenna_gain=14;%基站的最大天线增益LTEconfig.data_res=20;%网格边长LTEconfig.antenna_azimuth_offset= 60;%天线方向的初始偏置角度 LTEconfig.SubFrame.Num_Symbol=14; %%%一个子帧的符号数LTEconfig.SubFrame.Duration=1e-3;%%%一个子帧的周期(s)%% 系统中UE的参数设计 %%LTEconfig.UE.Num_TX=1;%%%UE的发送天线数目LTEconfig.UE.Speed=2/3.6;%%%UE的移动速度LTEconfig.UE.Number=6;%%系统中UE的数目LTEconfig.UE.thermal_noise_density = -174;%温度为290K时,热噪声功率谱密度(dBm/Hz)LTEconfig.UE.receiver_noise_figure = 9;    % Receiver noise figure in dBLTEconfig.BS.Transmit_Power=40;%%%基站发射功率(W)LTEconfig.BS.Transmit_Power_dB=16;%单位16dB%data_res=LTEconfig.data_res;%% 布置中心小区 六边形 %%cell_side_length=LTEconfig.inter_bts_distance;eNodeB = LTE_init_create_eNodeB(cell_side_length);Neighborhood = zeros(6,2);%%六个顶点的位置坐标Neighborhood(1,:) = eNodeB(1).pos;Neighborhood(2,:) = eNodeB(2).pos;Neighborhood(3,:) = eNodeB(3).pos;Neighborhood(4,:) = eNodeB(6).pos;Neighborhood(5,:) = eNodeB(7).pos;Neighborhood(6,:) = eNodeB(4).pos;LTEconfig.BS.Position_X=eNodeB(5).pos(1);LTEconfig.BS.Position_Y=eNodeB(5).pos(2);%% 布置中心小区用户 %%LTEconfig.roi_x = [min(Neighborhood(:,1)),max(Neighborhood(:,1))];%%顶点横坐标的最小值和最大值 roi_x(1)是最小值,roi_x(2)是最大值LTEconfig.roi_y = [min(Neighborhood(:,2)),max(Neighborhood(:,2))];%%顶点纵坐标的最大、小值[roi_max_pixel roi_pixel_exact] = LTE_common_pos_to_pixel([LTEconfig.roi_x(2) LTEconfig.roi_y(2)],[LTEconfig.roi_x(1) LTEconfig.roi_y(1)],LTEconfig.data_res);%%横向纵向对应的网格数roi_height_pixel = roi_max_pixel(2);%%纵向roi_width_pixel  = roi_max_pixel(1);%%横向 pos_grid_pixel = zeros(roi_height_pixel*roi_width_pixel,2);%%网格坐标 pos_grid_pixel(:,1) = reshape(repmat(1:roi_width_pixel,roi_height_pixel,1),1,roi_width_pixel*roi_height_pixel); pos_grid_pixel(:,2) = repmat(1:roi_height_pixel,1,roi_width_pixel); pos_grid_meter(:,1) = pos_grid_pixel(:,1)*LTEconfig.data_res-LTEconfig.roi_x(2); pos_grid_meter(:,2) = pos_grid_pixel(:,2)*LTEconfig.data_res-LTEconfig.roi_y(2);Neighborhood = [Neighborhood;Neighborhood(1,:)]; in = inpolygon(pos_grid_meter(:,1),pos_grid_meter(:,2),Neighborhood(:,1),Neighborhood(:,2));%%规范区域:小区内 us_pos = zeros(sum(in),2);%%小区内用户数 b = 1; for i = 1 : length(in)     if in(i) > 0         us_pos(b,:) = pos_grid_meter(i,:);%%小区内用户坐标         b = b + 1;     end      endfigure(1);plot(Neighborhood(:,1),Neighborhood(:,2),us_pos(:,1),us_pos(:,2),'.r');a=[59,79,100,288,310,332];%随机顺序% a=[6,89,100,288,300,332];%随机顺序% a=[59,66,100,288,310,332];ue_rand_pos=us_pos(a(1:LTEconfig.UE.Number),:);distance=sqrt((ue_rand_pos(:,1)-LTEconfig.BS.Position_X).^2+(ue_rand_pos(:,2)-LTEconfig.BS.Position_Y).^2);final=length(ue_rand_pos(:,1));LTEconfig.UE.Position_X=ue_rand_pos(:,1);LTEconfig.UE.Position_Y=ue_rand_pos(:,2); figure(2);plot(Neighborhood(:,1),Neighborhood(:,2),LTEconfig.UE.Position_X,LTEconfig.UE.Position_Y,'.r');LTEconfig.UE.pixel(:,1) = round((ue_rand_pos(:,1) + LTEconfig.roi_x(2))./LTEconfig.data_res);%%无单位制LTEconfig.UE.pixel(:,2) = round((ue_rand_pos(:,2) + LTEconfig.roi_y(2))./LTEconfig.data_res);%% 布置七小区eNodeBs_7cell=LTE_init_create_eNodeB_7cell;tx_pos = zeros(6,2);tx_pos(1,:)= eNodeBs_7cell(1).pos;tx_pos(2,:)= eNodeBs_7cell(2).pos;tx_pos(3,:)= eNodeBs_7cell(3).pos;tx_pos(4,:)= eNodeBs_7cell(6).pos;tx_pos(5,:)= eNodeBs_7cell(7).pos;tx_pos(6,:)= eNodeBs_7cell(4).pos;%% 计算邻小区基站对中心小区用户的天线增益 %%angle=zeros(LTEconfig.number_of_sectors,final,6);antenna = antennas.TS36942Antenna(LTEconfig.eNB_max_antenna_gain);axis=zeros(3,2,6);%各基站天线参考坐标antenna_gain=zeros(final,6);%用户到各基站的天线增益% for s_ = 1:LTEconfig.number_of_sectors%     azimuth = wrapTo360(LTEconfig.antenna_azimuth_offset+ 120*(s_-1));%小区天线角% endxy=[1,sqrt(3);-1,0;1,-sqrt(3)];for i=1:6    axis(:,1,i)=xy(:,1)+tx_pos(i,1);    axis(:,2,i)=xy(:,2)+tx_pos(i,2);endfor k=1:6    for i=1:LTEconfig.number_of_sectors        for j=1:final    %根据acosd(dot([x1-x2,y1-y2],[x3-x2,y3-y2])/(norm([x1-x2,y1-y2])*norm([x3-x2,y3-y2])))        angle(i,j,k)=acosd(dot([axis(i,1,k)-tx_pos(k,1),axis(i,2,k)-tx_pos(k,2)],[LTEconfig.UE.Position_X(j)-tx_pos(k,1),LTEconfig.UE.Position_Y(j)-tx_pos(k,2)])/(norm([axis(i,1,k)-tx_pos(k,1),axis(i,2,k)-tx_pos(k,2)])*norm([LTEconfig.UE.Position_X(j)-tx_pos(k,1),LTEconfig.UE.Position_Y(j)-tx_pos(k,2)])));        end    endendfor k=1:6    angle_min=zeros(1,final);    for i=1:final        angle_min(i)=min(angle(:,i,k));    end    antenna_gain(:,k)=antenna.gain(angle_min);end%% 计算用户收到基站的干扰,中心小区中继受到邻小区基站的干扰distance_to_enbs=zeros(final,6);%用户到六个邻小区基站的距离passloss_to_enbs=zeros(final,6);interference_to_enbs=zeros(final,6);for i=1:6    distance_to_enbs(:,i)=sqrt((LTEconfig.UE.Position_X-tx_pos(i,1)).^2+(LTEconfig.UE.Position_Y-tx_pos(i,2)).^2);    passloss_to_enbs(:,i)=LTE_pathloss_enb_to_ue(distance_to_enbs(:,i));%用户到邻小区基站的路径损耗    interference_to_enbs(:,i)=10.^((LTEconfig.BS.Transmit_Power_dB+antenna_gain(:,i)-passloss_to_enbs(:,i))/10);%用户受到基站的干扰   endLTEconfig.ue_interference_enbs=zeros(final,1);for ii=1:final    LTEconfig.ue_interference_enbs(ii)=sum(interference_to_enbs(ii,:));endend⛄ 运行结果⛄ 参考文献[1] 赵亚红, 张忠培, 吴伟陵. 一种基于最大容量的多载波系统自适应调制和功率分配算法[J]. 电子与信息学报, 2003, 25(7):5.[2] 白学兵. 去蜂窝大规模MIMO系统功率分配方案研究.[3] 刘占军, 朱志超, 邓欢,等. 一种基于RAN架构无线接入网系统容量最大化的功率分配算法[J]. 计算机应用研究, 2013, 30(5):3.[4] 肖海林, 王鹏, 欧阳缮,等. 多基站协作通信系统容量最大化的功率分配方案[J]. 北京邮电大学学报, 2013, 36(6):5.⛳️ 完整代码❤️部分理论引用网络文献,若有侵权联系博主删除❤️ 关注我领取海量matlab电子书和数学建模资料
文章
机器学习/深度学习  ·  传感器  ·  算法  ·  安全  ·  5G  ·  计算机视觉  ·  开发者
2023-03-24
【鲸鱼算法】基于融合动态概率阈值和自适应变异的鲸鱼优化算法PTMWOA求解单目标优化问题附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。更多Matlab仿真内容点击👇智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统信号处理              图像处理               路径规划       元胞自动机        无人机 ⛄ 内容介绍针对基本鲸鱼优化算法在非线性优化问题中存在的收敛精度低,易陷入局部最优解的问题,提出一种融合动态概率阈值和自适应变异的鲸鱼优化算法.首先,利用Fuch混沌和反向学习生成均匀的初始种群;其次,设计基于双曲余弦函数的动态调整概率阈值以协调算法全局搜索与局部开采能力,采用可变权重对鲸鱼位置更新公式修正,提高收敛速度和精度;最后,对鲸鱼精英个体引入自适应变异策略,以避免算法陷入局部最优解而搜索停滞.对13个基准测试函数仿真实验,结果表明,与基本GWO算法,PSO算法以及鲸鱼优化算法相比,该算法具有更好的求解精度,收敛速度.⛄ 部分代码%_________________________________________________________________________%% 鲸鱼优化算法             %%_________________________________________________________________________%% The Whale Optimization Algorithmfunction [Leader_score,Leader_pos,Convergence_curve]=WOA(SearchAgents_no,Max_iter,lb,ub,dim,fobj)% initialize position vector and score for the leader Leader_pos=zeros(1,dim);Leader_score=inf; %change this to -inf for maximization problems%Initialize the positions of search agentsPositions=initialization(SearchAgents_no,dim,ub,lb);Convergence_curve=zeros(1,Max_iter);t=0;% Loop counter% Main loopwhile t<Max_iter    for i=1:size(Positions,1)                % Return back the search agents that go beyond the boundaries of the search space        Flag4ub=Positions(i,:)>ub;        Flag4lb=Positions(i,:)<lb;        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;                % Calculate objective function for each search agent        fitness=fobj(Positions(i,:));                % Update the leader        if fitness<Leader_score % Change this to > for maximization problem            Leader_score=fitness; % Update alpha            Leader_pos=Positions(i,:);        end            end        a=2-t*((2)/Max_iter); % a decreases linearly fron 2 to 0 in Eq. (2.3)        % a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12)    a2=-1+t*((-1)/Max_iter);        % Update the Position of search agents     for i=1:size(Positions,1)        r1=rand(); % r1 is a random number in [0,1]        r2=rand(); % r2 is a random number in [0,1]                A=2*a*r1-a;  % Eq. (2.3) in the paper        C=2*r2;      % Eq. (2.4) in the paper                        b=1;               %  parameters in Eq. (2.5)        l=(a2-1)*rand+1;   %  parameters in Eq. (2.5)                p = rand();        % p in Eq. (2.6)                for j=1:size(Positions,2)                        if p<0.5                   if abs(A)>=1                    rand_leader_index = floor(SearchAgents_no*rand()+1);                    X_rand = Positions(rand_leader_index, :);                    D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % Eq. (2.7)                    Positions(i,j)=X_rand(j)-A*D_X_rand;      % Eq. (2.8)                                    elseif abs(A)<1                    D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % Eq. (2.1)                    Positions(i,j)=Leader_pos(j)-A*D_Leader;      % Eq. (2.2)                end                            elseif p>=0.5                              distance2Leader=abs(Leader_pos(j)-Positions(i,j));                % Eq. (2.5)                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);                            end                    end    end    t=t+1;    Convergence_curve(t)=Leader_score;end⛄ 运行结果⛄ 参考文献[1]毕孝儒, 牟琦, 龚尚福. 融合动态概率阈值和自适应变异的鲸鱼优化算法[J]. 微电子学与计算机, 2019, 36(12):7.⛳️ 完整代码❤️部分理论引用网络文献,若有侵权联系博主删除❤️ 关注我领取海量matlab电子书和数学建模资料
文章
机器学习/深度学习  ·  传感器  ·  算法  ·  Go  ·  计算机视觉  ·  开发者
2023-03-24
【机器人栅格地图】基于A星和D星算法求解机器人栅格地图最短路径附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。更多Matlab仿真内容点击👇智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统信号处理              图像处理               路径规划       元胞自动机        无人机 ⛄ 内容介绍在栅格地图的支持下,针对局部路径规划中的极小值陷阱问题,提出了可用于任意形状障碍物的通用避障算法.仿真结果表明,在障碍物信息部分或完全已知的复杂环境下,移动机器人能以稳定,光滑,合理的路径快速运动到目标点处.⛄ 部分代码function h = Heuristic(node1, node2, scale)    %% Manhattan Distance    %h = scale*(abs(node1(1) - node2(1)) + abs(node1(2) - node2(2)));    %% Chebyshev Distance    %h = scale*max([node1(1) - node2(1), node1(2) - node2(2)]);        %% Euclidean Distance    h = scale*sqrt((node1(1) - node2(1))^2 + (node1(2) - node2(2))^2);       %h = scale*((abs(node1(1) - node2(1))) - (abs(node1(2) - node2(2))) + (sqrt(2)-2)*min(abs(node1(1) - node2(1)),abs(node1(2) - node2(2))));    %dx = abs(node1(1) - node2(1));    %dy = abs(node1(2) - node2(2));    %if dy > dx    %    h = scale*sqrt(2) * abs(node1(1) - node2(1)) + abs(node1(2) - node2(2)) - abs(node1(1) - node2(1));    %else    %    h = scale*sqrt(2) * abs(node1(2) - node2(2)) + abs(node1(1) - node2(1)) - abs(node1(2) - node2(2));    %endend⛄ 运行结果⛄ 参考文献[1] 于晓天, 高秀花, 张俊,等. 基于分层栅格地图的移动机器人路径规划[J]. 导航与控制, 2017, 16(2):7.[2] 李吉功, 冯宜伟, 郭戈. 基于栅格地图的通用机器人避障算法[C]// 中国自动化学会第21届青年学术年会. 0.[3] 尤波, 李智, 丁亮,等. 一种基于栅格地图的移动机器人实时分层路径规划方法:.⛳️ 完整代码❤️部分理论引用网络文献,若有侵权联系博主删除❤️ 关注我领取海量matlab电子书和数学建模资料
文章
机器学习/深度学习  ·  传感器  ·  算法  ·  机器人  ·  定位技术  ·  计算机视觉  ·  开发者
2023-03-24
Cholesky正定矩阵分解附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。更多Matlab仿真内容点击👇智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统信号处理              图像处理               路径规划       元胞自动机        无人机 ⛄ 内容介绍本文介绍了矩阵的Cholesky分解算法,结合实例用Matiab编程实现了矩阵的Cholesky分解.⛄ 完整代码clc;clear all;Cx3=[1.0 0.5;     0.5 1.0];Cx1=[1.0 0.5 0.8 0.7 0.6;     0.5 1.0 0.7 0.6 0.8;     0.8 0.7 1.0 0.5 0.6;     0.7 0.6 0.5 1.0 0.9;     0.6 0.8 0.6 0.9 1.0];Cx2=[1.0 0.5 0.8 0.7 0.6 0.4;     0.5 1.0 0.7 0.6 0.8 0.5;     0.8 0.7 1.0 0.5 0.6 0.5;     0.7 0.6 0.5 1.0 0.9 0.6;     0.6 0.8 0.6 0.9 1.0 0.6;     0.4 0.5 0.5 0.6 0.6 1.0];  %正定矩阵的Cholesky分解 [m,n]=size(Cx1); if m~=n  %判断输入的矩阵是不是方阵     disp('输入的矩阵不是方阵,请重新输入');     return; end for i=1:n  %判断输入的矩阵是不是对称矩阵     for j=1:n         if Cx1(i,j)~=Cx1(j,i)             disp('输入的方阵不是对称矩阵,请重新输入');             return;         end     end end d=eig(Cx1); %根据方阵的特征值判定是不是正定矩阵 for i=1:n     if d(i)==0         disp('输入的矩阵不是正定矩阵,请重新输入');         return;     else         break;     end end disp('输入的矩阵可以进行Cholesky分解'); %如果是正定矩阵,可以进行下面的分解操作 R1=chol(Cx1,'lower');randn('state', sum(100*clock)); %利用时钟设置随机种子,这样每次产生的随机数就不同了 N=1000; % 设置样本个数 W1=zeros(5,N);WW1=zeros(5,N);for i=1:N    W1(:,i)=randn(5,1); endWW1(1,:)=W1(1,:).*0.45+4.5;WW1(2,:)=W1(2,:).*0.63+3.7;WW1(3,:)=W1(3,:).*0.58+5.3;WW1(4,:)=W1(4,:).*0.51+4.9;    WW1(5,:)=W1(5,:).*0.56+4.2;  Z1=R1*W1;rouMW1=corrcoef(W1');rouMZ1=corrcoef(Z1');Ls1=zeros(5,N);for p=1:5    maxZ1=max(Z1(p,:));    k=1;    for q=1:N        [minZ locZ]=min(Z1(p,:));        Ls1(p,locZ)=k;        k=k+1;        Z1(p,locZ)=maxZ1+1;    endendLLs1=Ls1;x1=zeros(5,N);for i=1:N    sx1=(i-0.5)/N;    x1(1,i)=norminv(sx1,4.5,0.45);    x1(2,i)=norminv(sx1,3.7,0.63);    x1(3,i)=norminv(sx1,5.3,0.58);    x1(4,i)=norminv(sx1,4.9,0.51);    x1(5,i)=norminv(sx1,4.2,0.56);    endS1=zeros(5,N);for i=1:5    tx1=x1(i,:);    tLs1=LLs1(i,:);    maxy1=max(tx1);    maxtLs1=max(tLs1);    for p=1:N        [C1 D1]=min(tx1);        [C2 D2]=min(LLs1(i,:));        tLs1(1,D2)=C1;        tx1(1,D1)=maxy1+1;        LLs1(i,D2)=maxtLs1+1;    end    S1(i,:)=tLs1;endrouMS1=corrcoef(S1'); %正定矩阵的Cholesky分解 [m,n]=size(Cx2); if m~=n  %判断输入的矩阵是不是方阵     disp('输入的矩阵不是方阵,请重新输入');     return; end for i=1:n  %判断输入的矩阵是不是对称矩阵     for j=1:n         if Cx2(i,j)~=Cx2(j,i)             disp('输入的方阵不是对称矩阵,请重新输入');             return;         end     end end d2=eig(Cx2); %根据方阵的特征值判定是不是正定矩阵 for i=1:n     if d2(i)==0         disp('输入的矩阵不是正定矩阵,请重新输入');         return;     else         break;     end end disp('输入的矩阵可以进行Cholesky分解'); %如果是正定矩阵,可以进行下面的分解操作 R2=chol(Cx2,'lower');randn('state', sum(100*clock)); %利用时钟设置随机种子,这样每次产生的随机数就不同了 % 设置样本个数 W2=zeros(6,N);WW2=zeros(6,N);for i=1:N    W2(:,i)=randn(6,1); end    WW2(1,:)=W2(1,:).*0.45+4.5;    WW2(2,:)=W2(2,:).*0.63+3.7;    WW2(3,:)=W2(3,:).*0.58+5.3;    WW2(4,:)=W2(4,:).*0.51+4.9;        WW2(5,:)=W2(5,:).*0.56+4.2;    WW2(6,:)=W2(6,:).*0.47+4.7;Z2=R2*W2;rouMW2=corrcoef(W2');rouMZ2=corrcoef(Z2');Ls2=zeros(6,N);for p=1:6    hig=max(Z2(p,:));    k=1;    for i=1:N        [b c]=min(Z2(p,:));         Ls2(p,c)=k;        k=k+1;        Z2(p,c)=hig+1;    endendLLs2=Ls2;x2=zeros(6,N);for i=1:N    tt=(i-0.5)/N;    x2(1,i)=norminv(tt,4.5,0.45);    x2(2,i)=norminv(tt,3.7,0.63);    x2(3,i)=norminv(tt,5.3,0.58);    x2(4,i)=norminv(tt,4.9,0.51);    x2(5,i)=norminv(tt,4.2,0.56);      x2(6,i)=norminv(tt,4.7,0.47);endfor i=1:6    y2=x2(i,:);    bb2=LLs2(i,:);    hig1=max(y2);    hig2=max(bb2);    for p=1:N        [C1 D1]=min(y2);        [C2 D2]=min(LLs2(i,:));       bb2(1,D2)=C1;    y2(1,D1)=hig1+1;       LLs2(i,D2)=hig2+1;endyy2(i,:)=bb2;endccc22=corrcoef(yy2');%for i=1:6%[f,xi]=ksdensity(yy2(i,:));%绘制图形%figure(i);%subplot(2,1,1);%plot(yy(i,:));%title('样本数据(Sample Data)')%subplot(2,1,2);%plot(xi,f);%title('概率密度分布(PDF)')%end %正定矩阵的Cholesky分解 [m,n]=size(Cx3); if m~=n  %判断输入的矩阵是不是方阵     disp('输入的矩阵不是方阵,请重新输入');     return; end for i=1:n  %判断输入的矩阵是不是对称矩阵     for j=1:n         if Cx3(i,j)~=Cx3(j,i)             disp('输入的方阵不是对称矩阵,请重新输入');             return;         end     end end d3=eig(Cx3); %根据方阵的特征值判定是不是正定矩阵 for i=1:n     if d(i)==0         disp('输入的矩阵不是正定矩阵,请重新输入');         return;     else         break;     end end disp('输入的矩阵可以进行Cholesky分解'); %如果是正定矩阵,可以进行下面的分解操作 R3=chol(Cx3,'lower');randn('state', sum(100*clock)); %利用时钟设置随机种子,这样每次产生的随机数就不同了 % 设置样本个数 W3=zeros(2,N);WW3=zeros(2,N);for i=1:N    W3(:,i)=randn(2,1); endfor i=1:N    WW3(:,i)=wblrnd(9.0,2.15,2,1); endZ3=R3*W3;ccc03=corrcoef(W3');ccc03ccc13=corrcoef(Z3');ccc13aa3=zeros(2,N);Ls3=zeros(2,N);for p=1:2hig=max(Z3(p,:));k=1;for i=1:N[b c]=min(Z3(p,:));Ls3(p,c)=k;k=k+1;Z3(p,c)=hig+1;endendLLs3=Ls3;x=zeros(2,N);for i=1:N    tt=(i-0.5)/N;    x3(1,i)=wblinv(tt,9.0,2.15);    x3(2,i)=wblinv(tt,9.0,2.15);   endfor i=1:2y3=x3(i,:);bb3=LLs3(i,:);hig1=max(y3);hig2=max(bb3);for p=1:N[C1 D1]=min(y3);[C2 D2]=min(LLs3(i,:));bb3(1,D2)=C1;y3(1,D1)=hig1+1;LLs3(i,D2)=hig2+1;endyy3(i,:)=bb3;endccc23=corrcoef(yy3');ccc23YY=[S1;yy2;yy3];YYccc3=corrcoef(YY');ccc3for i=1:NF(1,i)=(S1(1,i)+S1(2,i)+S1(3,i)+S1(4,i)+S1(5,i))+(yy2(1,i)+yy2(2,i)+yy2(3,i)+yy2(4,i)+yy2(5,i)+yy2(6,i))+(yy3(1,i)+yy3(2,i));FF(1,i)=(WW1(1,i)+WW1(2,i)+WW1(3,i)+WW1(4,i)+WW1(5,i))+(WW2(1,i)+WW2(2,i)+WW2(3,i)+WW2(4,i)+WW2(5,i)+WW2(6,i))+(WW3(1,i)+WW3(2,i));endminF=min(F);maxF=max(F);del=(maxF-minF)/5;pp=linspace(minF-del,maxF+del,100) ;[f1,xi1]=ksdensity(F,pp,'function','pdf');[f2,xi2]=ksdensity(FF,pp,'function','pdf');figure(1);plot(xi1,f1,'r');hold onplot(xi2,f2,'b');title('概率密度分布(PDF)')pp=linspace(minF-del,maxF+del,100) ;[f11,xi11]=ksdensity(F,pp,'function','cdf');[f22,xi22]=ksdensity(FF,pp,'function','cdf');figure(2);plot(xi11,f11,'r');hold onplot(xi22,f22,'b');title('累积概率分布')⛄ 运行结果⛄ 参考文献[1]杨蕊. 矩阵的Cholesky分解的Matlab实现[J]. 中国科技信息, 2007(4):2.❤️部分理论引用网络文献,若有侵权联系博主删除❤️ 关注我领取海量matlab电子书和数学建模资料
文章
机器学习/深度学习  ·  传感器  ·  算法  ·  计算机视觉  ·  开发者
2023-03-24
基于Matlab实现ANFIS算法
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。更多Matlab仿真内容点击👇智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统信号处理              图像处理               路径规划       元胞自动机        无人机 ⛄ 内容介绍阐述了自适应模糊推理系统 ( Adaptive Network-based Fuzzy Inference System,ANFIS)网络 ,提出了水运货运量预测的 ANFIS网络预测模型 .以 MATLAB为工具 ,以 1 985~ 2 0 0 1年我国水运货运量为训练样本 ;2 0 0 2年我国水运货运量为校验样本 ,对网络进行训练后 ,预测了 2 0 0 3~2 0 1 0年我国水运货运量 .估算结果表明 ,同 BP神经网络模型相比 ,此模型具有更高的准确性 .⛄ 完整代码clear;close all;gamma=0.75;%设定惯性因子eps1=0.005;%设定停止训练的条件参数m1=8;%设定隶属函数个数m2=8;a=-1;b=1;w0=a+(b-a)*rand(1,m1*m2);%初始化权值阵for i=1:2    switch i        case 1,beta=0.75;%设定学习率        otherwise,beta=0.25;    end    c=[2/7*(0:m1-1)-1;2/7*(0:m2-1)-1];%初始化Cij    sigma=0.1213*ones(2,m1);%初始化σij    w=w0;    mu=zeros(2,m1);%初始化隶属度层    alpha=zeros(1,m1*m2);%初始化规则层    alpha_=zeros(1,m1*m2);%初始化归一化层        delta2=zeros(2,m1);%初始化δ2    dw=zeros(1,m1*m2);%初始化权值变化量    dc=zeros(2,m1);%初始化c变化量    dsigma=zeros(2,m1);%初始化σij变化量        %----------------训练过程----------------%    err=1;%初始化误差    er=[];    counter=0;%统计训练步数    while(err>=eps1)        Par_E_w=zeros(1,m1*m2);%误差对权值阵的偏导数        Par_E_c=zeros(2,m1);%误差对c的偏导数        Par_E_sigma=zeros(2,m1);%误差对σ的偏导数        E=0;        for x1=-1:2/19:1            for x2=-1:2/19:1                yd=sin(pi*x1)*cos(pi*x2);%期望输出,导师信号                %正向传播                mu(1,:)=exp(-(x1-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层                mu(2,:)=exp(-(x2-c(2,:)).^2./sigma(2,:).^2);                s=zeros(2,m1,m1*m2);%初始化Sij                for m=1:m1                    for n=1:m2                        alpha((m-1)*m2+n)=min(mu(1,m),mu(2,n));%计算规则层(取小运算)                        if mu(1,m)<=mu(2,n)                            s(1,m,(m-1)*m2+n)=1;                        end                        if mu(1,m)>=mu(2,n)                            s(2,n,(m-1)*m2+n)=1;                        end                    end                end                alpha_=alpha/sum(alpha);%计算归一化层                                y=alpha_*w.';%计算网络输出                E=E+1/2*(yd-y)^2;%计算误差                %反向传播                delta5=yd-y;                delta4=delta5*w;                                for k=1:m1*m2                    delta3(k)=delta4(k)*(sum(alpha)-alpha(k))./sum(alpha)^2;                end                for m=1:2                    for n=1:m1                        delta2(m,n)=0;                        for l=1:m1*m2                            delta2(m,n)=delta2(m,n)+delta3(l)*s(m,n,l)*mu(m,n);                        end                    end                end                                Par_E_w=Par_E_w-delta5*alpha_;%计算偏导数                Par_E_c(1,:)=Par_E_c(1,:)-2*delta2(1,:).*(x1-c(1,:))./sigma(1,:).^2;                Par_E_c(2,:)=Par_E_c(2,:)-2*delta2(2,:).*(x2-c(2,:))./sigma(2,:).^2;                Par_E_sigma(1,:)=Par_E_sigma(1,:)-2*delta2(1,:).*(x1-c(1,:)).^2./sigma(1,:).^3;                Par_E_sigma(2,:)=Par_E_sigma(2,:)-2*delta2(2,:).*(x2-c(2,:)).^2./sigma(2,:).^3;            end        end                num=20*20;        Par_E_w=Par_E_w/num;        Par_E_c=Par_E_c/num;        Par_E_sigma=Par_E_sigma/num;                dw=-beta*Par_E_w+gamma*dw;        dc=-beta*Par_E_c+gamma*dc;        dsigma=-beta*Par_E_sigma+gamma*dsigma;                w=w+dw;        c=c+dc;        sigma=sigma+dsigma;                counter=counter+1;        er(counter)=E/num;        err=E/num;        %     if counter>1000        %         break;        %     end    end        %----------------测试过程----------------%    xx1=-1:2/19:1;    xx2=-1:2/19:1;    yd1=zeros(20,20);    for m=1:20        for n=1:20            yd1(m,n)=sin(pi*xx1(m))*cos(pi*xx2(n));%期望输出                        mu(1,:)=exp(-(xx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层            mu(2,:)=exp(-(xx2(n)-c(2,:)).^2./sigma(2,:).^2);                        for k=1:m1              %计算规则层                for l=1:m2                    alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));                end            end                        alpha_=alpha/sum(alpha);%计算归一化层            yr(m,n)=alpha_*w.';     %计算网络输出        end    end    errorf1=1/2*(yd1-yr).^2;%计算误差            xxx1=-1:2/11:1;    xxx2=-1:2/11:1;    yd2=zeros(12,12);    for m=1:12        for n=1:12            yd2(m,n)=sin(pi*xxx1(m))*cos(pi*xxx2(n));%期望输出                        mu(1,:)=exp(-(xxx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层            mu(2,:)=exp(-(xxx2(n)-c(2,:)).^2./sigma(2,:).^2);                        for k=1:m1              %计算规则层                for l=1:m2                    alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));                end            end                        alpha_=alpha/sum(alpha);%计算归一化层            yr2(m,n)=alpha_*w.';     %计算网络输出        end    end    errorf2=1/2*(yd1-yr).^2;%计算误差            %----------------绘图----------------%    figure(i);    sn=sprintf('β=%4.2f,γ=%4.2f',beta,gamma);        X=ones(size(xx2.'))*xx1;    Y=xx2.'*ones(size(xx1));        subplot(2,2,1);    surf(X,Y,yd1);    xlabel('x1');    ylabel('x2');    zlabel('期望的输出yd');    title(sn);        subplot(2,2,3);    surf(X,Y,yr);    xlabel('x1');    ylabel('x2');    zlabel('实际网络的输出yr');    title(sn);        subplot(2,2,2);    plot(er);    xlabel('训练步数');    ylabel('误差');    title(sn);        subplot(2,2,4);    surf(X,Y,errorf1);    xlabel('x1');    ylabel('x2');    zlabel('误差');    title(sn);        figure(i+2);    sn=sprintf('β=%4.2f,γ=%4.2f 泛化能力测试',beta,gamma);        X=ones(size(xxx2.'))*xxx1;    Y=xxx2.'*ones(size(xxx1));    subplot(2,1,1);    surf(X,Y,yd2);    xlabel('x1');    ylabel('x2');    zlabel('期望的输出yd');    title(sn);        subplot(2,1,2);    surf(X,Y,yr2);    xlabel('x1');    ylabel('x2');    zlabel('实际网络的输出yr');    title(sn);        beta    counterend⛄ 运行结果⛄ 参考文献[1] 张志红, 韩直, 肖盛燮,等. 基于ANFIS交通流实时预测及在MATLAB中的实现[J]. 重庆交通学院学报, 2007.[2] 王宇, 刘小健, 董元胜. 基于MATLAB的ANFIS网络在水运货运量预测中的应用[J]. 武汉理工大学学报:交通科学与工程版, 2004, 28(4):3.[3] 王保峰, 石春和, 王忠强. 一种基于MATLAB的ANFIS自适应消噪设计[J]. 福建电脑, 2006(1):2.[4] 陈新兵. ANFIS的MATLAB实现与液压成型机模糊温控系统的研究[D]. 湖南大学, 2005.[5] 申伟, 张元培. 基于MATLAB的自适应神经网络模糊系统(ANFIS)的应用[C]// 制造业自动化与网络化制造学术交流会. 2004.❤️部分理论引用网络文献,若有侵权联系博主删除❤️ 关注我领取海量matlab电子书和数学建模资料
文章
机器学习/深度学习  ·  传感器  ·  资源调度  ·  算法  ·  计算机视觉  ·  开发者
2023-03-24
【BP时序预测】基于鲸鱼算法优化BP神经网络实现温度数据预测附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室🍊个人信条:格物致知。更多Matlab仿真内容点击👇智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统信号处理              图像处理               路径规划       元胞自动机        无人机 ⛄ 内容介绍实时监控拱坝的温度对工程进度和坝体安全具有重要意义.以白莲崖碾压混凝土拱坝温度监测数据 为研究对象,建立基于MATLAB的拱坝温度监测WOA-BP神经网络预测模型,用原型观测数据对其进行校核和检验,并BP预测结果进行比较.结果证明,用WOA-BP人工神经网络建立坝体变形的神经网络模型对大坝变形能够进 行较高精度的预测,具有良好的应用前景.⛄ 部分代码function [Leader_pos,Leader_score, curve]=WOA(popsize,maxgen,dim,lb,ub,fitness)%初始化位置向量和领导者得分Leader_pos=zeros(1,dim);Leader_score=10^20;   %% 初始化种群for i=1:dim    ub_i=ub(i);    lb_i=lb(i);   Positions(:,i)=rand(popsize,1).*(ub_i-lb_i)+lb_i;endcurve=zeros(maxgen,1);%初始化收敛曲线%% 循环开始h0=waitbar(0,'WOA optimization...');for t=1:maxgen    for i=1:size(Positions,1)%对每个个体一个一个检查是否越界        %对每个个体一个一个检查是否越界        % 返回超出搜索空间边界的搜索代理        Flag4ub=Positions(i,:)>ub;        Flag4lb=Positions(i,:)<lb;        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;%超过最大值的设置成最大值,超过最小值的设置成最小值        %目标函数值的计算        fit(i)=fitness( Positions(i,:));                % 更新领导者位置        if fit(i)<Leader_score            Leader_score=fit(i);            Leader_pos=Positions(i,:);        end    end        a=2-t*((2)/maxgen);    a2=-1+t*((-1)/maxgen);    %参数更新    for i=1:size(Positions,1)        r1=rand();r2=rand();        A=2*a*r1-a;        C=2*r2;               b=1;        l=(a2-1)*rand+1;                p = rand();                for j=1:size(Positions,2)%对每一个个体地多维度进行循环运算            %收缩包围机制            if p<0.5                if abs(A)>=1                    rand_leader_index = floor(popsize*rand()+1);%floor将 X 的每个元素四舍五入到小于或等于该元素的最接近整数                    X_rand = Positions(rand_leader_index, :);                    D_X_rand=abs(C*X_rand(j)-Positions(i,j));                    Positions(i,j)=X_rand(j)-A*D_X_rand;                elseif abs(A)<1                    D_Leader=abs(C*Leader_pos(j)-Positions(i,j));                    Positions(i,j)=Leader_pos(j)-A*D_Leader;                end                %螺旋更新位置            elseif p>=0.5                distance2Leader=abs(Leader_pos(j)-Positions(i,j));                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);            end        end    end    curve(t)=Leader_score;    waitbar(t/maxgen,h0)endclose(h0)setdemorandstream(pi);⛄ 运行结果⛄ 参考文献[1] 秦焕瀛, 齐辉, 彭金辉,等. 基于BP神经网络的拱坝温度监测数据预测模型[J]. 水电与抽水蓄能, 2011, 35(001):57-59.[2] 肖雄. PSO优化BP神经网络岩爆预测的Matlab实现[J]. 中国房地产业, 2018(17):1.[3] 郭利进, 乔志忠. 基于遗传算法优化BP神经网络的粮食温度预测研究[J]. 粮食与油脂, 2023, 36(1):5.[4] 戴宝赋. 基于BP神经网络的光伏发电量预测算法研究及实现.⛳️ 完整代码❤️部分理论引用网络文献,若有侵权联系博主删除❤️ 关注我领取海量matlab电子书和数学建模资料
文章
机器学习/深度学习  ·  传感器  ·  监控  ·  算法  ·  安全  ·  计算机视觉  ·  开发者
2023-03-24
【SQL开发实战技巧】系列(二):简单单表查询
前言本篇文章介绍一些SQL开发基础的内容,讲解的主要内容是:NULL空值的运算、coalesce比nvl的优势、拼接列实现批量脚本、如何通过rownum限制返回的行数以及如何正确的使用rownum从表中随机返回 n 条记录。【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。一、查询表中所有的行与列进行查询操作之前, 我们先看一下表结构,我这里查询的是oracle官方案例用户scott下的表。SQL> desc scott.emp; Name Null? Type ----------------------------------------- -------- ---------------------------- EMPNO NOT NULL NUMBER(4) 编码 ENAME VARCHAR2(10) 名称 JOB VARCHAR2(9) 工作 MGR NUMBER(4) 主管 HIREDATE DATE 聘用日期 SAL NUMBER(7,2) 工资 COMM NUMBER(7,2) 提成 DEPTNO NUMBER(2) 部门编码如果领导要看员工所有信息。这个操作很简单,大家应该都会。只要用select*就可以返回目标表中所有的列,查询语句及执行结果如下:SQL> select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7369 SMITH CLERK 7902 1980-12-17 800.00 20 7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 7566 JONES MANAGER 7839 1981-4-2 2975.00 20 7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30 7782 CLARK MANAGER 7839 1981-6-9 2450.00 10 7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20 7839 KING PRESIDENT 1981-11-17 5000.00 10 7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30 7876 ADAMS CLERK 7788 1987-5-23 1100.00 20 7900 JAMES CLERK 7698 1981-12-3 950.00 30 7902 FORD ANALYST 7566 1981-12-3 3000.00 20 7934 MILLER CLERK 7782 1982-1-23 1300.00 10 1001 test 2021-10-9 1 15 rows selected如果想要修改日期的显示格式,也可以通过to_char*等函数来实现,这些后面会有单独一章讲解,其次,如果你发现你通过sqlplus无法展示的如我这样一行显示完全,可以通过设置set linesize、set pagesize、col ename for a20等等设置页面格式的命令自定义,或则通过plsql的命令行访问,博主就是用的plsql命令行展示的!二、从表中检索部分行如果想看公司有多少销售人员,那么在查询数据时只需加一个过滤条件就可以。职位列是job,销售人员条件就是WHERE job='SALESMAN':SQL> SELECT * FROM emp WHERE job = 'SALESMAN'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30三、查找空值如果要查询某一列为空的数据怎么办呢?比如,返回提成(comm)为空的数据。SQL> SELECT* FROM emp WHERE comm= NULL ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 从步骤1中明显能看到comm有为null的数据,为什么这里查不到呢?原因是NULL是不能用"="运算符的,要用IS NULL判断,正确的写法如下。SQL> select * from emp where comm is null; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7369 SMITH CLERK 7902 1980-12-17 800.00 20 7566 JONES MANAGER 7839 1981-4-2 2975.00 20 7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30 7782 CLARK MANAGER 7839 1981-6-9 2450.00 10 7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20 7839 KING PRESIDENT 1981-11-17 5000.00 10 7876 ADAMS CLERK 7788 1987-5-23 1100.00 20 7900 JAMES CLERK 7698 1981-12-3 950.00 30 7902 FORD ANALYST 7566 1981-12-3 3000.00 20 7934 MILLER CLERK 7782 1982-1-23 1300.00 10 1001 test 2021-10-9 1 11 rows selectedNULL不支持加、减、乘、除、大小比较、相等比较,否则只能为空。SQL> select * from dept where 1>=null; DEPTNO DNAME LOC ------ -------------- ------------- SQL> select * from dept where 1<=null; DEPTNO DNAME LOC ------ -------------- ------------- SQL> select * from dept where 1+null>=0; DEPTNO DNAME LOC ------ -------------- ------------- SQL> select * from dept where 1+null<=0; DEPTNO DNAME LOC ------ -------------- ------------- SQL> select * from dept where 1*null>=0; DEPTNO DNAME LOC ------ -------------- ------------- SQL> select * from dept where 1*null<=0; DEPTNO DNAME LOC ------ -------------- ------------- SQL> 当然了,在使用其他函数的时候最好测试一下有NULL时会返回什么结果。SQL> select replace('abcde','b',null) from dual; REPLACE('ABCDE','B',NULL) -------------------------------- acde SQL> select greatest(1,null) from dual; GREATEST(1,NULL) ---------------- SQL> 可以看到,不同的函数对NULL的支持也不一样,所以大家遇到NULL时最好测试一下,而不是仅凭经验或猜测!四、拿”返回个值中第一个不为空的值”证明coalesce比nvl好用对于下面sql:SELECT coalesce(comm,0) FROM emp;可能有人会问为什么用coalesce而不用nvl?当然是coalesce更好用了!拿”返回个值中第一个不为空的值”这个需求来说:SQL> with t as ( 2 select null as a,null as b,'z' as c,null as d,'f' as e,null as f from dual 3 union all 4 select null as a,null as b,null as c,'y' as d,null as e,'a' as f from dual 5 union all 6 select null as a,null as b,null as c,null as d,'d' as e,'s' as f from dual 7 ) 8 select coalesce(a,b,c,d,e,f) from t 9 ; COALESCE(A,B,C,D,E,F) --------------------- z y d可以看到,相对nvl来说,coalesce支持多个参数,能很方便地返回第一个不为空的值。如果上面的语句改用nvl,就要嵌套很多层。SELECT nvl(nvl(nvl(nvl(nvl(a,b),c),d),e),f) FROM t;五、查找满足多个条件的行简单的查询,写起来容易,那复杂一点的呢?比如,我们要查询部门10中的所有员工、所有得到提成的员工以及部门20中工资不超过2000美元的员工。这是三个条件的组合,符合上述任一条件即可。我们把这三个条件整理成逻辑表达式的形式:(部门10中的员工OR所有得到提成的员工OR(工资<=2000and部门号=20))那我们这么写这个需求:SELECT * FROM EMP WHERE (DEPTNO = 10 OR COMM IS NOT NULL OR (SAL <= 2000 and DEPTNO = 20)); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7369 SMITH CLERK 7902 1980-12-17 800.00 20 7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 7782 CLARK MANAGER 7839 1981-6-9 2450.00 10 7839 KING PRESIDENT 1981-11-17 5000.00 10 7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30 7876 ADAMS CLERK 7788 1987-5-23 1100.00 20 7934 MILLER CLERK 7782 1982-1-23 1300.00 10 9 rows selected对于多个条件的组合,要使用括号,这样在更改维护语句时可以不必再考虑优先级问题,而且可以很容易地借助各种工具找到各组合条件的起止位置。六、从表中检索部分列前面我们都是取表中所有的列,但实际的场景中,常常只需要返回部分列的数据就可以。如只需员工编码、员工名称、雇佣日期、工资。所以一般要明确指定查询哪些列,而不是用"*"号来代替。另外,明确要返回的列也会使语句的维护更简单,而不必每次看到语句时都需要查看表结构才知道会返回什么数据。SQL> SELECT empno, ename, hiredate, sal FROM emp WHERE deptno = 10; EMPNO ENAME HIREDATE SAL ----- ---------- ----------- --------- 7782 CLARK 1981-6-9 2450.00 7839 KING 1981-11-17 5000.00 7934 MILLER 1982-1-23 1300.00七、为列取别名不是每个人都能看懂那些简写的字母字段什么意思,所以有时候需要给列取个别名。可以如下面所示在as后面跟别名,也可以不要as,直接在列名后跟别名即可。SQL> SELECT ename AS 姓名, deptno AS 部门编号,sal AS 工资,comm AS 提成 FROM emp; 姓名 部门编号 工资 提成 ---------- ---- --------- --------- SMITH 20 800.00 ALLEN 30 1600.00 300.00 WARD 30 1250.00 500.00 JONES 20 2975.00 MARTIN 30 1250.00 1400.00 BLAKE 30 2850.00 CLARK 10 2450.00 SCOTT 20 3000.00 KING 10 5000.00 TURNER 30 1500.00 0.00 ADAMS 20 1100.00 JAMES 30 950.00 FORD 20 3000.00 MILLER 10 1300.00 test 15 rows selected八、在 WHERE 子句中引用取别名的列写报表时,经常会加上各种条件,而直接在条件中使用别名比列名(如:d001,n002)要清晰得多,引用别名时千万别忘了嵌套一层,因为这个别名是在SELECT之后才有效的.SQL> SQL> SELECT * 2 FROM (SELECT sal AS 工资, comm AS 提成 from emp) X 3 WHERE 工资 <1000; 工资 提成 --------- --------- 800.00 950.00 如果你不嵌套一层,会报错的!如下:SQL> SELECT sal AS 工资, comm AS 提成 from emp 2 WHERE 工资 <1000; SELECT sal AS 工资, comm AS 提成 from emp WHERE 工资 <1000 ORA-00904: "工资": 标识符无效九、拼接列实现批量脚本若有人不喜欢看表格式的数据,希望返回的数据都像"CLARK的工作是MANAGER"这样的显示。我们可以用字符串连接符"||"来把各列拼在一起。SQL> SELECT ename || '的工作是'|| job AS msg FROM emp WHERE deptno = 10 ; MSG --------------------------------------------------- CLARK的工作是MANAGER KING的工作是PRESIDENT MILLER的工作是CLERK当然,拼接列还有更多意义,比如我平时对某个用户下所有表收集统计信息,我就可以这么写脚本来生成批量脚本:select 'begin'||chr(13)|| 'dbms_stats.lock_table_stats(ownname =>'''||a.OWNER||''',tabname =>'''||a.TABLE_NAME||''');'||chr(13)||'END;'||chr(13)||'/'||chr(13)||'prompt '||rownum from dba_tables a where a.OWNER in('ZYD'); SQL> select 'begin'||chr(13)|| 2 'dbms_stats.lock_table_stats(ownname =>'''||a.OWNER||''',tabname =>'''||a.TABLE_NAME||''');'||chr(13)||'END;'||chr(13)||'/'||chr(13)||'prompt '||rownum 3 from dba_tables a where a.OWNER in('ZYD'); 'BEGIN'||CHR(13)||'DBMS_STATS.LOCK_TABLE_STATS(OWNNAME=>'''||A.OWNER||''',TABNAM -------------------------------------------------------------------------------- begin dbms_stats.lock_table_stats(ownname =>'ZYD',tabname =>'TEST_ORACLE_HIVE'); END; / prompt 1 begin dbms_stats.lock_table_stats(ownname =>'ZYD',tabname =>'TEST_HIVE_ORACLE'); END; / prompt 2 begin十、在 SELECT 语句中使用case when条件逻辑有时为了更清楚地区分返回的信息,需要做如下处理。如:当职员工资小于或等于2000美元时,就返回消息“过低“,大于或等于4000美元时,就返回消息“过高”,如果在这两者之间,就返回"OK"。类似这种需求也许会经常遇见,处理这样的需求可以用CASE WHEN来判断转化select ename, sal, CASE WHEN sal <= 2000 THEN '过 低' WHEN sal > = 4000 THEN '过高 ' ELSE ' OK ' END AS status FROM emp WHERE deptno = 10; ENAME SAL STATUS ---------- --------- ------ CLARK 2450.00 OK KING 5000.00 过高 MILLER 1300.00 过 低这种方式还常用在报表中,比如要按工资分档次统计人数:SELECT 档次, COUNT(*) AS 人数 from (SELECT (CASE WHEN sal <= 1000 THEN '0000-1000' WHEN sal <= 2000 THEN '1000-2000' WHEN sal <= 3000 THEN '2000-3000' WHEN sal <= 4000 THEN '3000-4000' WHEN sal <= 5000 THEN '4000-5000' ELSE '好高' END) AS 档次, ename, sal FROM emp) GROUP BY 档次 ORDER BY 1; 档次 人数 --------- ---------- 0000-1000 2 1000-2000 6 2000-3000 5 4000-5000 1 好高 1十一、限制返回的行数在查询时,并不要求每次都要返回所有的数据,比如,进行抽查的时候会要求只返回两条数据。我们可以用伪列rownum来过滤,rownum依次对返回的每一条数据做一个标识。SQL> SQL> SELECT * FROM emp WHERE rownum<=2; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7369 SMITH CLERK 7902 1980-12-17 800.00 20 7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30如果直接用rownum=2来查询会出现会什么情况?SQL> SELECT * FROM emp WHERE rownum=2; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ SQL> 因为rownum是依次对数据做标识的,就像上学时依据考分排名一样,需要有第一名,后面才会有第二名。所以,要先把所有的数据取出来,才能确认第二名。正确地取第二行数据的查询应该像下面这样,先生成序号:SQL> SELECT * 2 FROM (SELECT rownum AS sn, emp.* FROM emp WHERE rownum <= 2) 3 WHERE sn = 2; SN EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ----- ---------- --------- ----- ----------- --------- --------- ------ 2 7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 SQL> 十二、你真的会从表中随机返回 n 条记录吗我们这里的目标是随机返回N条记录,大多开发者在这里都会误认为自己平时随机取数据的方式对了!接下来我们一步步分析。我们可以先用dbms_random来对数据进行随机排序,然后取其中三行。SELECT empno,ename FROM (select empno,ename FROM emp ORDER BY dbms_random.value()) WHERE rownum <= 3 ;有人会问:为什么要嵌套一层呢?直接这样用多好。SELECT empno , ename FROM emp WHERE rownum <= 3 ORDER BY dbms_random.value();你可以运行一下看, 为了方便观察, 我们对得到的结果进行排序 , 运行下面的语句就可以。SELECT * FROM (SELECT empno, ename FROM emp WHERE rownum <= 3 ORDER BY dbms_random.value()) ORDER BY 1;多运行几次,会发现是不是每次得到的数据都一样,而不是随机?为了便于解释,我们先对上面的语句进行等价改写:SELECT empno, ename, dbms_random.value() ran FROM emp WHERE rownum <= 3 ORDER BY ran;查询语句中这几处的执行顺序为:SELECTROWNUMORDER BY也就是说,要先取出数据,然后生成序号,最后才是排序。我们可以通过子查询把排序前后的序号分别取出来对比。SELECT rownum AS 排序后, 排序前, empno AS 编码, ename 姓名, ran AS 随机数 FROM (SELECT rownum AS 排序前, empno, ename, dbms_random.value() ran FROM emp WHERE rownum <= 3 ORDER BY ran);同样,你可以运行几次,看是不是与刚才描述的一致。因此,正确的写法是:先随机排序,再取数据。SELECT empno, ename FROM (SELECT empno, ename FROM emp ORDER BY dbms_random.value()) WHERE rownum <= 3;错误的写法是: 先取数据, 再随机排序 。SELECT empno , ename FROM emp WHERE rownum <= 3 ORDER BY dbms_random.value();十三、模糊查询,使用escape转译字符有如下临时表:with t as ( SELECT 'ABCEDF' AS vname FROM dual UNION ALL SELECT '_BCEFG' AS vname FROM dual UNION ALL SELECT '_BCBPF' AS vname FROM dual UNION ALL SELECT '_\BCEDF' AS vname FROM dual UNION ALL SELECT 'XYCEG' AS vname FROM dual ) select * from t 要求一: 查出 vname 中包含字符串 " CED " 的。with t as ( SELECT 'ABCEDF' AS vname FROM dual UNION ALL SELECT '_BCEFG' AS vname FROM dual UNION ALL SELECT '_BCBPF' AS vname FROM dual UNION ALL SELECT '_\BCEDF' AS vname FROM dual UNION ALL SELECT 'XYCEG' AS vname FROM dual ) select * from t where vname like '%CED%'; VNAME ------- ABCEDF _\BCEDF要求二:查出vname中包含字符串"_BCE"的。这里我们需要注意,”_”在模糊查询是会被当做通配符的,“%”代表替代一个或多个字符“_”替代一个字符。所以这个需求我们需要用转译字符来转译“_”字符,我们可以使用escape关键字把’\’标识为转译字符,那么查询如下:with t as ( SELECT 'ABCEDF' AS vname FROM dual UNION ALL SELECT '_BCEFG' AS vname FROM dual UNION ALL SELECT '_BCBPF' AS vname FROM dual UNION ALL SELECT '_\BCEDF' AS vname FROM dual UNION ALL SELECT 'XYCEG' AS vname FROM dual ) select * from t where vname like '\_BCE%' escape '\'; VNAME ------- _BCEFG要求三:查出vname中包含字符串"_\BCE"的。根据上面解释,我们可以这么写!with t as ( SELECT 'ABCEDF' AS vname FROM dual UNION ALL SELECT '_BCEFG' AS vname FROM dual UNION ALL SELECT '_BCBPF' AS vname FROM dual UNION ALL SELECT '_\BCEDF' AS vname FROM dual UNION ALL SELECT 'XYCEG' AS vname FROM dual ) select * from t where vname like '\_\\BCE%' escape '\'; VNAME ------- _\BCEDF对于类似“%”的转译我们也可以参照这么写。总结以上就是本章内容,文章写起来虽然麻烦,但是写完了回头一看还是很有成就感~
文章
SQL  ·  Oracle  ·  关系型数据库  ·  BI  ·  开发者
2023-03-24
1 2 3 4 5 6 7 8 9
...
20
跳转至:
人工智能
2863 人关注 | 12303 讨论 | 102299 内容
+ 订阅
  • 单片机基础
  • 【大数据实时数据同步】GoldenGate实时同步异常:OGG-03533:character ‘c2 a0‘ at offset 0 that is not available报错解决
  • 机器学习算法(九): 基于线性判别模型的LDA手写数字分类识别
查看更多 >
IoT
123068 人关注 | 2907 讨论 | 24727 内容
+ 订阅
  • 千耘导航|轻松搞定交接行
  • 【SVM回归预测】基于遗传算法优化支持向量机GA-SVM的塑料热压成型预测(多输入单输出)附Matlab源码
  • 【通信】基于最大容量的SCMA系统功率分配算法设计附matlab代码
查看更多 >
安全
1242 人关注 | 24113 讨论 | 85507 内容
+ 订阅
  • 私有化部署 Outline
  • 【大数据开发运维解决方案】ogg(GoldenGate)三大进程常用参数
  • 【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档
查看更多 >
开发与运维
5766 人关注 | 133244 讨论 | 318452 内容
+ 订阅
  • 私有化部署 Outline
  • OpenSupports 在 NGINX 下的配置
  • 【大数据开发运维解决方案】记一次同事不慎用root起动weblogic以及启动日志卡在The server started in RUNNING mode 问题解决过程
查看更多 >
数据库
252936 人关注 | 52042 讨论 | 98853 内容
+ 订阅
  • 私有化部署 Outline
  • OpenSupports 在 NGINX 下的配置
  • 【大数据开发运维解决方案】记一次同事不慎用root起动weblogic以及启动日志卡在The server started in RUNNING mode 问题解决过程
查看更多 >