精华内容
下载资源
问答
  • 二阶差分

    千次阅读 2019-07-27 22:26:00
    定义X(k),则Y(k)=X(k+1)-X(k)就是此函数的一阶差分Y(k)的一阶差分Z(k)=Y(k+1)-Y(k)=X(k+2)-2*X(k+1)+X(k)为此函数的二阶差分.二阶差分法在工程,电学等方面应用还是比较广泛的,具体可以搜索一下 ...

    一阶差分就是离散函数中连续相邻两项之差;定义X(k),则Y(k)=X(k+1)-X(k)就是此函数的一阶差分
    Y(k)的一阶差分Z(k)=Y(k+1)-Y(k)=X(k+2)-2*X(k+1)+X(k)为此函数的二阶差分.
    二阶差分法在工程,电学等方面应用还是比较广泛的,具体可以搜索一下

    展开全文
  • 利用变分方法与临界点理论,研究了一类非线性二阶差分方程两点边值问题解的存在性,得到了若干关于该问题解的存在性的新的充分性条件。该讨论丰富了此类研究的结果。
  • 一类二阶差分方程边值问题多个解的存在性,张国栋,孙红蕊,本文运用Brezis和Rabinowitz建立的两个临界点定理研究了一类二阶差分方程在Dirichlet边值条件下多个解的存在性,并通过例子说明的定理结论�
  • 针对目前存在的遥感图像检索方法中,图像区域分割困难,不易准确提取局部形状特征的问题,提出一种无需进行区域分割的全局形状特征,即基于Freeman差分码思想的边缘角度二阶差分直方图特征;通过检索特征和传统的基于边缘...
  • 导读:在之前的博客中,我们已经粗略地讲了二阶前缀和和二阶差分,而且两种算法各给了一道类模板题,现在,我们再来讲一次二阶差分这个有点难理解的东西。 什么是二阶差分?简单而言,就是差分再差分。 在一些题目...

    导读:在之前的博客中,我们已经粗略地讲了二阶前缀和和二阶差分,而且两种算法各给了一道类模板题,现在,我们再来讲一次二阶差分这个有点难理解的东西。

    什么是二阶差分?简单而言,就是差分再差分。

    在一些题目中,我们会对某个数组 aa 进行一次差分,得到一个数组 ss,其中 ss 满足:s1=a1,si=aiai1(i2)s_1=a_1,s_{i}=a_{i}-a_{i-1}(i \geq 2)。这个 ss 数组就叫做 aa 的差分数组。

    现在,让我们再对 ss 求一次差分,得到数组 s2s^2,其中 s2s^2 满足:s12=s1,si2=sisi1(i2)s_1^2=s_1,s_{i}^{2}=s_{i}-s_{i-1}(i \geq 2)。这个 s2s^2 就叫做 aa 的二阶差分数组。

    现在解决了定义的问题,那么作为一个数据结构,自然,最重要的应该是它能干什么。所以,二阶差分能干什么呢?

    我们知道,对于部分区间问题,我们可以用一阶差分来高效地维护原数组,那么,类似地,二阶差分就是来高效的维护一阶差分数组的。

    和一阶差分一样,二阶差分最难的一个部分就是它的修改部分,修改好后,剩下的事情就很简单了:做两次前缀和就得到了原数组。

    如何维护二阶差分数组?因题而异。于是,我们来上一道模板题。

    洛谷P4231 三步必杀\color{green}{\texttt{洛谷P4231 三步必杀}}

    [Problem]\color{blue}{\texttt{[Problem]}}

    • nn 个初始全部项为 00 的数列 aamm 次操作。
    • 每次操作形如 l r s e,表示修改 alra_{l \cdots r},修改的规则是,让 alra_{l \cdots r} 加上一个首项是 ss 末项是 ee 的等差数列。如执行 1 3 1 5 后,a1a_111a2a_233a3a_355
    • 最后输出 aa 数组的异或和和最大值。
    • 1n1×107,1m1×105,1l<rn,0ai9×10181 \leq n \leq 1 \times 10^7,1 \leq m \leq 1 \times 10^5,1 \leq l < r \leq n,0 \leq a_i \leq 9 \times 10^{18}

    [Solution]\color{blue}{\texttt{[Solution]}}

    看到区间加等差数列且查询原数组的次数不多,想都不用想,肯定是二阶差分。

    上面说过了,二阶差分重点难点是如何修改(维护)二阶差分数组,这里推荐的一个做法是列表看看二阶差分数组每一项变化了些什么。

    好,让我们来看看这个表格(dd 表示公差):

    在这里插入图片描述

    Office 没有 Markdown,不好意思)

    我们可以清楚地看到,我们只要修改蓝色的四个值就可以把二阶差分数组维护好了。这里就直接上代码啦。

    [code]\color{blue}{\texttt{[code]}}

    const int N=1e7+100;
    typedef long long ll;
    ll s[N],ans,maxn;int n,m;
    int main(){
    	n=read();m=read();
    	for(int i=1;i<=m;i++){
    		int l=read(),r=read();
    		ll b=read(),e=read(),d;
    		d=(e-b)/(r-l);//先要计算公差 
    		s[l]+=b;s[l+1]+=d-b;s[r+1]-=e+d,s[r+2]+=e;
    	}//维护好二阶差分后的值 
    	for(int i=1;i<=n+1;i++)
    		s[i]+=s[i-1];//一阶差分 
    	for(int i=1;i<=n+1;i++)
    		s[i]+=s[i-1];//原数组 
    	for(int i=1;i<=n;i++)
    		ans^=s[i],maxn=max(maxn,s[i]);
    	printf("%lld %lld",ans,maxn);
    	return 0;
    }
    

    当然,这里保证了 l<rl<r,于是我们可以直接这样,但是当 l=rl=r 时,我们需要一个特判(如何特判,留给读者思考啦)。

    最后一提,做差分和前缀和的题目最好的思考方式就是想笔者一样列一个表格,多列几位,千万不要遗漏。

    展开全文
  • #include <cstdio> #include <algorithm> using namespace std; const int c=100000; int s[c],alpha[c],beta... //s表示数值,alpha表示一阶差分,beta表示二阶差分 int main() { int k,n; s...

      

     

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int c=100000;
    int  s[c],alpha[c],beta[c];  //s表示数值,alpha表示一阶差分,beta表示二阶差分
    int main()
    {
        int k,n;
        s[0]=0;
        s[1]=1;
        s[2]=4;
        alpha[1]=1;
        alpha[2]=3;
        beta[2]=2;
        for(int i=3;i<=c;i++)
        {
            s[i]=s[i-1]+alpha[i-1]+beta[i-1];
            alpha[i]=s[i]-s[i-1];
            beta[i]=alpha[i]-alpha[i-1];
        }
        while(~scanf("%d",&n))
            printf("%d\n",s[n]);
        return 0;
    }

     

    转载于:https://www.cnblogs.com/WDKER/p/5487200.html

    展开全文
  • 从CSV文件中读取双精度数据,对数据进行处理,然后求取改组数据的均值、极值、二阶差分后,最后再存入SCV文件
  • A 识别算法过程 1、获得采样点序列 2、进行差分处理 3、由于不在乎具体的差分幅值,把所有数据归一到-1,0,1 4、差分值为0的点即为相同点,如果使用比较法则峰值检测可能失效,便需要更多的条件,而这里我们直接把...

    1、聊一聊

        其实每个人在无助的时候都需要一句"Cry On My Shoulder!"

        今天跟大家介绍一种波峰波谷的检测方法,不是很难,不过能够凸显数学在编程算法中的重要作用。

    2、正文部分

    1

    波峰波谷用处

    对于信号波峰波谷识别在嵌入式领域应该是非常广泛的,因为大部分的信号都处于一种时变的状态,信号在时域上处于一种类似于正弦波的波动状态。

    比如计步软件就是通过IMU模块所采集的变化的波形状态来识别波峰波谷,最终估算你所走过步数;

    图片来源网络侵删

    上图显示了一个典型的x-, y-和z-测量模式,对应于一个跑步者的垂直,向前和侧面加速度。无论如何佩戴计步器,至少有一个轴会有相对较大的周期性加速度变化,因此通过检测其波峰波谷等算法即可对于检测步行或跑步的单位周期至关重要。

    图片来源网络侵删

    还有在电力系统中的交流电压电流,我们需要通过检测波峰波谷来确定电压电流在交流周期中的最大最小值,从而动态调节系统参数来达到自适应的目的,所以波峰波谷的检测是非常有用的。

    2

    比较法识别

    常规的设计办法为比较法 : 其中x表示当前采样点

    波峰:f(x) > f(x−1) 且 f(x) > f(x+1)

    波谷:f(x) < f(x−1) 且 f(x) < f(x+1)

    然而这样识别对于没有什么噪声,且每个采样点为不同的信号来说还是合适的,但在严苛的环境中还需要构造更多的判断条件来进行一些错误判断的规避,终究还是麻烦了一些,并且容易遗漏。

    3

    差分识别

    在学生阶段我们就学习了导数的概念,如果一个函数一阶导数左右异号,那分别就是波峰或者波谷。而对于数字信号的处理通过采样都会变成离散信号,信号对时间的微分在离散域内即为差分。

    在进行波形识别之前数据采集是必不可少的,其中最重要的是采样速率和精度,以便从采样信号中不失真的恢复原连续信号。(香农采样)

    采样的过程中由于电子器件的杂讯等,数据难免会引入噪声,为了简化识别算法一般都会进行滤波处理,比如一些平滑处理等,然后才开始波峰波谷识别。

    A

    识别算法过程

    1、获得采样点序列

    2、进行差分处理

    3、由于不在乎具体的差分幅值,把所有数据归一到-1,0,1

    4、差分值为0的点即为相同点,如果使用比较法则峰值检测可能失效,便需要更多的条件,而这里我们直接把相同点0置为前一个非0即可规避该问题。

    5、最终Diff再次进行差分,-2/+2即为波峰/波谷。

    B

    参考代码

      1#include <stdio.h>
      2#include <stdlib.h>
      3#define SAMPLE_MAX  20
      4#define PV_MAX      10
      5
      6float Sample[SAMPLE_MAX]={1,2,3,4,4,4,5,2,1,0,0,5,1,0,0,1,2,3,4,0};
      7float SampleDiff[SAMPLE_MAX]={0};
      8
      9typedef struct _tag_FindPV
     10{
     11    int Pos_Peak[PV_MAX];    //波峰位置存储
     12    int Pos_Valley[PV_MAX];  //波谷位置存储
     13    int Pcnt;                //所识别的波峰计数
     14    int Vcnt;                //所识别的波谷计数
     15}SFindPV;
     16
     17SFindPV stFindPV;
     18
     19/********************************************
     20 *  Fuction : initialFindPV
     21 *  Note    : 初始化相关数据 
     22 *******************************************/ 
     23void initialFindPV(void)
     24{
     25    int Index = 0;
     26
     27    for(Index = 0; Index < SAMPLE_MAX;Index ++)
     28    {
     29        SampleDiff[Index] = 0;
     30    }
     31
     32    for(Index = 0; Index < PV_MAX;Index ++)
     33    {
     34        stFindPV.Pos_Peak[Index] = -1;
     35        stFindPV.Pos_Valley[Index] = -1;
     36    }
     37    stFindPV.Pcnt = 0;
     38    stFindPV.Vcnt = 0;
     39
     40}
     41
     42/********************************************
     43 *  Fuction : FindPV
     44 *  Note    : 找波峰波谷 
     45 *******************************************/ 
     46void FindPV(SFindPV *pFindPV,float *Sample)
     47{
     48    int i = 0;
     49
     50    //step 1 :首先进行前向差分,并归一化
     51    for(i= 0; i < SAMPLE_MAX - 1; i++)
     52    {
     53        if (Sample[i + 1] - Sample[i]>0)
     54            SampleDiff[i] = 1;
     55        else if (Sample[i + 1] - Sample[i] < 0)
     56            SampleDiff[i] = -1;
     57        else
     58            SampleDiff[i] = 0;
     59    }
     60
     61    //step 2 :对相邻相等的点进行领边坡度处理
     62    for(i= 0; i < SAMPLE_MAX-1; i++)
     63    {
     64        if(SampleDiff[i] == 0)
     65        {
     66            if(i == (SAMPLE_MAX-2))
     67            {
     68                if (SampleDiff[i - 1] >= 0)
     69                    SampleDiff[i] = 1;
     70                else
     71                    SampleDiff[i] = -1;
     72            }
     73            else
     74            {
     75                if (SampleDiff[i + 1] >= 0)
     76                    SampleDiff[i] = 1;
     77                else
     78                    SampleDiff[i] = -1;
     79            }
     80
     81        }
     82    }
     83
     84    //step 3 :对相邻相等的点进行领边坡度处理
     85    for(i= 0; i < SAMPLE_MAX-1; i++)
     86    {
     87        if(SampleDiff[i + 1] - SampleDiff[i] == -2) //波峰识别
     88        {
     89            pFindPV->Pos_Peak[pFindPV->Pcnt] = i + 1;
     90            pFindPV->Pcnt++; 
     91        }
     92        else if(SampleDiff[i + 1] - SampleDiff[i] == 2) //波谷识别
     93        {
     94            pFindPV->Pos_Valley[pFindPV->Vcnt] = i + 1;
     95            pFindPV->Vcnt++;
     96        }
     97    }
     98}
     99
    100/********************************************
    101 *  Fuction : main
    102 *  Note    : 模拟查找波峰波谷 
    103 *******************************************/ 
    104int main(int argc, char *argv[]) {
    105
    106    int i = 0;
    107
    108    initialFindPV();
    109
    110    FindPV(&stFindPV,Sample);
    111
    112    printf("Peak\n");
    113    for(i = 0 ;i< stFindPV.Pcnt;i++)
    114    {
    115        printf("-%d",stFindPV.Pos_Peak[i] + 1);  //加1是为了与上图横坐标一致 
    116    }
    117
    118    printf("\nValley\n");
    119    for(i = 0 ;i< stFindPV.Vcnt;i++)
    120    {
    121        printf("-%d",stFindPV.Pos_Valley[i] + 1);
    122    }
    123
    124    printf("\n\n");
    125    printf("欢迎关注:最后一个bug\n");
    126    return 0;
    127}
    

    2、最后

       

        当然在实际的项目中为了更加稳定的识别波峰波谷可能会对波峰波谷的出现特点进行限制,从而进一步减少误识别,也有许多人使用数据拟合的办法来识别波峰波谷,那么识别的准确度就与所拟合的函数有关,通过数学方法对所拟合函数进行波峰波谷的求解,最终得到信号的波峰波谷,不过这样的拟合过程对平台的处理能力提出了一定的要求。

        好了,今天的分享就到这里,我是bug菌,最近在公众号推送了一些软文,当不会忘本!感谢各位,顺手点个赞!

    推荐专辑  点击蓝色字体即可跳转

    ☞  MCU进阶专辑 

    ☞  嵌入式C语言进阶专辑 

    ☞  “bug说”专辑 

    ☞ 专辑|Linux应用程序编程大全

    ☞ 专辑|学点网络知识

    ☞ 专辑|手撕C语言

    ☞ 专辑|手撕C++语言

    ☞ 专辑|经验分享

    展开全文
  • 在kaldi里面,提取MFCC特征的工具compute-mfcc-feats 没有选定提取二阶MFCC的参数,只能提取一阶。如果想要得到二阶的MFCC特征,用add-deltas 这个工具就能实现,例子如下 $cmd JOB=1:$nj $logdir/make_mfcc_${name...
  • 考查二阶差分+前缀和。 由等差数列的性质可知等差数列作差分后得到一个序列,该序列的绝大部分元素相同,然后考虑再作一次差分,序列中将会出现大部分0,由此联想到利用差分序列端点修改实现区间修改。 下面尝试...
  • 来源:牛客网 题目描述 小w和他的两位队友teito、tokitsukaze准备为大家发点福利,到底发点什么呢?思考良久之后他们三个人准备了很多很多的糖果。他们让n个小朋友们排成一长排并且从左到右依次标号为1,2,3,4,5,6...
  • 贡献会不变,当点 i 取到蓝色区域时,会随着 i 右移贡献不断减一,这个自己想一下应该就能想过来了 所以对 len_b[ i ] 初始时维护一个二阶差分,然后两次前缀和复原即可,上面的几个关键位置都特地写出来了,直接...
  • + f( r ) 题目分析:官方题解的做法是枚举 l ,因为每个数一定由连续的 l , l + 1 和 l + 2 组成,暴力去维护 f( n ) ,不过我没看懂,这里就不多展开了 还有一种更加优秀的做法,暂且叫他二阶差分吧,注意是二阶差...
  • 分数组, c [   ] c[\ \ ] c [     ] 为 b [   ] b[\ \ ] b [     ] 的分数组 对于 l , r , s , t l,r,s,t l , r , s , t 我们可以算出公差为 d = t − s r − l d=\frac{t-s}{r-l} d = r − l t − s...
  • 那么只要二阶差分一下,求出把x设在每个位置上可以减少的步数,然后取个最大值即可。 代码 #include #include #include #include #include using namespace std ; typedef long long ...
  • void Bresenham(int radius, int r,COLORREF color, CDC* pDC) { int x = 0; int y = radius; int m = d - radius;... CirclePoints(x, -y, r, color, pDC);... CirclePoints(y, -x, r, col...
  • ,一般都采用一阶二阶差分,但一阶二阶差分究竟表示什么,什么含义: 一阶差分 就是离散函数中连续相邻两项之差;定义X(k),则Y(k)=X(k+1)-X(k)就是此函数的一阶差分,物理意义就是当前语音帧与前一帧之间的关系, ...
  • 二阶差分o(1)完成修改 用两遍前缀和求出答案 #include #include #include #include using namespace std; typedef long long ll; const int N=1e7+100; const int inf=0x3f3f3f3f; int a[N]; int n,p; void ...
  • 定义为到叶节点的样本(叶节点总数为T,样本总数为n)上式是对本次建树时n个样本的损失求和,下面两步:先对每个叶节点的样本损失求和,再对所有叶节点求和,两者结果一样。对于叶节点上的损失:对于当前的树结构...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 554
精华内容 221
关键字:

二阶差分