精华内容
下载资源
问答
  • 1.之前恰好看了跟快速幂乘法一样的计算大数乘法模,防止溢出,感觉挺有用的,而且用的挺多的。 2.分析问题的能力还很,遇到一个问题,无法正确的进行转化,怎么进行考虑,感觉自己这方面还很欠缺,这应该是通过...

    感觉一天时间过得挺快,而自己却没有什么收获。

    1.之前恰好看了跟快速幂乘法一样的计算大数乘法模,防止溢出,感觉挺有用的,而且用的挺多的。

    2.分析问题的能力还很差,遇到一个问题,无法正确的进行转化,怎么进行考虑,感觉自己这方面还很欠缺,这应该是通过大量做题,然后不断总结得出来的吧!毕竟题做的多了,遇到新题也就那几种套路。感觉也是挺对的,面试题的那些小套路在搞竞赛的人面前根本什么也不是,感觉这句话挺有道理的。

    3. 这次做的这道题,最后就是转化为求第n个斐波那契数,而我根本没有推导出这个。然后,之前做过怎么快速求解,一个是根据递推公式,还想是f(n)可以通过f(n/2),f(n/2 + 1), f(n/2 - 1)这几个数导出来,我也懒得记,遇到的时候就拿前几个数推导一下,很简单的。另一个方法,就是转移矩阵,快速幂求解。这个方法算是通用的方法(套路),大多数题,搞出来递推公式,可能转移条件比较多,然后搞成转移矩阵的形式,给出初始值,然后求第n个,就是求矩阵的n次幂,然后就是快速幂乘法。这个方法很重要。

    4. 忘了,这次还有一点非常重要,就是leetcode上面house robber 那题,思路倒不是挺难,但是感觉自己写的代码很丑,然后今天遇到类似的转化,就很麻烦。然后看题解,得出一种巧妙的方法。题目要求不能出现连续的1,因为是环形的,要求第一个和最后一个不能同时是1,这就增加的复杂性,你不能简单的一次递推,然后考虑这样,枚举第一个位置是0,然后从第二个位置开始,随意放,可以放还可以不放,最后的答案就是最后一个放和不放的总和,第二种情况是:第一个放,那么第二个不能放,然后从第三个开始,可以随意放,然后就转化成前面的那个问题,而且不用重复计算,最后的答案就是最后一个不能放的个数,最终把这两种情况加起来就是最后的答案。这样代码写出来,看起来也特别整齐。仔细想想,真的很巧妙!

    下面贴一下我写的求斐波那契:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 1e6 + 10;
     5 const int mod = 1e9 + 7;
     6 ll dp[maxn][2];
     7 ll n;
     8 map<ll, ll> ma;
     9 ll work(ll x) {
    10     if(x == 0) return 1;
    11     if(x < 4) return x;
    12     if(ma.count(x)) return ma[x];
    13     ll res = 0;
    14     ll t = x / 2;
    15     if(x & 1) {
    16         res = work(t) * (work(t - 1) + work(t + 1)) % mod;
    17     } else {
    18         res = work(t) * work(t) % mod + work(t - 1) * work(t - 1) % mod;
    19     }
    20     return ma[x] = res;
    21 }
    22 void solve() {
    23     cin >> n;
    24     ll res = (work(n) + work(n - 2)) % mod;
    25     cout << res << endl;
    26 }
    27 int main() {
    28     solve();
    29     /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    30     return 0;
    31 }
     1 #include<bits/stdc++.h>
     2 #define pb push_back
     3 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
     4 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
     5 typedef long long ll;
     6 using namespace std;
     7 typedef pair<int, int> pii;
     8 const int maxn = 1e3 + 10;
     9 const int mod = 1e9 + 7;
    10 struct mat {
    11     ll a[4];
    12     void init() {
    13         a[0] = a[3] = 1;
    14         a[1] = a[2] = 0;
    15     }
    16     mat mul(const mat &x) {
    17         mat res;
    18         res.a[0] = (a[0] * x.a[0] % mod + a[1] * x.a[2] % mod) % mod;
    19         res.a[1] = (a[0] * x.a[1] % mod + a[1] * x.a[3] % mod) % mod;
    20         res.a[2] = (a[2] * x.a[0] % mod + a[3] * x.a[2] % mod) % mod;
    21         res.a[3] = (a[2] * x.a[1] % mod + a[3] * x.a[3] % mod) % mod;
    22         return res;
    23     }
    24 };
    25 mat pow(mat a, ll b) {
    26     mat res;
    27     res.init();
    28     while(b) {
    29         if(b & 1) res = res.mul(a);
    30         a = a.mul(a);
    31         b >>= 1;
    32     }
    33     return res;
    34 }
    35 ll fb(ll n) {
    36     if(n == 0) return 1;
    37     if(n < 4) return n;
    38     mat t;
    39     t.a[0] = 0; t.a[1] = 1; t.a[2] = 1; t.a[3] = 1;
    40     t = pow(t, n);
    41     return t.a[3];
    42 }
    43 ll n;
    44 void solve() {
    45     while(cin >> n) {
    46 
    47         ll res = (fb(n) + fb(n - 2)) % mod;
    48         cout << res << endl;
    49     }
    50 }
    51 int main() {
    52     //freopen("test.in", "r", stdin);
    53     //freopen("test.out", "w", stdout);
    54     solve();
    55     return 0;
    56 }

     

    转载于:https://www.cnblogs.com/y119777/p/6063886.html

    展开全文
  • 最近的小学期实训做的是一个车牌识别系统,说实话真不知道学校怎么想的,虽然说图像处理也算的上是数字媒体很重要的一块分支了,但咱这几年学的全是图形渲染啊。图形与图像虽然只了一个字,但

    不错的计算机视觉博客:http://blog.csdn.net/lee_cv/article/details/9180719


    篇文章献给所有第一次听说车牌识别ANPR但需要短时间实现的苦逼同学们。

     

    最近的小学期实训做的是一个车牌识别系统,说实话真不知道学校怎么想的,虽然说图像处理也算的上是数字媒体很重要的一块分支了,但咱这几年学的全是图形渲染啊。图形与图像虽然只差了一个字,但内容真是差了十万八千里了(当然这话是夸张了,事实上在使用shader进行特效渲染的最后一步往往都是在做图像处理,如Bloom, Outline, Field Depth等,但这些也只是用到了图像处理中很基础的一部分)。

    小学期不到10天的时间要从零搞出个车牌识别系统,更别说我们所有组员全都有实习,老师大撒把,发了需求直接不管。当时本来还觉得这种应用广泛的东西网上肯定有现成的例子,随便改改就好,结果搜了半天,最令我崩溃的一句话就是:“这东西你要真做出来了就卖钱去吧”。擦,算了,求人不如求自己,最终在OpenCV的帮助下我看了两天资料,写了两天程序,居然就实现了,看到从原始图片中抠出车牌,再从车牌中抠出数字,再匹配出结果(这步是我同学做的),我自己都觉得神奇啊!虽然肯定是买不了钱,但还是很激动啊~~

    废话不多说了,以后和我一样做这个实训项目的同学们可有福了,接下来就详细讲讲如何简单实现ANPR(Automatic Number Plate Recognition)吧。

     

     

    配置环境

     

    我使用的是OpenCV 2.3.1和VS2010,下载与配置方法在opencv的中国官网www.opencv.org.cn上都有详细介绍。像这种开源库最麻烦的就是环境配置了,什么makefile这种东西我看着就头大,当然对于我这种菜鸟人家提供了CMake来帮你进行傻瓜式的一键配置,不过这对于我来说还是麻烦,毕竟还要再装个程序。幸运的是我下载的是SuperPack版本,也就是说在opencv/build目录下已经有人家编译好的全部语言、开发平台的lib, dll以及头文件。虽然很大,但是下下来就能用^_^,咱的追求就是简单,更简单!

    建立工程后要做的就是在工程属性的C++目录中将相应的include文件夹,lib文件夹配置进去,另外还要链接上你需要使用的库。

    看网上一片教程说在属性——链接器——输入中配置附加依赖项:opencv_calib3d231d.lib; opencv_contrib231d.lib; opencv_core231d.lib;opencv_features2d231d.lib; opencv_flann231d.lib; opencv_gpu231d.lib;opencv_highgui231d.lib; opencv_imgproc231d.lib; opencv_legacy231d.lib;opencv_ml231d.lib; opencv_objdetect231d.lib; opencv_ts231d.lib;opencv_video231d.lib。

    NND,这么多哪儿记得住啊,下次新建一个工程还得网上找这篇文章拷贝粘贴么?当然不用,只少在车牌识别系统中,我们所需要的只有三个库,而且在VS中我们可以使用预编译指令连接这些库,这样在你将工程拷贝给同学的时候就不用再担心环境配置的问题了。

    #pragma comment(lib, “opencv_core231d.lib”)

    #pragma comment(lib, “opencv_imgproc231d.lib”)

    #pragma comment(lib, “opencv_highgui231d.lib”)

    core是opencv的核心库,一些主要的数据结构都在这里定义,imgproc顾名思义包含了主要的图像处理函数,highgui是一个简单的显示框架,帮助快速创建窗口显示图像等,就好像opengl中的glut。如果使用MFC框架进行显示的话需要额外添加一个类CvvImage,具体情况网上随便一搜就有,不废话了。

     

     

    基本算法

     

    OpenCV只是一个提供基本图像处理方法的工具库,具体应用到车牌识别系统中,需要综合实用图像处理方法,可不能指望OpenCV中直接有个函数帮你把大部分事儿都做了(我一开始就这么期望的…)。

    大致的算法网上可以找到很多论文,其中我主要参考了以下两篇:

    http://blog.csdn.net/heihei723/article/details/728046

    http://www.doc88.com/p-677404951164.html

    这俩篇都通俗易懂,算法比较简单实用,适合初学者上手。从整体看,车牌号识别主要分三步走:1.提取车牌 2.提取字符 3.字符匹配识别。下面就一一来介绍一下具体步骤,及其使用到的opencv函数,函数的具体使用方法同学们就自己查查吧,懒得赘述了。

    车牌提取

    灰度化:灰度化的概念就是将一张三通道RGB颜色的图像变成单通道灰度图,为接下来的图像处理做准备。

    CvCvtColor。cvCvtColor(image, grayScale, CV_BGR2GRAY);

     


    竖向边缘检测:首先车牌上的数字都有很锐利的边缘,另外这些边缘主要都是纵向的,因此通过这一步可以去除图像上的大量无用信息。

        sobel = cvCreateImage(cvGetSize(grayScale), IPL_DEPTH_16S,1);

    cvSobel(grayScale, sobel, 2, 0, 7);

    IplImage* temp = cvCreateImage(cvGetSize(sobel), IPL_DEPTH_8U,1);

    cvConvertScale(sobel, temp, 0.00390625, 0);

    第一步首先创建一张深度为16位有符号(-65536~65535)的的图像区域保持处理结果。

    第二步进行x方向的sobel检测,算子的大小(最后一个参数)我选择了7*7,完全时瞎选的,可以结合实际效果进行调整。

    最后将图像格式转换回8位深度已进行下一步处理

     


    自适应二值化处理:二值化的处理强化了锐利的边缘,进一步去除图像中无用的信息,使用过程中主要注意阀值的选取,我为了省事儿使用了opencv自带的自适应的的二值化处理,缺点是无用信息有点多,但车牌数字信息也会更为凸显。

    cvThreshold(sobel, threshold, 0, 255, CV_THRESH_BINARY| CV_THRESH_OTSU);

    最后的参数CV_THRESH_OTSU就是使用自适应算法,千万不要看学习OpenCV那本书上介绍的cvAdaptiveThreshold方法,那完全时披着二值化皮的边缘检测函数,坑死人!

     


    形态学(膨胀腐蚀)处理:膨胀与腐蚀的处理效果就如其名字一样,我们通过膨胀连接相近的图像区域,通过腐蚀去除孤立细小的色块。通过这一步,我们希望将所有的车牌号字符连通起来,这样为我们接下来通过轮廓识别来选取车牌区域做准备。由于字符都是横向排列的,因此要连通这些字符我们只需进行横向的膨胀即可。

    //自定义1*3的核进行X方向的膨胀腐蚀

    IplConvKernel* kernal = cvCreateStructuringElementEx(3,1, 1, 0, CV_SHAPE_RECT);

    cvDilate(threshold, erode_dilate, kernal, 2);//X方向膨胀连通数字

    vErode(erode_dilate, erode_dilate, kernal, 4);//X方向腐蚀去除碎片

    cvDilate(erode_dilate, erode_dilate, kernal, 2);//X方向膨胀回复形态

    //自定义3*1的核进行Y方向的膨胀腐蚀

    kernal = cvCreateStructuringElementEx(1, 3, 0, 1, CV_SHAPE_RECT);

    cvErode(erode_dilate, erode_dilate, kernal, 1);// Y方向腐蚀去除碎片

    cvDilate(erode_dilate, erode_dilate, kernal, 2);//回复形态

    进行膨胀腐蚀操作需要注意的是要一次到位,如果一次膨胀没有连通到位,那么再次腐蚀将会将图像回复原装,因此我首先做了2次迭代的膨胀,保证数字区域能连通起来,再进行4次迭代腐蚀,尽可能多的去除小块碎片,随后2次迭代膨胀,保证膨胀次数与腐蚀次数相同,以回复连通区域形态大小。


     

    矩形轮廓查找与筛选:经过上一步操作,理论上来说车牌上的字符连通成一个矩形区域,通过轮廓查找我们可以定位该区域。当然,更为准确的说,经过上面的操作,我们将原始图片中在X方向排列紧密的纵向边缘区域连通成了一个矩形区域,出了车牌符合这个特点外,其他一些部分如路间栏杆,车头的纹理等同样符合。因此我们会找到很多这样的区域,这就需要我们进一步根据一些关于车牌特点的先验知识对这些矩形进行进一步筛选。最终,定位车牌所在的矩形区。

    首先来看轮廓检测:

    IplImage* copy = cvCloneImage(img);

    CvMemStorage* storage = cvCreateMemStorage();

    CvSeq* contours;

    cvFindContours(copy, storage, &contours);

            

    while(contours != nullptr)

    {

             rects.push_back(cvBoundingRect(contours));//list<CvRect> rects

             contours= contours->h_next;

    }

    使用list存储全部查找到的CvRect,因为接下来我们要频繁的对容器中的元素进行插入删除操作。

    矩形的筛选算法完全就要自己写啦~这一步筛选效果的好坏直接决定了整个一套识别算法是否能得到一个好的结果。在之后对于算法的调整也主要是集中于这一部分,调整一些先验知识的参数。我设计的筛选算法主要涉及这几个部分:1.大小(图片大小的5%以下) 2.位置(图片高度的40%~90%之间) 3.X方向合并(有时车牌会处理成两个或多个相邻的矩形区,需要进行合并) 4.大小形状(宽高比)

    最后,找到筛选之后最大的那个矩形就是了,注意下图的红色线框!


     

    字符提取

     

    字符提取的步骤与车牌提取的思想大致相同,但无需再做形态学处理。仍然是灰度化->二值化->轮廓检测->自定义筛选->定位。(另外提一句,二值化之后可能还要做一下反色处理,因为有黄底/白底 - 黑字这种车牌,不过因为给我们的样本中没有这类车牌,因此偷个懒就不做了^^)

    相应的步骤所使用的OpenCV函数与之前别无二致,因此不做赘述,这里主要讲一下自定义的筛选和去除边框铆钉这一核心步骤。

     

    首先,最容易导致字符提取失败的情况是亮色的边框与铆钉,他们会与车牌字母连通在一起,导致轮廓检测失败,如下图几种情况:

             3与H和铆钉连接,在轮廓检测是无法提取


             全部字符的底部都连住了车牌底框,轮廓检测将彻底失败


    因此在进行第一次初步的轮廓检测之后,还需要进行除边框与铆钉的处理,之后再进行轮廓检测,再经过筛选,基本上妥妥的能分离出每个字符了。

     

    去除边框:首先对图像进行Y方向的逐步裁剪,直至轮廓检测可以检测到超过5个轮廓。这一步保证不会与铆钉连接的中间几个字符可以通过轮廓检测识别出来。

    去除铆钉:根据识别出来的几个字符矩形轮廓确定车牌照所有字符的上下界,根据其切割图像。(前提是认为所有字符是水平排列的,因此当车牌倾斜时需要用到更为复杂的算法)

    下图显示了这一过程:


    矩形筛选:同学们肯定也注意到了,上图中左右两个边框在作轮廓拾取时也可以获取到,而且很容易与数字1混淆,另外想D, 0, P, R, 8, 9, 6这种数字也会把内部的封闭区域检测出轮廓,因此同车牌提取一样,对检测出的矩形轮廓还要进一步筛选,筛选主要包括排序;高度、宽窄、面积(去除左右边框、圆点、8,p等小的内轮廓);包含检测剔除(去除0、D、非单连通的汉字这种大的内轮廓)。

    中文字符定位:中文字符由于有些是非单连通的,因此在进行筛选时可能会被筛掉,即使没有被筛掉,所得的矩形也很可能并非包含了全部字体,如京。因此在字符提取的最后一步我们需要重定位中文字符的矩形截取框。算法很简单,以第二个字符的矩形轮廓为基准,大小不变,y坐标不变,根据字符间平均间距(不包括2-3字符的间距)确定x坐标即可。

    double d = lastChar.x + 0.5 * lastChar.width - llChar.x- llChar.width * 0.5 - avgWidth;

    注意在求字符间平均间距的时候不要简单的用a.next.x– a.x这种方法,一旦那个字符是数组1结果会错的很难看。要用字符中点间距减去字符正常宽带这种方式。获取正常宽度的算法也很简单,根据先验知识I的矩形包围框宽度一般小于25像素(我提取的车牌大小统一为400 * 100),因此只要找到一个宽度大于25的矩形框,把它的宽度即可作为平均宽度。

     

    最后总结下来,提取字符的流程是这样的 灰度化 -> 二值化 -> 轮廓检测 –> 去除边框 ->轮廓检测 -> 大小筛选 -> 去除铆钉 –> 轮廓检测 -> 筛选 -> 重定位中文字符

    字符匹配

             进行匹配之前你首先需要有一套标准字符模板作为参考,然后将提取出来的字符图片与每个模板进行某种算法的匹配,求得一个匹配值,最终将最佳匹配结果作为该字符图片所代表的字符。这种方法比较笨,也耗时,但是简单,好实现,如果你对这方面想有更深入研究可以在网上搜索一下OCR(Optical Character Recognition)。

             那么匹配算法是什么样的呢?OpenCV提供了许多匹配函数,如直方图匹配,Hu矩匹配,轮廓匹配。如果你上网上搜字符匹配,你可能最多看到的就是模板匹配,还有什么字符匹配最适合用模板匹配之类的话。我可以在这里负责任的告诉你,以上方法统统都不行!!

    至少在我的算法中切出来的字符图片用不了,尤其是神马模板匹配,可能是我的理解不对,模板检测是用来在一张大图中检测出一部分形状的,和我想要的根本就是风马牛不相及嘛;还有那个轮廓检测,听名字感觉很靠谱啊~但实际是如果你得到的字符不是标准到跟模板一模一样(在这个项目中主要是线条的粗细),效果差极了。

    怎么办?显然这时我已经绕进去了,不过好在我同学还保持清醒,最终的解决办法简单的无法想象。。。。逐像素点匹配!神马?这从如此高深的算法跳到如此简单的方式我一时不能接受,但是我负责任的告诉你,如果你不考虑速度、实时性,也不觉得使用这么简单的方法掉价的话,这个方法绝对靠谱!!!(注意这个项目可没打算卖钱也没打算申请啥技术专利啊^_^;)

     

    逐点匹配:很简单,经过处理的带匹配图片与模板图片此时大小相同,且都为2值图(非0即255)遍历全部像素点,记录两张图中值不同的像素个数,除以全部像素数量即为匹配率。显然越接近0越匹配。

    近似区分:上一步的匹配结果已经非常好了,但对于一些容易混淆的字符还需要进一步区分如0和U, B和8和9等等。对于这些字符,我们在通过逐点匹配后不能马上认定,而需要进行特征检测。最简单的特征如连通区域个数(区分0 – U, 8–9),直线检测(区分B和8)等等。

     

    改进

    加入图像旋转变化,这点对于识别倾斜车牌及其上的数字很重要,可用的方法再这篇文章中http://www.doc88.com/p-677404951164.html有提到,有时间可以试试效果。

    二值化前加入锐化处理,采用OpenCV的自适应阀值函数会提取出大量模糊的边缘及碎片,直接影响是导致字符变粗,易于车牌边框连接,影响匹配效果。

    中文字符的识别,目前纯靠人品。。。。

    展开全文
  • 时间序列分析不同于以前的项目——看一下相关的库怎么用,就可以快速上线应用。它是非常需要你的基础知识的,Hamilton关于《时间序列分析》方面的知识,写了厚厚的2本书。在这里,我将这些知识共享一下。基础知识篇...

    最近做了一个时间序列分析的项目。时间序列分析不同于以前的项目——看一下相关的库怎么用,就可以快速上线应用。它是非常需要你的基础知识的,Hamilton关于《时间序列分析》方面的知识,写了厚厚的2本书。在这里,我将这些知识共享一下。

    基础知识篇(2)

    1.移动平均过程MA (moving average)

    Yt的值,依赖于最近两期的

    进行加权平均计算,所以称为MA(1)。你注意到跟差分的区别了吗?差分是Yt的值依赖于自己过去期的值。

    协方差平稳过程的第j个自相关系数(

    )指它的第j个自协方差处以它的方差,协方差平稳假设,是时间序列预测的重要条件。

    *****************************************************************************************

    2.自回归过程AR (Autoregression)

    自回归就是差分,

    这个就是一阶自回归AR(1)。

    ******************************************************************************************

    3.混合自回归移动平均过程ARMA

    ARMA(p,q)就是即包含AR(p),又包含MA(q)。

    ******************************************************************************************

    4.AR、MA、ARMA的转换规则

    两个移动平均过程相加,MA(q1) + MA(q2) = MA(max{q1,q2})

    两个自回归过程相加,AR(p1) + AR(p2) = ARMA(p1+p2, max{p1,p2})

    ******************************************************************************************

    5.博克斯-詹金斯建模思想

    发现很小的p和q值的单变量ARMA模型比大型模型的预测效果更好,因此预测分为这几步:

    (1)变化数据,以保证协方差平稳性的假设

    (2)猜测p,q值(从较小的值开始)

    (3)估计

    (L)和

    (L)的系数

    (4)诊断分析,以证实所得模型确实与观测到的数据特征一致

    ******************************************************************************************

    6.样本自相关

    指的是不同的样本值,随机扰动项之间不再是完全相互独立(非高斯白噪声),而是存在某种相关性。

    如果存在样本不存在自相关,那么

    应该在95%的时间内落在

    之间;

    如果存在样本自相关,这样估计出的总体自相关系数只能代表样本误差,而非真实误差。

    ******************************************************************************************

    7.偏自相关

    第m阶偏自相关系数定义为:Y关于它最近的m个值的线性投影的最末一个系数。如果数据是由AR(p)过程生成,那么Y关于它超过p期的过去值的投影系数为0;否则数据一定是由MA(q)过程而来。

    ******************************************************************************************

    8.极大似然估计

    进行估计的一种方法。通常有两步:

    (1) 写出似然函数;——计算高斯ARMA过程的精确似然函数的最简单的算法是运用卡尔曼过滤。

    (2)求使得似然函数值最大的

    值——格点搜索、最陡爬坡法、Newton-Raphson方法、Davidon-Fletcher-Powell方法、Broyden方法、Judge方法等。

    ******************************************************************************************

    9.时域分析VS谱分析

    时域分析:

    ,且研究重点集中在分析不同时点t和

    的值

    的协方差。

    谱分析:又称频域分析,将

    看作周期函数cos(wt)和sin(wt)的加权和,其中w表示特定的频率:

    。主要考察分析Y的行为时不同频率的重要性。这方面的专家有:Anderson,Bloomfield和Fuller。

    任何平稳协方差过程,都有一个时域表达和频域表达;任何能被其中一个表达的数据特征同样也能被另一个表达。对于某些特征,时域表达跟简单,而另外一些特征,频域表达更简单。

    ******************************************************************************************

    10.卡尔曼滤波

    卡尔曼滤波是卡尔曼提出的一种连续校正系统的线性投影的一种算法。观测数据经过卡尔曼的这种算法后,输出最优估计,此时的最优估计已经去除了扰动项和白噪声的影响,所以也可看作是滤波(过滤)过程,就称为卡尔曼滤波。

    卡尔曼滤波,对于计算高斯ARMA过程的精确优先样本预测、精确似然函数、分解矩阵自生成函数、谱密度、估计系数随时间变化的向量自回归都提供了一种方法。

    卡尔曼滤波预测的主要思想是什么呢?很简单,数学中向量是一种数据的表达方法,矩阵是线性变换,是运动的表达方式。yt的动态模型,就可以用一个向量(称为状态向量)和矩阵来表达。通过状态方程和观测方程,进行递归估计,估计的标准是均方差误MSE最小。

    卡尔曼滤波预测的优点是只需要少量的数据(有限样本)就能进行精确预测,可以根据观测方程及时的自我调节。缺点是可能不收敛。

    ******************************************************************************************

    11.非平稳时间序列

    前面讲的都是在时间序列平稳性的假设下研究的。回顾一下,怎样具有平稳性?协方差平稳。举例,Yt = 一个时间趋势 + 高斯白噪声,它的期望值要依赖时间趋势,这就是不平稳的。现实中,不平稳的时间序列是最常出现的,其中,时间趋势有可能是线性、指数性的,噪声也不局限为白噪声,甚至还会包括其他的周期性的变动趋势,比如季节。

    因为指数型趋势,取对数就是线性趋势,所以一般研究线性趋势。

    ******************************************************************************************

    12.单位根

    单位根是介绍复数的时候提出的概念,单位根指模为1的根。

    单位根过程其实是指差分操作的过程,这个过程后,就可以用单位根的表达方式来表示Yt的线性趋势变化。

    用模型来表示的话,即为:ARIMA(p,d,q),d表示需要进行差分的次数。ARIMA(p,d,q)进行d阶差分即可得到一个平稳的ARMA(p,q)。

    单位根过程相对于平稳过程而言,其预测误差不会收敛,为达到平稳进行的数据变换也不可逆;

    单位根检验就是来检验时间序列中是否存在单位根,换句话说检验数据是否是平稳的。常用的有ADF检验,也叫扩展的迪克-富勒检验。它希望差分后的数据是平稳的,所以H0:数据不平稳。ADF检验结果接近0,则拒绝原假设,认为数据平稳。

    ******************************************************************************************

    13.协整

    协整是单位根过程的一个特殊形式。虽然一些经济变量的本身是非平稳序列,但是,它们的线性组合却有可能是平稳序列。这种平稳的线性组合被称为协整方程,且可解释为变量之间的长期稳定的均衡关系。

    例如,消费和收入都是非平稳时间序列,但是具有协整关系。假如它们不具有,那么长期消费就可能比收入高或低,于是消费者便会非理性地消费或累积储蓄。

    ARIMA采用差分方法消除序列中含有的非平稳趋势,使得序列平稳化后建立模型,但是变换后的序列限制了所讨论经济问题的范围,并且有时变换后的序列由于不具有直接的经济意义,使得化为平稳序列后所建立的时间序列模型不便于解释。

    1987年Engle和Granger提出的协整理论及其方法,为非平稳序列的建模提供了另一种途径。协整允许我们刻画两个或多个序列之间的平衡或平稳关系。对于每一个序列单独来说可能是非平稳的,这些序列的矩,如均值、方差或协方差随时间而变化,而这些时间序列的线性组合序列却可能有不随时间变化的性质。

    展开全文
  • 大量数据从数据库里全部查出来,然后再生成报表输出到 web 端,一般需要很长时间,用户体验很,而且报表一般采用内存计算,全读入的话也容易爆掉内存。所以大数据量报表呈现时都是采用分页的方式,尽量快速呈现第...

    大量数据从数据库里全部查出来,然后再生成报表输出到 web 端,一般需要很长时间,用户体验很差,而且报表一般采用内存计算,全读入的话也容易爆掉内存。所以大数据量报表呈现时都是采用分页的方式,尽量快速呈现第一页,用户也可以随意翻页,每次显示的一页数据量比较小,也就不会内存溢出。

    大部分报表工具通常是使用数据库的分页机制。利用数据库提供的返回指定行号范围内记录的语法,即界面端根据当前页号计算出行号范围(每页显示固定行数)作为参数拼入 SQL 中,数据库就会只返回当前页的记录,从而实现分页呈现的效果。

    但是这种方式会有两个问题:一个是向后翻页时,需要重新计算 sql,等待感会比较强;另一个是可能会因为在翻页时执行数据库更新操作导致数据不一致。虽然这两个问题可以通过游标取数方式解决,但是游标是一个单向操作,只能向后翻页,不能向前翻页,并不能从根本上解决问题。

    润乾报表则提出了完全不同的大数据报表处理方案,采用两个异步线程完成取数和呈现,取数线程发出 SQL 后不断取出数据缓存到本地,由呈现线程从本地缓存中获取数据进行显示。这样,已经取出并缓存的数据就能快速呈现,不再有等待感;而取数线程所涉及的 SQL,在数据库中保持同一个事务,也不会有不一致的问题。同时集文件存储格式支持跳转到任意页访问,从而极大地改善了用户体验。

    数据库系统本身并不直接支持这种机制,需要在报表工具层面做大量工作,润乾报表因为其内置的独特计算引擎可以很方便实现这一点,其他报表工具则难以做到。润乾报表中大报表展现设置很简单,例如 sql 数据集可以直接在报表属性里设置大数据集:

    imagepng

    然后使用 big 标签就可以快速展现报表数据了(在展现的同时后台还在计算中,所以页码是会变化的):

    imagepng

    导出 excel 时会有进度提醒:

    imagepng

    展开全文
  • “近期重新学了java多线程的知识,之前学过没怎么用,慢慢的也就忘得不过了。这次就把多线程的基础知识在此记录一下~” 基础概念 并发与并行 并发:一个CPU在同一时间段有多个程序在执行 并行:同一时刻有多个...
  • excel的使用

    2012-11-25 17:06:01
    图107、矩阵计算Excel的强大计算功能,不但能够进行简单的四则运算,也可以进行数组、矩阵的计算。(1)数组和矩阵的定义矩阵不是一个数,而是一个数组。在Excel里,数组占用一片单元域,单元域用大括号表示,例如{...
  • 算法导论(part2)

    2010-09-09 22:54:12
    ·快速排序(第7.1节)中用到的划分方法与期望线性时间顺序统计算法(expected linear-time order-statistic algorithm,第9.2节)有所变化。现在,我们采用了Lomuto提出的方法,并将该方法与指示器随机变量一起使用,...
  • 算法导论(part1)

    2010-09-09 22:51:05
    ·快速排序(第7.1节)中用到的划分方法与期望线性时间顺序统计算法(expected linear-time order-statistic algorithm,第9.2节)有所变化。现在,我们采用了Lomuto提出的方法,并将该方法与指示器随机变量一起使用,...
  • 因为速度一般不容易测量,我们常常用位置的变化Δx除以测量的时间差Δt来计算速度,所以这就是微分因子D; 情况继续发生变化,上面考虑的是斜坡静止的情况,如果这个变态的斜坡是移动的怎么办呢?(例如两轮平衡...
  • 但一直以来人们使用传统人工的方式管理文件工资档案,这种管理方式存在着许多缺点,如:效率低、保密性,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断提高,...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    嵌入式DSP专门用来处理对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在数字滤波、FFT(Fast Fourier Transform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。 18. MCU在...
  • SoloPi是一个无线化、非侵入式的Android自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。 功能特性 录制回放 游戏录制回放使用视频 Native应用录制回放使用...
  • RamDisk Plus,绝对好使

    2008-12-04 13:52:08
    毕竟硬碟的速度跟记忆体比较起来可真是天地别。 对一些数据存取速度要求很高的程式,如数字影像处理或玩 3D 游戏装入纹理数据时,受硬碟存取速度的影响, 萤幕画面时常会出现延迟和停顿。 SuperSpeed RamDisk ...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    用例只描述参与者和系统在交互过程中做些什么,并不描述怎么做。 用例图 关联关系 用例图 泛化关系 用例图 泛化关系 用例图 用例图 用例图 用例用于什么情况? 不知道什么情况不用用例 如果没有用到用例,...
  • 例如单据里显示签名,签名时间,审核意见,越级审批,单据共享,单据是否可以打印,单据是否允许修改,彻底退回,退回给某个审批节点,某个审核步骤可以任意选人等等,其实这些需求都很合理,只是有时候我们没提前...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET的第一语言 本书着重介绍语言本身,比较少涉及应用,不错的入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 目目 目 录 ... 比尔.... 2000 年 6 月 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...
  • 小日本视频转换器

    2011-11-07 16:03:30
    老枯不明白到底是怎么控制的。 RT-CBR (实时固定码率):连GOP层次的码率优化也不做了的CBR,快一点,质量不高 RT-CQ (实时固定品质):连GOP层次的码率优化也不做了的CQ,快一点,质量不高 6)码率:这个码率是...
  • 8.5.4 找出两个日期的 236 8.5.5 显示日期一部分的字符串值 237 8.5.6 使用DATEPART显示日期一部分的整数值 237 8.5.7 使用YEAR、MONTH和DAY显示日期一部分的整数值 238 8.6 类型转换 238 8.6.1 转换...
  • 以我本人所在公司为例,我公司从事全国的短信业务,以每省至少两个数据库计算,仅处于生产线的数据库数量就已将近70个,再加上开发数据库、测试数据库,我所领导的DBA团队总共管理的数据库将近80个。这个数量还仅仅...
  • 不明白到底是怎么控制的。  RT-CBR(实时固定码率):连GOP层次的码率优化也不做了的CBR,快一点,质量不高。  RT-CQ(实时固定品质):连GOP层次的码率优化也不做了的CQ,快一点,质量不高。  06、码率:这个...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    如您所见,在这个分配程序中,内存的释放使用了一个非常简单的机制,在固定时间内完成内存释放。分配内存稍微困难一些。以下是该算法的略述: 清单 5. 主分配程序的伪代码 1. If our allocator has not been ...
  • java 面试题 总结

    2009-09-16 08:45:34
    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多...
  • 不过,您可能没有用一些时间去思考它们在您的操作系统中是如何实现的。本节将向您展示 malloc 和 free 的一个最简化实现的代码,来帮助说明管理内存时都涉及到了哪些事情。 要试着运行这些示例,需要先复制本...
  • 二十三种设计模式【PDF版】

    热门讨论 2011-05-30 14:13:49
    新手需要花费较长时间领会良好的面向对象设计是怎么回事。有经验的设计者显然知道一些新手所不知道的东西,这又 是什么呢? 内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解决方案...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
热门标签
关键字:

怎么快速计算时间差