手动实现离散化

离散化同有的特征就是数据范围特别大 难以开数组实现 但是能够提出有用贡献的数很少

我们就是利用这样一个特性而把它变成我们可以解决的问题有些时候离散操作是可以通过map实现的但是运行效率不高 难免出现超时所以要学习手动离散化的操作 通过模板题来讲解具体操作

模板题:区间和

题目描述:

假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。

现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。

接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。

输入格式
第一行包含两个整数 n 和 m。

接下来 n 行,每行包含两个整数 x 和 c。

再接下来 m 行,每行包含两个整数 l 和 r。

输出格式
共 m 行,每行输出一个询问中所求的区间内数字和。

数据范围
−10^9≤x≤10^9,
1≤n,m≤10^5,
−10^9≤l≤r≤10^9,
−10000≤c≤10000
输入样例:
3 3
1 2
3 6
7 5
1 3
4 6
7 8
输出样例:
8
0
5

思路:

/*离散化+前缀和*/ 
离散化其实就是一个映射的操作 我们看到的数轴上的数字无限多 我们根本没办法用数组下标全部表示 而给出的加c的数组却很有限只有1e5 那么我们可以只
记录这些数组但是...这些数组不是连续的而是离散化的 我们还算没办法用数组下标来表示 那么我们可先用一个容器vector存下这些出现的数组 那么数组下标就
映射到这些数字 也可以说数字映射到数组下标 这些下标一定是连续的 为了保证连续且单调 我们先用sort把数组排序

### VSG离散化的方法与实现 VSG(Virtual Synchronous Generator)是一种用于模拟传统同步发电机特性的控制技术,广泛应用于微电网和分布式发电系统中的逆变器控制。为了在字控制器中实现VSG算法,通常需要对其进行离散化处理。以下是关于VSG离散化的概念及其具体实现方法。 #### 1. 连续时间域下的VSG模型 连续时间域下,VSG的核心动力学方程可以通过二阶线性微分方程表示: \[ T_m \frac{d\omega}{dt} = P_{ref} - P_o - D(\omega-\omega_r) \] \[ T_d \frac{dE_q'}{dt} = Q_{ref} - Q_o \] 其中: - \( T_m \) 和 \( T_d \) 是机械惯性和电磁暂态的时间常; - \( \omega \) 表示角频率; - \( E_q' \) 表示暂态电势; - \( P_{ref}, Q_{ref} \) 分别为有功功率和无功功率的参考值; - \( P_o, Q_o \) 分别为实际输出的有功功率和无功功率[^1]。 这些方程描述了系统的动态行为,但在实际工程应用中,由于硬件平台通常是基于字信号处理器(DSP),因此需要将其转换到离散时间域。 --- #### 2. 离散化的基本原理 离散化是指将连续时间域的动力学方程转化为适合计算机求解的形式。常见的离散化方法包括零阶保持法(ZOH)、梯形积分法以及欧拉法等。每种方法都有其特点和适用场景。 ##### (a) 零阶保持法(Zero Order Hold) 假设输入信号在一个采样周期内保持不变,则可以用以下公式近似离散化过程: \[ y[k+1] = y[k] + Ts f(y[k], u[k]) \] 其中 \( Ts \) 是采样周期,\( f(y[k], u[k]) \) 是原连续系统的导表达式[^3]。 ##### (b) 梯形积分法(Trapezoidal Rule) 梯形积分法则利用当前时刻和下一时刻的状态变量平均值计算导值,从而获得更精确的结果: \[ y[k+1] = y[k] + \frac{Ts}{2}(f(y[k], u[k]) + f(y[k+1], u[k])) \] 这种方法虽然精度较高,但由于引入了未来状态项 \( y[k+1] \),可能需要迭代求解或简化处理[^2]。 ##### (c) 显式欧拉法(Explicit Euler Method) 显式欧拉法是最简单的离散化方式之一,直接用前一时刻的信息估计变化率: \[ y[k+1] = y[k] + Ts f(y[k], u[k]) \] 尽管简单易行,但可能会带来较大的误差,尤其当采样周期较小时更为明显。 --- #### 3. MATLAB/Simulink 中的具体实现 在 MATLAB/Simulink 平台上构建 VSG 的离散化模型时,可以选择内置的功能模块完成上述作。例如,使用 `Discrete-Time Integrator` 来代替连续积分环节,并设置合适的步以满足实时仿真的需求。 下面是一个典型的 Simulink 实现流程图: ```matlab function vsg_discretization() % 定义系统参 Tm = 0.5; % 机械惯性时间常 Kp = 1e4; % 下垂系 omega_ref = 1; % 参考角频率 % 初始化状态向量 omega_prev = omega_ref; % 设置采样时间和总仿真步 Ts = 0.001; N_steps = 1000; % 开始循环更新 for k = 1:N_steps % 计算当前时刻的功率偏差 delta_P = randn(); % 假设有随机扰动 % 更新角频率 omega_next = omega_prev + Ts * (-Kp*(omega_prev - omega_ref) - delta_P / Tm); % 输出结果并存储历史据 fprintf('Step %d: Omega=%f\n', k, omega_next); omega_prev = omega_next; end end ``` 此代码片段展示了如何通过编程形式手动实现离散化后的 VSG 动力学方程。 --- #### 4. 性能评估与优化建议 针对不同应用场景选择恰当的离散化方案至关重要。如果追求更高的稳态性能而允许一定复杂度增加的话,推荐优先考虑梯形积分法;反之则可选用效率更高却相对粗略一些的显式欧拉法。另外还需注意调整相关增益因子使得整个闭环体系具备良好的鲁棒特性。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值