月度归档:2009 年六月

用htmlunit实现一段抓取web报表的java程序

        SimpleDateFormat sdfParse = new SimpleDateFormat(“MMMMM dd, yyyy”, Locale.ENGLISH);
        SimpleDateFormat sdfFormat = new SimpleDateFormat(“yyyy-MM-dd”);
        SimpleDateFormat comFormat = new SimpleDateFormat(“yyyyMMdd”);
       
        long start = System.currentTimeMillis();
        Config.init(“app.properties”);
       
        //prepare db
        StringBuilder sql = null;
        Statement st = null;
        Connection conn = null;
        try{
            Class.forName(Config.get(“DB_DRIVER”)).newInstance();
            conn = DriverManager.getConnection(Config.get(“DB_DSN”), Config.get(“DB_USERNAME”), Config.get(“DB_PASSWORD”));
            st = conn.createStatement();
        }catch(InstantiationException e){
            e.printStackTrace();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
       
        //change timezone
        Calendar calendar = GregorianCalendar.getInstance();
        int millisDiff = TimeZone.getTimeZone(Config.get(“TZ_DATA”)).getRawOffset() – TimeZone.getDefault().getRawOffset();
        calendar.setTimeInMillis(calendar.getTimeInMillis()+millisDiff);
       
        Calendar calYesterday = (Calendar)calendar.clone();
        calYesterday.add(Calendar.DAY_OF_YEAR, -1);

        Calendar calLastWeekDay = (Calendar)calYesterday.clone();
        calLastWeekDay.add(Calendar.DAY_OF_YEAR, – Integer.parseInt(Config.get(“OFFSET_DAYS”)));
       
        System.out.println(“From: “+sdfFormat.format(calLastWeekDay.getTime()));
        System.out.println(“To: “+sdfFormat.format(calYesterday.getTime()));
       
        int i = 0, m = 0;
        HashMap<String, HashMap> data = new HashMap<String, HashMap>();
        HashMap<String, String> item = null;//new HashMap<String, String>()
        String u = Config.get(“START_URL”);
        WebClient client = new WebClient();
        client.setCssEnabled(false);
        client.setJavaScriptEnabled(false);
        client.setRedirectEnabled(true);
        client.setThrowExceptionOnScriptError(false);
        client.setThrowExceptionOnFailingStatusCode(false);
        client.setTimeout(0);
        try {
            //login
            HtmlPage p = (HtmlPage) client.getPage(u);
            HtmlForm form = (HtmlForm) p.getFormByName(“sign_in”);

            HtmlInput email = (HtmlInput) form.getInputByName(“email”);
            HtmlInput pass = (HtmlInput) form.getInputByName(“password”);
            HtmlInput submit = (HtmlInput) form.getInputByValue(“サインイン”);
            email.setValueAttribute(Config.get(“USERNAME”));
            pass.setValueAttribute(Config.get(“PASSWORD”));

            HtmlPage pr = (HtmlPage) submit.click();
           
            //go to report page
            HtmlPage er = client
                    .getPage(“https://the.report.page”);

            form = er.getFormByName(“htmlReport”);
           
            //set options
            form.getInputByValue(“exact”).setChecked(true);
           
            form.getSelectByName(“startMonth”).setSelectedAttribute(String.valueOf(calLastWeekDay.get(Calendar.MONTH)), true);
            form.getSelectByName(“startDay”).setSelectedAttribute(String.valueOf(calLastWeekDay.get(Calendar.DAY_OF_MONTH)), true);
            form.getSelectByName(“startYear”).setSelectedAttribute(String.valueOf(calLastWeekDay.get(Calendar.YEAR)), true);
           
            form.getSelectByName(“endMonth”).setSelectedAttribute(String.valueOf(calYesterday.get(Calendar.MONTH)), true);
            form.getSelectByName(“endDay”).setSelectedAttribute(String.valueOf(calYesterday.get(Calendar.DAY_OF_MONTH)), true);
            form.getSelectByName(“endYear”).setSelectedAttribute(String.valueOf(calYesterday.get(Calendar.YEAR)), true);
           
            HtmlInput gt = form.getInputByValue(“レポートのダウンロード(CSV形式)”);
            InputStream in = null;
           
            //retry if not available
            int retry = 0;
            while(in == null && retry < 50){
                in = gt.click().getWebResponse().getContentAsStream();
                if(in == null){
                    System.out.println(“Data not available! wait for 1 minute…”);
           
        Thread.sleep(60000);
                }
                retry++;
            }

            //parse report
            BufferedReader br = new BufferedReader(new InputStreamReader(in, “UTF-8″));
            String line = null, key = null;
            String[] cols = null;
            HashMap<String, String> tmp = null;
            br.readLine();

            while ((line = br.readLine()) != null) {
                i++;
                item = new HashMap<String, String>();
                cols = StringUtils.splitPreserveAllTokens(line, “\t”);//.split(“\t”);
                System.out.println(“line”+i+” = “+cols.length);
                if(cols.length<11 || i<2){
                    for(int k=0; k<cols.length; k++){
                        System.out.println(“cols["+k+"]=”+cols[k]);
                    }
                    continue;
                }

                String settleDate = sdfFormat.format(sdfParse.parse(cols[5]));
                key = cols[2].trim()+settleDate;
                item.put(“OUTGOINGID”, cols[2].trim());
                item.put(“SETTLEDATE”, settleDate);
                if(data.containsKey(key)){
                    tmp = data.get(key);
                    item.put(“ORDERCOUNT”, String.valueOf(Integer.parseInt(tmp.get(“ORDERCOUNT”)) + Integer.parseInt(cols[8].replaceAll(“,”, “”))));
                    item.put(“ORDERAMOUNT”, String.valueOf(Double.parseDouble(tmp.get(“ORDERAMOUNT”)) + Double.parseDouble(cols[9].replace(“¥”, “”).replaceAll(“,”, “”))));
                    item.put(“REVENUE”, String.valueOf(Double.parseDouble(tmp.get(“REVENUE”)) + Double.parseDouble(cols[10].replace(“¥”, “”).replaceAll(“,”, “”))));
                }else{
                    item.put(“ORDERCOUNT”, String.valueOf(Integer.parseInt(cols[8].replaceAll(“,”, “”))));
                    item.put(“ORDERAMOUNT”, String.valueOf(Double.parseDouble(cols[9].replace(“¥”, “”).replaceAll(“,”, “”))));
                    item.put(“REVENUE”, String.valueOf(Double.parseDouble(cols[10].replace(“¥”, “”).replaceAll(“,”, “”))));
                }
                data.put(key, item);
            }
           
            br.close();
            in.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
       
       
        //save report
        for(Entry<String, HashMap> entry:data.entrySet()){
            item = entry.getValue();
            sql = new StringBuilder();
            sql.append(“select OUTGOINGID, SETTLEDATE, sum(REVENUE) as REVENUE from “);
            sql.append(Config.get(“TBL_CPA”));
            sql.append(” where OUTGOINGID=’”);
            sql.append(item.get(“OUTGOINGID”));
            sql.append(“‘ and to_char(SETTLEDATE, ‘yyyy-mm-dd’)=’”);
            sql.append(item.get(“SETTLEDATE”));
            sql.append(“‘ group by OUTGOINGID, SETTLEDATE”);
           
            try{
                st.execute(sql.toString());
   
                double oldRev = 0;
                if(st.getResultSet().next()){
                    oldRev = st.getResultSet().getDouble(“REVENUE”);
                }
                System.out.println(“oldRev=”+oldRev);
                double newRev = Double.parseDouble(item.get(“REVENUE”));
                double varRev = newRev-oldRev;
                if (varRev != 0){
                    System.out.println(“newRev=”+newRev);
                    sql = new StringBuilder();
                    sql.append(“insert into “);
                    sql.append(Config.get(“TBL_CPA”));
                    sql.append(“(WEBSITE, OUTGOINGID, SETTLEDATE, ORDERAMOUNT, ORDERCOUNT, REVENUE, LOADDATE)”);
                    sql.append(“values(1,
‘”);
                    sql.append(item.get(“OUTGOINGID”));
                    sql.append(“‘, to_date(‘”);
                    sql.append(item.get(“SETTLEDATE”));
                    sql.append(“‘, ‘yyyy-mm-dd’), “);
                    sql.append(item.get(“ORDERAMOUNT”));
                    sql.append(“,”);
                    sql.append(item.get(“ORDERCOUNT”));
                    sql.append(“,”);
                   
                    sql.append(String.valueOf(varRev));
                    sql.append(“, to_date(‘”);
                    sql.append(sdfFormat.format(calYesterday.getTime()));//
                    sql.append(“‘, ‘yyyy-mm-dd’))”);
                   
                    st.execute(sql.toString());
                   
                    m++;
                }else{
                    System.out.println(“Found no change: “+item.get(“OUTGOINGID”)+” : “+item.get(“SETTLEDATE”));
                }
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        System.out.println(“total=”+i+”; matched=”+m);
       
        //write log
        sql = new StringBuilder();
        sql.append(“begin user.log_proceduce(‘the_site’, ‘cpa_”);
        sql.append(comFormat.format(calYesterday.getTime()));
        sql.append(“.dat’,”);
        sql.append(m);
        sql.append(“,0, null, ‘revenue’); end;”);
       
        try{
            st.execute(sql.toString());
        }catch(SQLException e){
            e.printStackTrace();
        }
       
        client = null;
        long cost = (System.currentTimeMillis()-start)/1000;
        System.out.println(“cost time: “+String.valueOf(cost)+” secs.”);

什么是云计算

  云理论是实现概念的定性值与数字的定量值之间自然转换的有力工具。

 

  本文在云理论的基础上,提出了实现概念计算(也叫简化计算)的云计算方法。概述了云模型与不确定推理;给出了计算的逻辑描述,将计算过程抽象成 为推理过程;运用机器学习的方法,给出了计算云化的过程,并且采用不确定推理的方法,给出了云的计算过程;简单阐述了云化计算的系统实现。

 

  随着网络的日益普及,“网络存储”这样的服务也日益深入人心,有了众多的使用者,网络服务业方面的开发商自然不会错过这个大市场。几天前,微软 推出了Windows Live SkyDrive,并已经在互联网上全面进行测试,虽然容量仅仅为500MB,但是毕竟是免费的,使用的人数量极为可观。而谷歌也不是等闲之 辈,SkyDrive刚刚登场就推出了自己的超大容量网络存储方案,不过收取的费用上还需要商榷。另外,苹果公司开发的.Mac平台也瞄准了“网络存储” 这块大蛋糕,随时准备加入这场 “战争”。

 

  近日,arstechnica等国外各大网站发表了一篇名为《Google, Microsoft and Apple building online storage havens: you win》的文章,引起了全球范围内网友的热烈讨论,微软、谷歌、苹果的“粉丝”在各大论坛议论纷纷,强烈支持各自的“阵营”,一时间硝烟四起,网络存储三 强鼎立的局面已经日渐明显。

 

  微软公司的SkyDrive走的是纯免费路线,不过不排除这只是微软公司的“鱼饵”,毕竟天上还是不会掉馅饼的。谷歌公司则直接与美元挂钩,要 想用我的服务,当然可以,而且非常欢迎,但是容量的大小是要用美元来衡量的。从2.8GB升级到2.8GB+6GB也许我们都还可以接受,但是500美元 直接买下 250GB的空间则有些奢侈了,而且仅局限于谷歌本身的服务拓展性也太小了。苹果公司的.Mac平台之前就已经有网络存储的服务了,不过现在容量却已经从 当时极不起眼的1GB升级到了10GB,同样是99美元的.Mac平台使用年费,加量不加价是感觉还是不错的。

 

  竞争必然会引起降价和服务质量的提升,相信这也是我们普通用户希望看到的,而网络存储全面普及的时代也将来临,希望从“云计算”(Cloud computing)的“云存储”发展起来的网络存储能够带给我们更多的惊喜,正如目前的IM即时通讯软件那样百花齐放。
继续阅读

中国的数学——几件数学新闻和对于中国数学的一些看法

陈省身
(庆祝自然科学基金制设立15周年和国家自然科学基金委员会成立10周年的讲演)

    张存浩先生要我讲点数学,这么短的时间,而数学这么大,只好举几个要点谈谈。

    数学是什么?数学是根据某些假设,用逻辑的推理得到结论,因为用这么简单的方法,所以数学是一门坚固的科学,它得到的结论是很有效的。这样的结论自然对学问的各方面都很有应用,不过有一点很奇怪的,就是这种应用的范围非常大。

    最初你用几个数或画几个图就得到的一些结论,而由此引起的发展却常常令人难以想象。在这个发展过程中,我认为不仅在数学上最重要,而且在人类文化史上也非常突出的就是Euclid在《几何原本》。这是第一本系统性的书,主要的目的是研究空间的性质。这些性质都可以从很简单的公理用逻辑的推理得到。这是一本关于整个数学的书,不仅仅限于几何学。例如,Euclid书上首先证明素数的个数是无穷的,这便是一个算术的结论。随着推理的复杂化,便有许多“深刻”的定理,需要很长的证明。例如 ,有些解析数论定理的证明,便需几十条引理。

    最初,用简单的方法证明几个结果,大家很欣赏,也很重要。后来方法发展了,便产生很复杂的推理,有些定理需要几十页才能证明。现在有的结果的证明甚至上百页,上千页。看到这么复杂的证明,我们固然惊叹某些数学家高超的技巧和深厚的功力,但心中难免产生一些疑问,甚或有些无所适从的感觉。所以我想,日后数学的重要进展,在于引进观念,使问题简化。
先讲讲有限单群的问题。

1.有限单群

    我们知道,数学的发展中有一个基本观念——群。群也是数学之中各方面的最基本的观念。怎样研究群的结构呢?最简单的方法是讨论它的子群,再由小的群的结构慢慢构造大一些的群。群中最重要的一种群是有限群,而有限群是一个难极了的题目,需要有特别的方法,特别的观念去研究。

    命G为群,g∈G为一子群,如对任何g∈G-1g H g ∈H,则称H为正规的(nomal). 正规子群存在,可使G的研究变为子群H及商群G/H的研究。这样就有一个很自然的问题,有哪些有限的单群(*** group).单群除了它自己和单位元(identity)之外,没有其他的非平凡的正规子群(normalsubgroup). 数学上称其为简单群,其实一点也不简单。

    有限群论的一个深刻的定理是Fei-Thompson定理:非交换单群的阶(数)(即群中元素的个数)是偶数。更不寻常的是除了某些大类(素数阶循环群Zp,交错群An(n>=5), Lie型单群)外,后来发现了26个零零碎碎的有限单群(散在单群,离散单群), 现在知道,最大的散在单群的阶是241×320×59×76×112×133×17×19×23×29×31×41×47×59×71 =808,017…=1054

    这是很大的单群,由B。Fisher 和 R。L.Griess两位数学家所发现,数学家称它为魔群(怪物,Monster).

    单群的权威数学家D.Gorenstein相信有限单群都在这里了,这当然是数学上一个很好的结果。把单群都确定了,就像化学家把元素都确定了,物理学家把核子的结构都确定了一样。可这里有个缺点,Gorenstein并未将证明定出来。他讲若将证明写出来至少有1000页,而1000页的证明无论如何很容易有错误。可是Gorenstein又说,不要紧,若有错误,这个错误一定可以补救。你相信不相信?数学界有些人怀疑这样的证明是否必要。现在计算机的出现,许多问题可以验证到很大的数,是否还需要严格的证明,已变成数学上一个有争论的问题。这个争论看来一时无法解决。段学复先生是我的老朋友,是有限群论的专家,也许我们可以问一下他的意见。我个人觉得这个问题很难回答。不过数学家有个自由,当你不能做或不喜欢做一个问题时,你完全不必投入,你只需做一些你能做或喜欢做的问题。

2.四色问题

     把地图着色,使得邻国有不同的颜色,需要几种颜色?经验告诉我们,四色够了。但是严格的证明极难。这就是有各的四色问题。

    地图不一定在球面上,也可在亏格高的的曲面上(一个亏格高为g的曲面在拓扑上讲是球面加g个把手;亏格为1的曲面可设想为环面)。可惊奇的是,这个着色问题,对于g>=1的曲面完全解决了。可以证明:有整数χ(g),满足条件:在亏格为g的曲面上任何地图都可用χ(g)种颜色着色,使邻国有不同颜色,且有地图至少需要χ(g) 种颜色。这个数在g>=1时可以完全确定。我们知道χ(1)=7,即环面上的地图可用七色着色,四色不够。

    令人费解的是,证明地球上四色定理,困难多了。现有的证明,需要计算机的帮助,与传统的证明不同。而我们觉得最简单的情况,即我们住的地球球面上的着色问题反而特别复杂。把扩充的问题解决了,得到了很有意思的结论。但是回到基本问题,反而更难。

    这种现象不止这一个,还有很多,一个例子是所谓的低维拓扑,即推广的问题更简单,而本身核心的问题反而不易克服,这确是数学神秘性的一面。

3.椭圆曲线

    最近的数学进展,最受人注意的结果就是Fermat大定理的证明。Fermat大定理说:方程式xn + yn=zn ,n>2没有非平凡的整数解(即xyz<>0). 这个传说了300年的结果的证明,最近由Princeton大学的教授Andrew J.Wiles(英国数学家)给出。但证明中缺一段,是由他的学生Richard Tarlor补充的。因此,Fermat 定理现在已经有了一个完全的证明。整个文章发表在最近一期的“Annals of Mathematics”(Prinston大学杂志,1996,第一期)整个一期登的是Wiles与Taylor的论文,证明Fermat定理(Wiles为此同Robert Langlands 获得了1996年的Wolf奖与National Academy Science Award in Mathematics).

    有意思的是,证明这个定理的关键是椭圆曲线。这是代数数论的一个分支。有以下一则故事。英国的大数学家G.H.Hardy(1877-1947)有一天去医院探望他的朋友,印度天才数学家S.A.Ramanujan(1887-1920).Hardy 的汽车号是1729。他向Ramanujan说,这个数目没有意思。Ramanujan说,不然,这是可以用两种不同方法写为2个立方之和的最小的数,如1729=13+123=93+103这结果可用椭圆曲线论来证明。

    我们知道,要找一个一般方程的解不容易的,而要找一个系数为整数的多项式方程P(x,y) = 0(传统上叫Diophantine方程)的整数解更困难。因为普通的解不会是整数,这是数论中的一个主要问题。

    需要说明的,在Wiles 完成这个证明之前,我有一位在Berkley的朋友Kenneth A.Ribet ,他有重要的贡献。他证明了一日本数学家Yutaka Taniyama的某一个关于椭圆曲线的假设包含Fermat定理。于是可将Fermat 定理变为一个关于椭圆曲线的定理
。Wiles根据Ribet的结果又继续经过了许多步骤,以至达到最后的证明。即在复平面内得到曲线。由复变函数论知道,复平面内的曲线就成为一个Riemann曲面。Riemann曲面为定向曲面,它可以是球,也可以是球加上好多把手。其中有一个最简单的情形,就是一个球加上一个把手,即一个环面。环面是个群,且为可交换群。

    所谓椭圆曲线,就是把这个曲线看成复平面内亏格(genus)等于1的复曲线。亏格等于1的曲线有一个非常深刻而巧妙的性质。即它上面的点有一个可交换群的构造。两个点可以加起来,且有群的性质。这是很重要的性质。椭圆曲线与椭圆无关。原因是,若所有曲线的亏格大于1,相当于Riemann曲面有一个Poincare度量,它的曲率等于1,所有曲面若其曲率等于—1,则叫做双曲的。亏格等于1的叫椭圆。亏格等于0的叫抛物线。椭圆曲线的研究是数论中非常重要,非常有意思的方面。最近一期的科学杂志(Science),有位先生写了一篇关于椭圆曲线的文章。椭圆曲线在电报的密码上有应用。而中国也有很多人在做代数几何与代数数论方面的工作。最近在黄山有一个国际性的,题为“代数几何与代数数论”的会议,由冯克勤先生主持。

    从这个定理我们应认识到:高深的数学是必要的。Fermat定理的结论虽然简单,但它蕴藏着许多数学的关系,远远超出结论中的数学观念。这些关系日新月异,十分神妙,学问之奥,令人拜赏。

    我相信,Fermat定理不能用初等方法证明,这种努力是徒劳的。数学是一个整体,一定要吸取几千年所有的进步。

4.拓扑与量子场论

    1995年初的一天晚上,我在家看晚间电视新闻。突然,我听到自己的名字,大吃一惊。原来加利福尼亚发一种彩票,头彩300万美元,若无人中彩的话,可以积累到下一次抽彩。我从前的一个学生,名Robert Uomini, 中了头彩美金2200万元。他曾选过我的本科课,当时还对微分几何很有兴趣。他很念旧,以100万美元捐赠加州大学,设立“陈省身讲座”。学校决定,以此讲座邀请名学者为访问教授。第一位应邀的为英国数学家Sir Michael Atiyah. 他到中国不止一次。他是英国影响最大的数学家,剑桥大学三一学院的院长,则卸任的英国皇家协会会长。Atiyah很会讲学,也很博学,他的报告有很大的吸引力。他作了八讲,讲题是“拓扑与量子场论”。

    这是当前一个热门的课题,把高深的数学和物理联系起来了,导出了深刻的结果。现在拓扑在物理上有非常重要的应用,这跟杨振宁的Yang-Mills场方程有很密切的关系。

    杨先生喜欢说,你们数学家写的东西,我们学物理的人看不懂,等于另外一种文字。我想我们搞数学的人有责任把我们的结果,写成不是本行的人也至少知道你讲的是怎么一回事。

    物理学,量子力学,尤其是量子场论与数学的关系其实并不复杂。说到数学的应用,讲一下矢量空间,Euclid空间就是一个矢量空间。再进一步,多个矢量空间构成一个拓扑空间,这就是所谓的矢量丛,即一束这样的空间。这样的空间有一些简单的性质。比如说,局部来讲,这种矢量空间是一个chart,是一个集,可用坐标来表示。结果发现矢量丛这种空间在物理上很有用。物理学的一个基本观念是“场”。最简单的场是电磁场,尤为近代生活的一部分。电磁场的“势”适合Maxwell方程。Hermann Weyl第一个看出这个势不是一个确定的函数。它可以变化。这在物理上叫做规范(gauge, 不完全确定的,可以变化的),这就是物理上规范场论的第一个情形。

    物理上有4种场:电磁场,引力场,强作用场和弱作用场。现在知道,这些场都是规范场。即数学系上是一束矢量空间,用一个线性群来缝住的。电磁场的重要推广,是Yang-Mills的规范场论。杨先生的伟大贡献就是在SU(2)(special unitary group in two variables)情形下得到物理意义明确的规范场,即同位旋(isospin)规范场,这种将数学现象给以物理的解释,是件了不起的工作,因为以往的Maxwell场论是一个可交换的群。现在变为在SU(2),群是不能交换的。而实际上,物理中找到了这样的场,这是科学上一个伟大的发展。数学家可以自豪的是,物理学家所需的几何观念和工具,在数学上已经发展了。

    杨先生之所以有这么大的成就,其中一个很重要的,很了不起的原因是除了物理的感觉以外,他有很坚实的数学基础。他能够在这大堆复杂的方程中看出某些规律,它们具有某种基本的数学性质。Yang-Mills方程的数学基础是纤维丛。这种观念Dirac就曾有过。Dirac的一篇基本论文中就讲到这种数学。但Dirac没有数学的工具。所以他在讲这种观念时,不但数学家不懂,就连物理学家也不懂。不过,其中有一个到现在还未解决的物理含义,即有否磁单极(magnetic monople)。可能会有。就是说,有否这样的场,它的曲率不等于0(曲率是度量场的复杂性的)?物理上要是发现了这种场,会是件不得了的事实。这些观念的数学不简单。

    Yang-Mills方程反过来影响到拓扑。现在的基础数学中,所谓低维拓扑(二维,三维,四维)非常受人注意。因为物理空间是四维空间。而四维空间有许多奇妙的性质。我们知道代数几何,曲线论,复变函数论等许多基础数学理论是二维拓扑。而现在必到四维,四维有spinor理论,有quantum结构。四维与物理更接近。它的结构是Lorentz结构,而不是Riemann结构。这方面有很多工作可做。根据Yang-Mills方程,对于四维拓扑,Atiyah的学生英国数学家Simon Donaldson有很重要的贡献。其中有一个结果就是利用Yang-Mills方程证明四维Euclid空间R4有无数微分结构与其标准结构不同。这一结果最近又由Seiberg-Witten的新方程大大的简化了。这是最近拓扑在微分几何,理论物理应用方面最引人注意的进展。

    二维流形的发展有一段光荣的历史,牵涉到许多深刻的数学,可以断言,三维,四维流形将更为丰富和神妙。

5.球装问题(Sphere Packing)

    如何把一定的空间装得最紧,显然是一个实际而重要的问题。项武义教授最近在这方面做了很重要的工作。这里先介绍一个有关的问题:围着一个球,可以放几个同样大小的球?我们不妨假定球的半径为一,即单位球。在平面情形,绕一单位圆我们显然可以放6个单位圆。而在三维空间的情况则更为复杂。如果把单位球绕单位球相切,不难证明,12个球是放得进的。这时虽然还剩下许多空间,但不可能放进第13个球。要证明这一结论并不容易。当年Newton与Gregory有个讨论。Newton 说第13个球装不进,Gregory说也许可以。这个争论长期悬而未决。一直到1953年,K.Schutte和B.L.van der Waerden才给了一个证明。这个证明是很复杂的。

    一个更自然的问题是怎样把一个立方体空间用大小相同的球装得最紧。衡量装得是否紧凑的尺度是密度(density),即所装的球的总的体积和立方体空间的体积的比例。

    Kepler于1611年提出了一个猜想:他认为立方体的球装的密度不会大于π/(181/2).
r />    项武义说他证明了这个猜想。可是有人(Gabor Fejes Toth)认为他的证明不完全,甚至有人(Thomas L.Hales)说是错误的。”Mathematical Intelligencer”这个杂志上(1995年),有关于这一问题的讨论,项武义有个答复。Toth 是匈牙利数学家,三代人搞同一个课题。匈牙利数学很发达,在首都布达佩斯有个200多人的几何研究所。我不知道几何中是否有这么多重要的问题需要这么多人去做。最年轻的Toth在“Mathematics Reviews”中有篇关于项的文章的评论。他说项的文章有些定理没有详细的证明。天下的事情就是这样。做重要工作有争议的时候,便产生一些有趣的现象。不过他觉得项的意思是对的。不但项的意思是对的,甚至表示这个意思他从前也有。最近项武义抒他认为没有的证明都有写出来了。

    最主要的,我要跟大家说的是立体几何在数学中是很重要而因难的部分。即使平面几何也可能很难。到了立体时,则更为复杂。近年来对碳60(C60)的研究显示了几何在化学中的应用。多面体图形的几何性质对固态物理也有重大的作用。。球装不过是立体几何的一个问题。立体几何是大有前途的。

6.Finsler几何

    最近经我鼓励,Finsler几何有重大发展,作简要报告如下:

    在(x,y)平面上设积分s = ∫ab F(x,y,dy/dx)dx其中y是x的未知函数。求这个积分的极小值,就是第一个变分学的问题。称积分s为弧长,把观念几何化,即得Finsler几何。

    Gauss看出,在特别情形:

    F2 =E(x,y) + 2F(x,y) y’ +G(x,y)y’2 ,y’=dy/dx其中E,F,G为x,y的函数,几何性质特别简单。1854年,Riemann的讲演讨论了整个情形,创立了Riemann-Finsler几何。百余年来,Riemann几何在物理中有重要的应用,而整体Riemann几何的发展更是近代数学的核心部分。

    Riemann的几何基础包含Finsler几何。我们最近几年的工作,把Riemann几何的发展,局部的和整体的,完全推广到Finsler几何,而且很简单。因此,我觉得以后的微分几何课或Riemann几何课都应该讲一般情形.最近有几个拓扑问题.最主要的一个是Riemann流形的一个重要性质,即英国数学家Hodge的调和积分。现在有2个年轻人,一个是David Bao, 另一个是他的美国学生,抒这个Hodge的调和积分推广到了Finsler情形。这将是微分几何的一块新园地,预料前景无限。1995年夏在美国西雅图有一Finsler几何的国际会议。其论文集已于今年由美国数学会出版.

    Finsler 几何在1900年有名的Hilbert演讲中是第23个问题。

7.中国的数学

    数学研究的最高标准是创造性:要达到前人未到的境界,要找着最深刻的关键。从另一点看,数学的范围,是无垠的。我愿借此机会介绍一下科学出版社从俄文翻译的《数学百科全书》,全书5大卷,每卷约千页。中国能出版这样的巨著,即是翻译,也是一项可喜的在就。这是一部十分完备的百科全书,值得赞扬的。

    对着如此的学问大海,入门必须领导,便需要权威性的学校和研究所。数学是活的,不断有杰出的贡献,令人赞赏佩服。但一个国家,比较可以集中某些方面,不必完全赶时髦。当年芬兰的复变函数论,波兰的纯粹数学,都是专精一门而有成就的例子。

    中国应该发展实力较强的方面。但由百科全书的例子,可看出中国的数学是全面的。这是一个可喜的现象。

    中国的财富在“人民”。中国的数学政策,除了鼓励尖端的研究以外,应该用来提高一般的数学水平。我有两个建议:(1)设立数学讲座,待遇从优,其资格可能是对数学发展有重大贡献的人;(2)设立新的数学中心,似乎成都,西安,广州都是可能的地点。中心应有相当的经费,部分可由地方负担,或私人筹措。近年因为国家开放,年轻人都想经商赚钱,当然国家社会需要这样的人。但是做科学的乐趣是一般不能理解的。在科学上做了基本的贡献,有历史的意义。我想对于许多人,这是一项了不得的成就。在岗位上专心学问,提携后进,“得天下之英才而教育之“,应该是十分愉快的事情。

    一个实际的问题,是个人应否读数学。Hardy 说,一个条件是看你是否比老师强。这也许太强一些。我想学习应不觉困难,读名著能很快与作者联系,都是测验。数学是小科学,可以关起门来做。在一个多面竞争的社会中,是一项有优点的职业,即使你有若干能力。

    中国的数学有相当水平。年来政治多变,达此情况,足风中华民族的勤劳本质。从前一个数学家的最高标准,是从国外名大学获得博士学位。我们国家现在所包需做的,是充实各大学的研究院,充实博士学位,人才由自己训练。

让孩子享用一生的6个好习惯

摘要:我国著名青少年教育家孙云晓先生曾说:“好习惯对儿童来说是命运的主宰,是成功的轨道,是终身的财富,是人生的格调”。……

我国著名青少年教育家孙云晓先生曾说:“好习惯对儿童来说是命运的主宰,是成功的轨道,是终身的财富,是人生的格调”。因此,作为父母,一定要在孩子的习惯培养上下大功夫。培养孩子的良好习惯可从以下几个方面做起:

(一)生活习惯

生活是人生第一课,也是最基本的课程,生活习惯的好坏,不仅影响幼儿的身心健康而且也是幼儿综合素质的体现。它饮食、 起居、排便、卫生等习惯,做到按时睡眠、起床、安静睡眠并有正确的睡姿,不挑食、不偏食、细嚼慢咽,饭前便后正确洗手、早晚刷牙,饭后漱口等。父母要根据 孩子的年龄特点,适当为孩子立规矩,如:玩具玩完后必须放回原处,逐渐养成自己的东西自己整理和爱清洁,讲卫生,有条理的好习惯。

(二)文明礼貌习惯

礼貌看起来是种外在行为的表现,实际上它反映着人的内心修养,体现一个人自尊和尊重他人的意识。父母要教育孩子,学习使用文明礼貌用语,如“您好 ”、“请”、“谢谢”、“对不起”、“请原谅”。同时,要注意培养孩子的文明举止,见人要热情打招呼,别人问话要先学会倾听,并有礼貌地回答,保持服装整 洁,站有站相,坐有坐相。

(三)道德习惯

养成良好的道德习惯,幼儿才能和别人友好相处,积极追求美好的事物,自觉遵守社会行为规范,具有高度责任感,将来才能成为社会上成熟可敬的人。它包 括各种行为规则,尊敬关爱长辈,不随地地大小便、不损坏花草、树木、爱护公共财务,遵守交通规则,能换位思考、团结友爱等等。

(四)学习习惯

良好的学习习惯对幼儿的学习兴趣与学习成绩有很大的影响,与幼儿的成材直接相关。它包括自主学习、合作学习、探究性学习。学习好的孩子学习习惯都比 较好,而学习不好的孩子多数并不是因为脑子笨,而是没有良好的学习习惯。如:不长时间看电视、玩电脑游戏,不需要父母的督促、陪伴能自觉完成学习任务,学 习专心认真,经常进行广泛的阅读,知道珍惜时间,什么时间做什么事情等。

(五)思维习惯

良好的思维习惯有助于孩子从正确的角度和方面思考问题,有助于孩子能力的锻炼,知识的获取以及运用所学的知识灵活的解决问题。如:感觉接触了解新鲜事物,善于观察,勤于动脑,遇到问题能独立思考和解决。特别是要具有创新精神和创新能力。

(六)劳动习惯

培养孩子爱惜劳动成果,孩子劳动不是为了创造物质和精神财富,而是为了培养初步的劳动习惯,促进孩子身心健康成长。要求自己能做的事情自己做,自己穿脱衣服、学着铺床叠被等,另外帮父母干些家务活,如:帮助摆碗筷、擦桌、扫地、倒垃圾等等。

值得注意的是,在培养孩子各种良好习惯的同时,父母首先要转变自己的观念,增长培养意识,提高自身素质,以身作则。在进行培养时还要注意方式方法,坚持不懈,严格要求。总而言之,播下一种行动,收获一种习惯;播下一种习惯,收获一种命运。

数学不是“数”学

          “数学是一门研究数量关系和空间形式的科学的说法在中国曾经十分流行,这可能与恩格斯著作的长期影响有关。对于数学,今天人们更加认同于如下的说法:

  

  数学是一个完全自成体系的知识领域…数学仅仅讨论它本身想象中的实体及关系(《科学技术百科全书》[麦格劳-希尔图书公司]第1卷数学,科学出版社1980,235-236页);

  

   到1900年,数学已经从实在性中分裂出来了;它已经明显地而且无可挽回地失去了它对自然界真理的所有权,因而变成了一些没有意义的东西的任意公理的必然推论的随从了( 克莱因《古今数学思想》第4册,上海科学技术出版社1979,111页)。

  

  照此说法,数学就不是学了。然而,数学与生俱来的强大应用性并不因为数学已经从实在性中分裂出来了而有稍微的减弱。既是抽象的又有实在的一面,人们逐渐形成了对数学的主流看法——数学的现状一方面是其内在的统一性,另一方面是外界应用的更高的自觉性,数学的两种趋势是从外部寻求新问题和在内部追求统一(美国国家研究委员会《振兴美国数学——90年代的计划》,叶其孝等译,世界图书出版公司1993),而不再局限于给数学下一个定义。

  

   无理数是一个能恰好地描述数学特征的案例。从数学发展史看,人类对无理数的发蒙始于古希腊毕达哥拉斯(Pythagoras,公元前582-497)学 派,但二千四百年后才产生包括无理数在内的实数严格定义;从当今教育的知识体系看,学生在初中阶段开始接触无理数,直到大学毕业却仍然不明白无理数的实质 含义。历史与现实两者的契合正好说明无理数的两面特征,应用性使得它是常见的数学工具之一,而抽象性又使所有非数学工作者不能真正认识它。

  

  数系的扩张过程以自然数为基础,德国数学家克罗内克(Kronecker,1823-1891)说上帝创造了整数,其它一切都是人造的(克莱因《古今数学思想》第4册,上海科学技术出版社1979,41页)。零与自然数的产生源于人类在生存活动中的原始冲动,这一推测想来不会有问题,人的双手有十指与十进制的广泛使用也当然有密切关系;

  

  类似于 2+3=5 的事实产生了加法的概念,然而2加上几会等于1呢?由此需要定义负数:一个数的负数即它与该数之和等于0;进而定义减法。产生零、负自然数,合称整数;

  

  加法的重复进行产生了乘法,2×3=6 就是三个2相加。然而2乘以几会等于1呢?由此需要定义倒数:一个数的倒数即它与该数之积等于1,进而定义除法,产生既约分数,合称有理数。

 

   以上过程不论用抽象的数学语言还是通俗语言来描述都容易为人接受,可以说由于计数、测量的需要而扩大了数系。

  

  最早出现的无理数也与计数、测量有关。乘法的重复进行产生了乘方,23 就是三个2相乘,然而哪个数的平方会等于2呢?毕达哥拉斯学派提出了这个问题,边长为1的正方形的对角线的长度不是既约分数,后来用√2表示对角线的长度,无理数的概念初步形成。

  

   以下是关于√2不是有理数的一个证明,载于欧几里德《几何原本》,但据说是更早的毕达哥拉斯学派所作 :设√2是既约分数p/q,即√2=p/q,则2q2=p2,这表明p2是偶数,p也是偶数(否则若p是奇数则p2是奇数),设p=2k,得 q2=2k2,于是q也是偶数,这与p/q是既约分数矛盾。

  

   虽然开方运算可能产生无理数,但仿照上述办法来扩张数系会遇到困难。例如仅用开方定义新的数例如√2,3√2(后来被称为初等无理数)是不够的; (1+√2) 就不能通过对某有理数开方而得,那么(1+√2)是什么?试作一比较,任何有理数总可以乘以某整数而还原成整数,但(1+√2)的任何次乘方却不可能得到 有理数。

 

   考虑到此,容易想到的办法是用有理数的加减乘除、乘方、开方定义新的数,后来被称为复合无理数,显然它包含了初等无理数。毕竟扩张数系的动力之一是使代数方程有解,例如(1+√2)的产生使得方程x2-2x-1=0有解。

  

  但又有新的问题,挪威数学家阿贝尔(Abel,1802-1829)于1825年证明一般五次方程不能只用根式求解,紧接着法国数学家伽罗瓦(Galois,1811-1832)解决方程须有何种性质才可求根式解的问题,复合无理数立即黯然失色。

  

  数学家顽强地推进,索性将新的数系定义为所有有理系数方程的根(后来称为代数数),有理数、初等无理数、复合无理数都被包括在内。数系的扩张本来是从现实需要出发的问题,但现在已经开始变得抽象了,因为代数数中那些不是有理数、初等无理数、复合无理数的究竟什么样子?这不仅不能回答,似乎也并不重要,重要的是这样的确实存在。

  

  不得不面对的烦恼是,一个代数数的描述与运算都必须通过相关的代数方程的系数,而且代数方程的根通常不是唯一的。

  

  彻

各种数学语言的英语翻译

数学 mathematics, maths(BrE), math(AmE)
公理 axiom
定理 theorem
计算 calculation
运算 operation
证明 prove
假设 hypothesis, hypotheses(pl.)
命题 proposition
算术 arithmetic
plus(prep.), add(v.), addition(n.)
被加数 augend, summand
加数 addend
sum
minus(prep.), subtract(v.), subtraction(n.)
被减数 minuend
减数 subtrahend
remainder
times(prep.), multiply(v.), multiplication(n.)
被乘数 multiplicand, faciend
乘数 multiplicator
product
divided by(prep.), divide(v.), division(n.)
被除数 dividend
除数 divisor
quotient
等于 equals, is equal to, is equivalent to
大于 is greater than
小于 is lesser than
大于等于 is equal or greater than
小于等于 is equal or lesser than
运算符 operator
平均数mean
 
算术平均数arithmatic mean
几何平均数geometric mean  n个数之积的n次方根 
倒数(reciprocal x的倒数为1/x 
有理数 rational number
无理数 irrational number
实数 real number
虚数 imaginary number
数字 digit
number
自然数 natural number
整数 integer
小数 decimal
小数点 decimal point
分数 fraction
分子 numerator
分母 denominator
ratio
positive
negative
null, zero, nought, nil
十进制 decimal system
二进制 binary system
十六进制 hexadecimal system
weight, significance
进位 carry
截尾 truncation
四舍五入 round
下舍入 round down
上舍入 round up
有效数字 significant digit
无效数字 insignificant digit
代数 algebra
公式 formula, formulae(pl.)
单项式 monomial
多项式 polynomial, multinomial
系数 coefficient
未知数 unknown, x-factor, y-factor, z-factor
等式,方程式 equation
一次方程 simple equation
二次方程 quadratic equation
三次方程 cubic equation
四次方程 quartic equation
不等式 inequation
阶乘 factorial
对数 logarithm
指数,幂 exponent
乘方 power
二次方,平方 square
三次方,立方 cube
四次方 the power of four, the fourth power
n
次方 the power of n, the nth power
开方 evolution, extraction
二次方根,平方根 square root
三次方根,立方根 cube root
四次方根 the root of four, the fourth root
n
次方根 the root of n, the nth root
sqrt(2)=1.414 
sqrt(3)=1.732 
sqrt(5)=2.236
常量 constant
变量 variable
坐标系 coordinates
坐标轴 x-axis, y-axis, z-axis
横坐标 x-coordinate
纵坐标 y-coordinate
原点 origin
 
象限quadrant 
截距(有正负之分)intercede 
(方程的)解solution
几何geometry
point
线 line
plane
solid
线段 segment
射线 radial
平行 parallel
相交 intersect
angle
角度 degree
弧度 radian
锐角 acute angle
直角 right angle
钝角 obtuse angle
平角 straight angle
周角 perigon
base
side
height
三角形 triangle
锐角三角形 acute triangle
直角三角形 right triangle
直角边 leg
斜边 hypotenuse
勾股定理 Pythagorean theorem
钝角三角形 obtuse triangle
不等边三角形 scalene triangle
等腰三角形 isosceles triangle
等边三角形 equilateral triangle
四边形 quadrilateral
平行四边形 parallelogram
矩形 rectangle
length
width
周长 perimeter
面积 area
相似 similar
全等 congruent
三角 trigonometry
正弦 sine
余弦 cosine
正切 tangent
余切 cotangent
正割 secant
余割 cosecant r />反正弦 arc sine
反余弦 arc cosine
反正切 arc tangent
反余切 arc cotangent
反正割 arc secant
反余割 arc cosecant
集合aggregate
元素 element
空集 void
子集 subset
交集 intersection
并集 union
补集 complement
映射 mapping
函数 function
定义域 domain, field of definition
值域 range   
 
单调性 monotonicity
奇偶性 parity
周期性 periodicity
图象 image
数列,级数 series
微积分 calculus
微分 differential
导数 derivative
极限 limit
无穷大 infinite(a.) infinity(n.)
无穷小 infinitesimal
积分 integral
定积分 definite integral
不定积分 indefinite integral
复数 complex number
矩阵 matrix
行列式 determinant

circle
圆心 centre(BrE), center(AmE)
半径 radius
直径 diameter
圆周率 pi
arc
半圆 semicircle
扇形 sector
ring
椭圆 ellipse
圆周 circumference
轨迹 locus, loca(pl.)
平行六面体 parallelepiped
立方体 cube
七面体 heptahedron
八面体 octahedron
九面体 enneahedron
十面体 decahedron
十一面体 hendecahedron
十二面体 dodecahedron
二十面体 icosahedron
多面体 polyhedron
旋转 rotation
axis
sphere
半球 hemisphere
底面 undersurface
表面积 surface area
体积 volume
空间 space
双曲线 hyperbola
抛物线 parabola
四面体 tetrahedron
五面体 pentahedron
六面体 hexahedron

菱形 rhomb, rhombus, rhombi(pl.), diamond
正方形 square
梯形 trapezoid
直角梯形 right trapezoid
等腰梯形 isosceles trapezoid
五边形 pentagon
六边形 hexagon
七边形 heptagon
八边形 octagon
九边形 enneagon
十边形 decagon
十一边形 hendecagon
十二边形 dodecagon
多边形 polygon
正多边形 equilateral polygon

相位 phase
周期 period
振幅 amplitude
内心 incentre(BrE), incenter(AmE)
外心 excentre(BrE), excenter(AmE)
旁心 escentre(BrE), escenter(AmE)
垂心 orthocentre(BrE), orthocenter(AmE)
重心 barycentre(BrE), barycenter(AmE)
内切圆 inscribed circle
外切圆 circumcircle
统计 statistics
平均数 average
加权平均数 weighted average
方差 variance
标准差 root-mean-square deviation, standard deviation
比例 propotion
百分比 percent
百分点 percentage
百分位数 percentile
排列 permutation
组合 combination
概率,或然率 probability
分布 distribution
正态分布 normal distribution
非正态分布 abnormal distribution
图表 graph
条形统计图 bar graph
柱形统计图 histogram
折线统计图 broken line graph
曲线统计图 curve diagram
扇形统计图 pie diagram

非标准分析

20世纪60年代出现了非标准分析,它是利用数理逻辑方法

来探讨和刻画微积分的理论基础,引起了人们的重视,为数学开辟了新的研究领域。

通 常的数学分析,又称为标准分析,其主要部分是微积分学,它是以现实世界中的连续变量及其相互关系为研究对象的数学分支。它的基本概念是在实数系范围内取值 的变量和函数的概念,它的研究方法是极限理论。所以,标准分析是指十九世纪柯西、魏尔斯特拉斯等人用极限方法所建立的微积分理论,他们在数学的证明中用极 限方法代替了无限小量方法,对微积分理论作了较严谨的逻辑论证,他们的理论比十七、十八世纪的微积分理论前进了一大步。这表现在它创立了一系列判别法则, 发现了关于函数的连续性、可微性的一些重要结果。

围绕微积分的一场争论曾在18世纪初激烈进行。话可从牛顿时代说起。试看求y=x2的导数。先取无穷小量⊿x,则⊿y=(x+x)2-x2=2xx+x2,即⊿y/x=2x+x。又因为⊿x是无穷小量可忽略不计,即得y/=2x。无穷小量⊿x在这里既不是0(可用⊿x 去除),却又等于0(最后忽略不计,⊿x就消失了)。这套办法似乎有点像变魔术。马克思称略去⊿x是“暴力镇压”,大主教贝克莱则呼之为“逝去量的鬼魂”或“已死量的幽灵”(ghosts of departed quantities)。这种把无穷小神秘化的做法确实不太好,“招之即来,呼之即去”,完全是神差鬼使的一套。然而不管如何攻击,它的运算结果却总是对的。大数学家欧拉曾用这种不严格的微积分做出了辉煌的成果。渐渐地人们也不再有异议了。

到了19世纪,法国数学家柯西认识到,结论正确并不意味着体系完整,于是着手使“无穷小分析”严格化。这就是著名ε—N和ε—δ说法,这个说法到19世纪70年代才由魏尔斯特拉斯完成。这种寓动于静,表示极限过程的描述,把神秘化的外衣去掉了:所谓无穷小,不过是极限为0的变量而已。它不是“一个数”,而是一个变化过程,即不断向常数0以 误差可任意小进行逼近的一个变量。它的表示完全是算术化了的,ε,δ等的关系,明确无误,一目了然。然而,“无穷小”不是数,不能直接除,也不能忽略不 计,生动活泼的运算淹没在形式的海洋里,人们抱怨微积分越来越难学。工程学家不理会对无穷小的批评,仍然沿用牛顿—欧拉时代的方便做法,把“无穷小”拿在 手里不肯丢掉。不过,“无穷小”在数坛上终究呆不住,20世纪以来,几乎销声匿迹,偶尔提到它,也不过是习惯性的名词介绍而已。

1960年秋事情有了转机。数理逻辑学家阿伯拉罕·罗宾逊(Abraham Robinson,1918~1974,生于德国的犹太人,1962年去美国)在普林斯顿大学的一次报告中指出:现代数理逻辑的概念和方法能为“无穷小”和“无穷大”作为“数”进入微积分提供合适的框架。1961年,罗宾逊在荷兰阿姆斯特丹皇家科学院学报上发表文章,题为《非标准分析》,表明这一新数学分支已经呱呱坠地了。

    在标准分析里,研究的有理数和无理数的集合称为实数集合。实数集合与直线上的点一一对应,实数的集合是连续的。在非标准分析里,罗宾逊的基本想法是:无穷 小既然不是一个“数”,即在实数集合中没有它的位置,那么我们是否能把实数集合扩大,使之成为新的超实数集合,而微积分在超实数集合中实施时,能够保持当 年牛顿—欧拉时代的直观和简便易行?罗宾逊用数理逻辑中模型论的方法做到了这一点。在超实数集合中,每一通常的实数是标准数,它的周围聚集着许多“无穷小 ”(非标准实数),就像电子围绕原子核一样。在超实数集合中没有阿基米德性质,即任取整数α和β,不一定都能找到自然数n,使nα>β,因为无穷小是大于0的非标准实数,它的任意整倍数仍是无穷小,不可能大于正标准数β。

从 “宏观”上看,超实数集合的数轴与实数集合的数轴一样。但是从“微观”上看并不相同,在超实数轴上的每一点内,有许多非标准实数。这些非标准实数彼此相差 无限小量,形成了一个有内部结构的点,称为“单子”,每个“单子”只有一个标准实数。从标准实数来看,点与点是连续的,从超实数轴来看,点与点是连续与间 断的对立统一。

从它的物理意义来说,如一条光线,从“宏观”看来,它是连续的,从“微观”看来不仅不连续,而且不均匀,量子理论证明了光具有波动和粒子二像性,正表明了光是连续与不连续的对立统一。

非 标准分析为我们打开了一个新的世界——“点”的世界。任何一个“点”,都是一个“世界”;任何一个世界,都是一个“点”,正如天外有天一样,点内又有点。 在太阳系中,地球是一个“点”,它是有结构的,可分的,同样分子可作为一个“点”,它有结构,是可分的。从数学上说,由更小的层次看来,在任何一个“点” 中,都可以建立坐标系,因为它是一个“世界”,由

数学学科分类标准

    一份中国学科分类国家标准,看看,就一个数学中的一个分支一个人一辈子都研究不完。其中也说明了,应用数学归为每个具体应用学科里面。除了专门数学专业的,其他专业的也只是学了其中在本学科需要的一小部分而已。

110 数学
  a.. 110.11 数学史
  b.. 110.14 数理逻辑与数学基础
    a.. 110.1410 演绎逻辑学 亦称符号逻辑学
    b.. 110.1420 证明论 亦称元数学
    c.. 110.1430 递归论
    d.. 110.1440 模型论
    e.. 110.1450 公理集合论
    f.. 110.1460 数学基础
    g.. 110.1499 数理逻辑与数学基础其他学科
  c.. 110.17 数论
    a.. 110.1710 初等数论
    b.. 110.1720 解析数论
    c.. 110.1730 代数数论
    d.. 110.1740 超越数论
    e.. 110.1750 丢番图逼近
    f.. 110.1760 数的几何
    g.. 110.1770 概率数论
    h.. 110.1780 计算数论
    i.. 110.1799 数论其他学科
  d.. 110.21 代数学
    a.. 110.2110 线性代数
    b.. 110.2115 群论
    c.. 110.2120 域论
    d.. 110.2125 李群
    e.. 110.2130 李代数
    f.. 110.2135 Kac-Moody代数
    g.. 110.2140 环论 包括交换环与交换代数,结合环与结合代数,非结合环与非结
合代数等
    h.. 110.2145 模论
    i.. 110.2150 格论
    j.. 110.2155 泛代数理论
    k.. 110.2160 范畴论
    l.. 110.2165 同调代数
    m.. 110.2170 代数K理论
    n.. 110.2175 微分代数
    o.. 110.2180 代数编码理论
    p.. 110.2199 代数学其他学科
  e.. 110.24 代数几何学
  f.. 110.27 几何学
    a.. 110.2710 几何学基础
    b.. 110.2715 欧氏几何学
    c.. 110.2720 非欧几何学 包括黎曼几何学等
    d.. 110.2725 球面几何学
    e.. 110.2730 向量和张量分析
    f.. 110.2735 仿射几何学
    g.. 110.2740 射影几何学
    h.. 110.2745 微分几何学
    i.. 110.2750 分数维几何
    j.. 110.2755 计算几何学
    k.. 110.2799 几何学其他学科
  g.. 110.31 拓扑学
    a.. 110.3110 点集拓扑学
    b.. 110.3115 代数拓扑学
    c.. 110.3120 同伦论
    d.. 110.3125 低维拓扑学
    e.. 110.3130 同调论
    f.. 110.3135 维数论
    g.. 110.3140 格上拓扑学
    h.. 110.3145 纤维丛论
    i.. 110.3150 几何拓扑学
    j.. 110.3155 奇点理论
    k.. 110.3160 微分拓扑学
    l.. 110.3199 拓扑学其他学科
  h.. 110.34 数学分析
    a.. 110.3410 微分学
    b.. 110.3420 积分学
    c.. 110.3430 级数论
    d.. 110.3499 数学分析其他学科
  i.. 110.37 非标准分析
  j.. 110.41 函数论
    a.. 110.4110 实变函数论
    b.. 110.4120 单复变函数论
    c.. 110.4130 多复变函数论
    d.. 110.4140 函数逼近论
    e.. 110.4150 调和分析
    f.. 110.4160 复流形
    g.. 110.4170 特殊函数论
    h.. 110.4199 函数论其他学科
  k.. 110.44 常微分方程
    a.. 110.4410 定性理论
    b.. 110.4420 稳定性理论
    c.. 110.4430 解析理论
    d.. 110.4499 常微分方程其他学科
  l.. 110.47 偏微分方程
    a.. 110.4710 椭圆型偏微分方程
    b.. 110.4720 双曲型偏微分方程
    c.. 110.4730 抛物型偏微分方程
    d.. 110.4740 非线性偏微分方程
    e.. 110.4799 偏微分方程其他学科
  m.. 110.51 动力系统
    a.. 110.5110 微分动力系统
    b.. 110.5120 拓扑动力系统
    c.. 110.5130 复动力系统
    d.. 110.5199 动力系统其他学科
  n.. 110.54 积分方程
  o.. 110.57 泛函分析
    a.. 110.5710 线性算子理论
    b.. 110.5715 变分法
    c.. 110.5720 拓扑线性空间
    d.. 110.5725 希尔伯特空间
    e.. 110.5730 函数空间
    f.. 110.5735 巴拿赫空间
    g.. 110.5740 算子代数
    h.. 110.5745 测度与积分
    i.. 110.5750 广义函数论
    j.. 110.5755 非线性泛函分析
    k.. 110.5799 泛函分析其他学科
  p.. 110.61 计算数学
    a.. 110.6110 插值法与逼近论
    b.. 110.6120 常微分方程数值解
    c.. 110.6130 偏微分方程数值解
    d.. 110.6140 积分方程数值解
    e.. 110.6150 数值代数
    f.. 110.6160 连续问题离散化方法
    g.. 110.6170 随机数值实验
    h.. 110.6180 误差分析
    i.. 110.6199 计算数学其他学科
  q.. 110.64 概率论
    a.. 110.6410 几何概率
    b.. 110.6420 概率分布
    c.. 110.6430 极限理论
    d.. 110.6440 随机过程 包括正态过程与平稳过程、点过程等
    e.. 110.6450 马尔可夫过程
    f.. 110.6460 随机分析
    g.. 110.6470 鞅论
    h.. 110.6480 应用概率论 具体应用入有关学科
    i.. 110.6499 概率论其他学科
  r.. 110.67 数理统计学
    a.. 110.6710 抽样理论 包括抽样分布、抽样调查等
    b.. 110.6715 假设检验
    c.. 110.6720 非参数统计
    d.. 110.6725 方差分析
    e.. 110.6730 相关回归分析
    f.. 110.6735 统计推断
    g.. 110.6740 贝叶斯统计 包括参数估计等
    h.. 110.6745 试验设计
    i.. 110.6750 多元分析
    j.. 110.6755 统计判决理论
    k.. 110.6760 时间序列分析
    l.. 110.6799 数理统计学其他学科
  s.. 110.71 应用统计数学
    a.. 110.7110 统计质量控制
    b.. 110.7120 可靠性数学
    c.. 110.7130 保险数学
    d.. 110.7140 统计模拟
  t.. 110.7199 应用统计数学其他学科
  u.. 110.74 运筹学
    a.. 110.7410 线性规划
    b.. 110.7415 非线
性规划
    c.. 110.7420 动态规划
    d.. 110.7425 组合最优化
    e.. 110.7430 参数规划
    f.. 110.7435 整数规划
    g.. 110.7440 随机规划
    h.. 110.7445 排队论
    i.. 110.7450 对策论 亦称博奕论
    j.. 110.7455 库存论
    k.. 110.7460 决策论
    l.. 110.7465 搜索论
    m.. 110.7470 图论
    n.. 110.7475 统筹论
    o.. 110.7480 最优化
    p.. 110.7499 运筹学其他学科
  v.. 110.77 组合数学
  w.. 110.81 离散数学
  x.. 110.84 模糊数学
  y.. 110.87 应用数学 具体应用入有关学科
  z.. 110.99 数学其他学科

Awk学习笔记

1. awk简介

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和 动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这 样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出 (屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的,在 linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。

2. awk命令格式和选项

2.1. awk的语法有两种形式

  • awk [options] ‘script’ var=value file(s)

  • awk [options] -f scriptfile var=value file(s)

2.2. 命令选项

-F fs or –field-separator fs

指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。

-v var=value or –asign var=value

赋值一个用户定义变量。

-f scripfile or –file scriptfile

从脚本文件中读取awk命令。

-mf nnn and -mr nnn

对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

-W compact or –compat, -W traditional or –traditional

在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。

-W copyleft or –copyleft, -W copyright or –copyright

打印简短的版权信息。

-W help or –help, -W usage or –usage

打印全部awk选项和每个选项的简短说明。

-W lint or –lint

打印不能向传统unix平台移植的结构的警告。

-W lint-old or –lint-old

打印关于不能向传统unix平台移植的结构的警告。

-W posix

打开兼容模式。但有以下限制,不识别:\x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。

-W re-interval or –re-inerval

允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。

-W source program-text or –source program-text

使用program-text作为源代码,可与-f命令混用。

-W version or –version

打印bug报告信息的版本。

3. 模式和操作

awk脚本是由模式和操作组成的:

pattern {action} 如$ awk ‘/root/’ test,或$ awk ‘$3 < 100′ test

awk内置字符串函数详解(转)

awk提供了许多强大的字符串函数,见下表:
awk内置字符串函数

gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

详细说明一下各个函数的使用方法。

gsub函数有点类似于sed查找和替换。它允许替换一个字符串或字符为另一个字符串或字符,并以正则表达式的形式执行。第一个函数作用于记录$0,第二个gsub函数允许指定目标,然而,如果未指定目标,缺省为$0。
index(s,t)函数返回目标字符串s中查询字符串t的首位置。length函数返回字符串s字符
长度。match函数测试字符串s是否包含一个正则表达式r定义的匹配。split使用域分隔符fs将
字符串s划分为指定序列a。sprint函数类似于printf函数(以后涉及),返回基本输出格式fmt的
结果字符串exp。sub(r,s)函数将用s替代$0中最左边最长的子串,该子串被(r)匹配。
sub(s,p)返回字符串s在位置p后的后缀。substr(s,p,n)同上,并指定子串长度为n。
现在看一看awk中这些字符串函数的功能。

1.gsub
要在整个记录中替换一个字符串为另一个,使用正则表达式格式,/目标模式/,替换模式
/。例如改变学生序号4842到4899:

$ awk ‘gsub(’4842/, 4899) {print $0}’ grade.txt
J.Troll 07/99 4899 Brown-3 12 26 26

2.index
查询字符串s中t出现的第一位置。必须用双引号将字符串括起来。例如返回目标字符串
Bunny中ny出现的第一位置,即字符个数。

$ awk ‘BEGIN {print index(“Bunny”, “ny”)} grade.txt
4

3.length
返回所需字符串长度,例如检验字符串J.Troll返回名字及其长度,即人名构成的字符个
数。

$ awk ‘$1==”J.Troll” {print length($1) ” “$1}’ grade.txt
7 J.Troll

还有一种方法,这里字符串加双引号。

$ awk ‘BEGIN {print length(“A FEW GOOD MEN”)}’
14

4.match
match测试目标字符串是否包含查找字符的一部分。可以对查找部分使用正则表达式,返
回值为成功出现的字符排列数。如果未找到,返回0,第一个例子在ANCD中查找d。因其不
存在,所以返回0。第二个例子在ANCD中查找D。因其存在,所以返回ANCD中D出现的首位
置字符数。第三个例子在学生J.Lulu中查找u。

$ awk ‘{BEGIN {print match(“ANCD”, /d/)}’
0
$ awk ‘{BEGIN {print match(“ANCD”, /C/)}’
3
$ awk ‘$1==”J.Lulu” {print match($1, “u”)} grade.txt
4

5.split
使用split返回字符串数组元素个数。工作方式如下:如果有一字符串,包含一指定分隔
符-,例如AD2-KP9-JU2-LP-1,将之划分成一个数组。使用split,指定分隔符及数组名。此
例中,命令格式为(“AD2-KP9-JU2-LP-1″,parts_array,”-”),split然后返回数组下标数,这
里结果为4。
还有一个例子使用不同的分隔符。

$ awk ‘{BEGIN {print split(“123#456#678″, myarray, “#”)}’
3

这个例子中,split返回数组myarray的下标数。数组myarray取值如下:

Myarray[1]=”123″
Myarray[2]=”456″
Myarray[3]=”789″

6.sub
使用sub发现并替换模式的第一次出现位置。字符串STR包含‘popedpopopill’,执行下
列sub命令sub(/op/,”op”,STR)。模式op第一次出现时,进行替换操作,返回结果如下:
‘pOPedpopepill’。
假如grade.txt文件中,学生J.Troll的记录有两个值一样,“目前级别分”与“最高级别分”。只
改变第一个为29,第二个仍为24不动,操作命令为sub(/26/,”29″,$0),只替换第一个出现
24的位置。

$ awk ‘$1==”J.Troll” sub(/26/, “29″, $0)’ grade.txt
L.Troll 07/99 4842 Brown-3 12 29 26
L.Transley 05/99 4712 Brown-2 12 30 28

7.substr
substr是一个很有用的函数。它按照起始位置及长度返回字符串的一部分。例子如下:

$ awk ‘$1==”L.Transley” {print substr($1, 1,5)}’ grade.txt
L.Tan
上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。
如果给定长度值远大于字符串长度, awk将从起始位置返回所有字符,要抽取L.Tansley的姓,只需从第3个字符开始返回长度为7。可以输入长度99,awk返回结果相同。

$ awk ‘{$1==”L.Transley” {print substr($1, 3,99)}’ grade.txt
Transley

substr的另一种形式是返回字符串后缀或指定位置后面字符。这里需要给出指定字符串及其返回字串的起始位置。例如,从文本文件中抽取姓氏,需操作域1,并从第三个字符开始:

$ awk ‘{print substr($1, 3)}’ grade.txt
Troll
Transley

还有一个例子,在BEGIN部分定义字符串,在END部分返回从第t个字符开始抽取的子串。

$ awk ‘{BEGIN STR=”A FEW GOOD MEN”} END {print substr(STR,7)) grade.txt
GOOD MEN

8.从shell中向awk传入字符串
awk脚本大多只有一行,其中很少是字符串表示的,这一点通过将变量传入awk命令行会变得很容易。现就其基本原理讲述一些例子。
使用管道将字符串stand-by传入awk,返回其长度。

$ echo “Stand-by” | awk ‘{print length($0)}’
8

设置文件名为一变量,管道输出到awk,返回不带扩展名的文件名。

$ STR=”mydoc.txt”
$ echo $STR | awk ‘{print subst($STR, 1, 5)}’
mydoc

设置文件名为一变量,管道输出到awk,只返回其扩展名。
$ STR=”mydoc.txt”
$ echo $STR | awk ‘{print substr($STR, 7)}’
txt