离散化实现详解

传递函数的离散化(一)—— C实现 假如设计好了一个控制器,得到了它的传递函数,那么该怎么在单片机中实现它呢?里面都是微积分,该怎么编程呢?这就要设计到传函的离散化了。 1:离散化 1.1、离散化的目的 将s域下的传递函数转换为离散的z域函数; 将离散域下的函数转化为差分方程,然后在单片机中实现; 1.2、离散化的种类 我们这里讲的离散化都是借助matlab工具进行的,matlab提供多种离散化的方法; dsys=c2d(sys,ts,’method’); % 传函离散,其中ts表示离散的采样周期,method表示离散的方法;sys表示 阅读详情

声明:本文为博主原创文章,未经允许不得转载。如有问题,欢迎指正!

目录

 

离散化思想

第一种实现离散化的具体方法:

 第二种实现离散化的具体方法:


离散化思想

离散化的目的就是把无限空间中有限的元素映射到有限的空间中去,同时不改变这些元素的相对大小。具体一点就是把一个序列中较大的数用它在序列中排序后的位次进行替代。如给定一个序列A为{530,999999,19,666,8888},经过离散化处理后就变为{2,5,1,3,4}。给定序列B为{9999,555,11,333,8888}经过离散化处理以后就变为{5,3,1,2,4}。

第一种实现离散化的具体方法:

(一)unique()函数及lower_bound()函数介绍:unique和lower_bound()都作用在序列上,可以接收两个迭代器(或指针)l,r ,对下标处于[l,r)中的元素起作用。它们的头文件都是include<algorithm>。

(二)unique(l,r)可以去除序列中的重复元素,并返回去重以后末尾元素的下一个位置。利用迭代器(或指针)的减法,可以计算序列去重以后序列中元素的个数n:

把一个vector去重:  int n=unique(a.begin(),a.end())-a.begin();

把一个数组去重,元素存放在下标1~n:int n=unique(a+1,a+n+1)-(a+1);

需要注意的是,unique()去重是将数组或容器中“相邻的重复元素”去重, 它会把重复的元素添加到容器的末尾,因此数组或容器的大小并没有改变,unique()的返回值是去重后不考虑末尾重复元素后的尾地址。若要真正实现去重,就应该对数组或容器先排序,然后使用unique()获取尾地址,最后去掉尾地址后面的元素:

//去掉容器中重复元素的操作  

sort(v.begin(),v.end());

v.erase(unique(v.begin(),v.end()),v.end());

(三)对于一个有序的序列,lower_bound(l,r,x)会在两个迭代器(或指针)指定的[l,r)区间进行二分查找,返回第一个大于等于x的元素的位置 的迭代器(或指针)。

在有序的int数组中查找大于等于x的最小整数下标:

int i=lower_bound(a+1,a+n+1,x)-a;

在有序的vector<int>a中查找大于等于x的最小整数下标:

int i=lower_bound(a.begin(),a.end(),x)-a.begin();

(四)第一种方法具体操作:把原数组num复制到中间数组lsh中,并对lsh数组(sort)排序和(unique)去重。用lower_bound(lsh+1,lsh+n+1,num[i])-lsh获取num[i]的排名并赋值给num[i]即可。

//核心代码:
#include<algorithm>  //头文件
//n原始数组大小 num原数组中的元素 lsh为一个中间数组 cnt离散化后数组的大小
int lsh[maxn],cnt,num[maxn],n;
for(int i=1;i<=n;i++){
  scanf("%d",&num[i]);
  lsh[i]=num[i];     //将原数组复制到lsh数组中
    }
sort(lsh+1,lsh+n+1);  //对lsh排序
cnt=unique(lsh+1,lsh+n+1)-(lsh+1);  //去重后大小
for(int i=1;i<=n;i++)     
 num[i]=lower_bound(lsh+1,lsh+n+1,num[i])-lsh;

 //lower_bound(lsh+1,lsh+n+1,num[i])-lsh;
 //获取了num[i]的排名,将num[i]赋值为其对应的排名即可。

 第二种实现离散化的具体方法:

(一)第二种方法具体操作:定义结构体数组num存储原序列元素的值(val)和对应的下标(id)。对num依据val的值升序排列,经过排序后的num数组的下标i就是val在原数组中的排名。令原下标id处的值等于排名i即可:rank[num[i].id]=i 。

//核心代码:
#include<algorithm>

 struct Node{
 int id;     //原序列元素的原始下标
 int val;    //原序列元素的值
}num[maxn];  //结构体数组

bool comp(Node a,Node b){   //自定义的结构体比较函数
 return a.val<b.val;       //元素按原始值升序排列
 }
int rank[maxn],n;   //rank为离散化以后的数组
for(int i=1;i<=n;i++){
 scanf("%d",&num[i].val);
 num[i].id=i;
 }
sort(num+1,num+n+1,comp);  
for(int i=1;i<=n;i++){
 rank[num[i].id]=i;   
//排序后num数组的下标i即为排名,num[i].id为原始下标。
//rank[num[i].id]=i 即把原数组元素中各元素对应的排名映射到相应位置。  

上一篇博客:leetcode 338 比特位计算(位运算)

离散化的两种实现方式【sort或者map】 把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。适用范围:数组中元素值域很大,但个数不是很多。比如将a[]=[1,3,100,2000,500000]映射到[0,1,2,3,4]这个过程就叫离散化。 阅读详情

相关推荐

基础算法:离散化(C++实现)

主要介绍了离散化的含义和讲解离散化的相关例题,查找离散化后的下标通常采用二分查找或者哈希表

2301_79601095的博客 4346

离散化(unique函数)

其中的unique函数和lower_bound函数大家要学会哦

m0_73680179的博客 728

离散化算法详解:C++中的二分查找与哈希表实现对比

本文详细解析了离散化算法在C++中的两种实现方式:二分查找与哈希表。通过对比时间复杂度、内存占用和代码复杂度,帮助开发者根据具体场景选择最优方案。文章还探讨了离散化的核心原理、应用场景及工程实践建议,特别适合处理大规模稀疏数据。

weixin_42524276的博客 349

离散化(两种实现方法)(转载)

注:版权声明:本文为优快云博主「Alex_McAvoy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/u011815404/article/details/88216100 原文链接 ...

江上清风游 733

Sklearn 机器学习 数值离散化 等宽区间

Sklearn中的数值离散化方法——等宽区间离散化(Uniform Binning)。

Kant2048的博客 1024

从连续到离散:用Python小例子复现Mamba SSM的零阶保持离散化(含完整代码)

本文详细介绍了如何使用Python实现Mamba SSM的零阶保持离散化技术,包括连续时间状态空间模型的构建、离散化原理的数学推导以及完整的代码实现。通过零阶保持技术,读者可以掌握将连续SSM转换为离散形式的核心方法,为理解Mamba等现代SSM架构奠定基础。

weixin_28340315的博客 114

NJL模型量子计算实现与格点离散化技术详解

量子场论与量子计算的交叉研究为强关联系统模拟开辟了新途径。NJL模型作为描述手征对称性破缺的典型理论,其量子实现需要解决连续场论离散化、费米子算符映射等核心问题。通过格点离散化技术将连续哈密顿量转化为离散形式,结合Jordan-Wigner变换实现费米子到量子比特的映射,为量子处理器上的场论模拟奠定基础。这些技术在量子模拟强耦合系统、研究非微扰现象等方面展现出独特优势,特别是在处理实时演化和量子纠缠等经典计算难以应对的场景时。NJL模型的量子电路实现涉及Trotter分解、量子门模块设计等关键技术,为量子能

weixin_30326515的博客 366

传递函数离散化实战:从理论到C语言实现

本文为嵌入式开发者提供了传递函数离散化的完整实战指南。文章深入浅出地解释了离散化的核心原理,对比了后向差分、双线性变换等主流方法,并通过MATLAB仿真验证了离散化效果。重点演示了如何将Z域传递函数转换为差分方程,并最终给出可直接在STM32等单片机上运行的C语言实现代码,包括浮点与定点数优化方案,帮助开发者将理论控制器顺利转化为实际产品。

weixin_29193359的博客 78

从传递函数到差分方程:MATLAB实现与离散化方法详解

本文详细介绍了从传递函数到差分方程的MATLAB实现与离散化方法,涵盖前向差分法、后向差分法和双线性变换等关键技术。通过实际案例和MATLAB代码示例,帮助读者掌握如何将连续系统转换为离散系统,并应用于数字信号处理和控制系统中。文章还提供了C语言实现模板和工程实践中的注意事项,适合工程师和研究人员参考。

win55的博客 872

从连续到代码:准PR控制器传递函数的Tustin离散化实战

本文详细介绍了准PR控制器传递函数的Tustin离散化实战过程,从理论推导到MATLAB验证,再到嵌入式代码实现。通过具体案例展示了准PR控制器在交流量控制中的优势,特别是针对50Hz电网应用场景。文章重点讲解了Tustin离散化方法的关键步骤和注意事项,并提供了实用的参数整定技巧和不同离散化方法的对比分析。

weixin_29044713的博客 343

ubuntu 20.04系统离线安装nfs

ubuntu环境下,离线安装nfs

m0_62464865的博客 2241

NXP DSC GFLIB PID库函数实战:从离散化到定点数实现详解

在嵌入式控制系统中,PID控制器是实现精确闭环调节的核心算法。其原理基于对系统误差的比例、积分和微分运算,通过反馈调节使被控量快速、稳定地跟踪设定值。在数字信号控制器(DSC)等资源受限的嵌入式平台上,算法的离散化实现和定点数运算是关键技术挑战,直接影响系统的动态响应和稳态精度。本文聚焦于NXP 56F80xx系列DSC的通用函数库(GFLIB),深入剖析其提供的多种PID控制器函数(如GFLIB_ControllerPIp、GFLIB_ControllerPIr)的实现差异与选型依据。文章将详细讲解从连续

a359798678的博客 418

采用离散模型搭建永磁同步电机控制系统

永磁同步电机发电系统分为控制器和发电机,通过simulink仿真软件进行发电系统的离散系统仿真。离散搭建仿真,可以更方便的自动代码生成。通过实践经验离散模块搭建,更能加深对整个控制系统的理解。离散系统在矢量控制中经常涉及到上个开关周期的角度,电压,或者预测下个周期的角度,电流,一般都是通过延时模块实现。PWM比较值寄存器被改写后都是使能了预装载,采样后触发计算到比较值生效可以延时0.5个开关周期Ts,也可以延时1个开关周期Ts,可以通过离散系统进行仿真,大大缩短开发周期。

f1072239934的博客 2863

离散化

一维数组离散化 /* https://www.zybuluo.com/Dmaxiya/note/884014 */ #include <iostream> #include <algorithm> using namespace std; struct Node { int num; int Index; }; bool operator<(const No...

weixin_43854189的博客 373

终端以太网接入Internet实验

实验过程: 1.布局 2.连接 3.配置Route0和Route1 4.配置RIP 5.static: 6.查看Route0,Route1的路由表: 7.完成PC2和server0 IP地址,子网掩码和默认网关地址的配置: 8.命令行: 9.启动PC0桌面下的PPPoe宽带连接程序: 10.启动PC1桌面下的PPPoe宽带连接程序: 11.验证PC0和PC2的ICMP报文传输过程 12.验证PC1和server0的ICMP报文传输过程 关键命令说明

chaojidagouzi的博客 4082

R语言实战:Scheirer–Ray–Hare检验在非正态重复测量数据分析中的应用

本文详细介绍了当重复测量数据不满足正态分布假设时,如何利用R语言中的Scheirer–Ray–Hare检验进行数据分析。该检验作为非参数方法,无需数据服从正态分布或方差齐性,适用于分析组间差异、时间效应及其交互作用。文章通过实战案例,从环境搭建、数据准备、检验执行到结果解读与可视化,提供了完整的操作指南,帮助研究者有效处理心理学、医学等领域的复杂实验数据。

salt9的博客 780

算法竞赛必备:离散化核心原理与C++高效实现详解

在算法设计与数据处理中,当面对数值范围极大但实际数据点稀疏的场景时,直接使用数组等依赖连续下标的数据结构会面临内存限制的挑战。离散化作为一种核心的数据预处理思想,通过将稀疏的、大范围的原始数值映射到一个紧凑、连续的整数空间,巧妙地解决了这一矛盾。其技术原理基于排序、去重与二分查找,核心价值在于搭建了一座桥梁,使得树状数组、线段树等高效数据结构能够应用于原本因值域过大而无法直接处理的问题。这一技术在算法竞赛和工程实践中至关重要,广泛应用于区间求和、逆序对统计、扫描线求面积等高频场景。本文将以C++实现为例,深

weixin_31188927的博客 311

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8257

2020-10-10 离散化+例题

离散化笔记例题题目分析代码 笔记 例题 题目 P1955 [NOI2015]程序自动分析 链接 (https://www.luogu.com.cn/problem/P1955) 分析 并查集+离散化 并查集find迭代70分,太坑了,得递归。 代码 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const

ning_fan的博客 673

Halcon VariableInspect (变量检查拓展)安装指南

网址2;

T 964

基于AOD-Net与GAN的深度学习去雾算法开发

本文提出一种结合AOD-Net与GAN的深度学习去雾算法。通过改进的AOD-GAN网络架构,集成风格迁移模块,设计包含对抗损失、内容损失和风格损失的复合目标函数。实验表明,该方法在PSNR(24.67)、SSIM(0.92)和FID(32.15)指标上优于传统方法,实现了端到端的物理模型引导图像去雾。未来将优化多尺度特征融合和轻量化部署。

huanghm88的专栏 594

差分基于离散化优化运行时间的问题

在算法题中,我们经常遇到一类“区间覆盖”问题,例如:给定 n 个区间,求数轴上被覆盖次数最多的那个点,被覆盖了多少次?暴力解法(遍历每个区间,把区间内的每个点+1)时间复杂度高达,一旦数据范围到1e9直接爆炸。此时,差分数组(Difference Array)就是我们的第一把利器。但如果坐标范围极大(比如0到1e9),连数组都开不下怎么办?那就需要引入离散化(Discretization)。今天这篇文章,我们就从一段“有坑”的代码出发,一步步讲到最优解。差分数组:左加右减,前缀还原。离散化。

2503_92541300的博客 457

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error 解决方式: 1.qt程序不要放在共享目录下编译,直接拷贝到ubuntu系统中编译 2.修改/home/xt/Qt5.12.1/5.12.1/android_armv7/mkspecs/android-clang中 #QMAKE_LINK = QMAKECXXQMAKE_CXX QMAKEC​XXQMAKE_CFLAGS -Wl,–exclude-libs,libgc

xt18971492243的博客 737

离散化及模板详解

离散化 基本思想 算法思路 模板 例题:区间和 题目分析 code

timerring的博客 2069

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

第9篇:线性二次型调节器离散化设计

连续域状态空间方程x˙tAxtButx˙tAxtBut,其中xtx(t)xt为系统状态向量(比如电机的转速、位置,倒立摆的角度、角速度),utu(t)ut为控制输入量(比如电机驱动电压、执行器扭矩),A为连续系统矩阵,B为连续输入矩阵离散域状态空间方程xk1AdxkBdukxk1Ad​xkBd​uk,k代表第k个离散时刻,AdA_dAd​为离散化后系统矩阵,BdB_dBd​。

C语言无原生OOP特性,却能借结构体+函数指针实现封装、继承、多态,落地工厂等设计模式。博客中以标准C语法实操教学,融入跨平台兼容设计,助开发者掌握C语言OOP核心与工程实践技巧。 472

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

从“小鱼比可爱”到逆序计数:树状数组与离散化算法详解

逆序计数是算法领域的经典问题,它用于统计序列中每个元素左侧小于它的元素个数。其核心原理在于将问题转化为动态维护和查询前缀和,这通常可以通过树状数组(Fenwick Tree)高效实现。该技术价值在于将O(N²)的暴力解法优化至O(N log N),显著提升了处理大规模数据的效率。在工程实践中,当数据值域较大时,常结合离散化技术,将原始数据映射到紧凑的连续区间,以节省空间。本文以“小鱼比可爱”这一具体应用场景为例,深入剖析了从暴力双重循环到引入树状数组和离散化的完整优化路径,并探讨了算法选择与场景适配的策略。

weixin_29895109的博客 301

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: leetcode 338 比特位计算(位运算)
下一篇: leetcode 201 数字范围按位与 (位运算)
准图灵奖得主
博客等级 码龄8年 355粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值