2006年5月19日星期五

pdf文件处理工具:pdftk

pdftk是一个处理pdf文件的小工具,可以进行合并pdf文档,提取其中几页成为新pdf文件,加密解密等操作。
  1. 合并多个pdf文件

    pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf
  2. 提取文件某几页合成为新文件

    pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf
  3. 128位加密文件

    pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz
  4. 加密但是允许打印

    pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz allow printing
  5. 解密文件

    pdftk secured.pdf input_pw foopass output unsecured.pdf

2006年5月5日星期五

如何使用Maxima(二)

  1. 三角函数变换

    常用的三角函数变换有下面几种:
    trigexpand
    利用和差化积公式展开
    trigreduce
    利用积化和差等公式变成sincos的和
    trigsimp
    利用sin2(x) + cos2 = 1等公式简化
    trigrat
    简化分数形式
    下面是一些例子:
    (%i1) sin(2*x)/cos(x)+cos(2*x);
                                  sin(2 x)
    (%o1)                         -------- + cos(2 x)
                                   cos(x)
    (%i2) trigexpand(%o1);
                                 2                    2
    (%o2)                   - sin (x) + 2 sin(x) + cos (x)
    (%i3) trigreduce(%o1);
    (%o3)                     sec(x) sin(2 x) + cos(2 x)
    (%i4) trigsimp(%o1);
                              sin(2 x) + cos(x) cos(2 x)
    (%o4)                     --------------------------
                                        cos(x)
    (%i5) trigrat(%);
    (%o5)                         cos(2 x) + 2 sin(x)
    
  2. 微积分

    微分:
    (%i1) f: sqrt(x-1)*exp(2*x^2);
                                                   2
                                                2 x
    (%o1)                         sqrt(x - 1) %e
    (%i2) diff(f, x);
                                                         2
                                             2        2 x
                                          2 x       %e
    (%o2)               4 sqrt(x - 1) x %e     + -------------
                                                 2 sqrt(x - 1)
    (%i3) diff(sin(x)*exp(x^2), x, 2);
                           2             2                 2
                      2   x             x                 x
    (%o3)          4 x  %e   sin(x) + %e   sin(x) + 4 x %e   cos(x)
    
    不定积分:
    (%i4) integrate(%o2, x);
                                           2   log(x - 1)
                                        2 x  - ----------
                                                   2
    (%o4)                     (x - 1) %e
    
    定积分: 从这个例子可以看出,maxima是一个很聪明的代数系统,它不会像其他数学程序那样想当然的默认一个结果,而是主动问你必要的条件,然后给出正确的结果。
    (%i5) integrate(exp(-a*x^2), x, 0, inf);
    Is  a  positive, negative, or zero?
    
    positive;
                                       sqrt(%pi)
    (%o5)                              ---------
                                       2 sqrt(a)
    
    泰勒展开: 这个例子给出函数g的前三阶泰勒展开。
    (%i6) g: sin(2*x)*exp(a*x);
                                      a x
    (%o6)                           %e    sin(2 x)
    (%i7) taylor (g, x, 0, 4);
                                    2       3     3         4
                            2   (3 a  - 4) x    (a  - 4 a) x
    (%o7)/T/     2 x + 2 a x  + ------------- + ------------- + . . .
                                      3               3
    

2006年5月4日星期四

刘再复这样概括巴金

‘文革’结束了,伸冤的伸冤,平反的平反,乌纱帽掉了又带上了,而那些在牛棚里受难的作家与革命家们个个都在讲述自己的苦难过去和向社会索取报酬,甚至讴歌‘二次解放’。只有一个受折磨的灵魂,在寓所的墙角下对过去自己的著作与行为感到深深不安,感到揪心的惭愧,灵魂和双手都在战栗,这就是《真话集》(即《随想录》)的伟大作者……惟一,惟一,Only One!中国的大地这么辽阔,大地上所发生的历史事件这么惨烈,卷入历史运动的人群数亿之众,但我们在大喧哗之后听到的良心呻吟与自我鞭挞却只有一个!

2006年5月3日星期三

如何使用Maxima(一)

Maxima是一个优秀的开放源代码代数运算系统,符号运算能力可以和著名商业数学软件Mathematica相媲美。这里是它的使用方法的一个简介。
  1. 运行和退出

    运行:
    maxima
    进入maxima环境后,会看到开始处有(%i1),这是行标。%i表示输入行,%o表示输出行,后面的数字表示第几个输入或输出。 退出:
    quit();
    可以看出,maxima语法和C语言类似,语句结束需要加分号。maxima里面是要区分大小写的。
  2. 算术运算

    符号+, -, *, /, ^分别表示加、减、乘、除、乘方。maxima是一个精确计算的代数系统,例如分数,开方等运算会保持符号形式,不会被自动转化为小数。
    (%i1) 2/5+3/4;
                                          23
    (%o1)                                 --
                                          20
    
    如果要输出小数,可以用numer命令:
    (%i2) %,numer;
    (%o2)                                1.15
    
    百分号%代表最后一次输出的结果。另外,可以用bfloat输出任意精确度的小数,有效数字位数由变量fpprec控制,默认是16位。
    (%i3) fpprec:100;
    (%o3)                                 100
    (%i4) bfloat(%pi);
    (%o4) 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068b0
    
    (%i3)中的冒号表示赋值。
  3. 代数运算

    多项式展开:
    (%i5) (x^2+2*x*y+3*y^2)^3;
                                     2            2 3
    (%o5)                        (3 y  + 2 x y + x )
    (%i6) expand(%);
                6         5       2  4       3  3       4  2      5      6
    (%o6)   27 y  + 54 x y  + 63 x  y  + 44 x  y  + 21 x  y  + 6 x  y + x
    
    等量代换:
    (%i7) %o6, x=2/z;
                     5        4        3        2
                108 y    252 y    352 y    336 y    192 y   64       6
    (%o7)       ------ + ------ + ------ + ------ + ----- + -- + 27 y
                  z         2        3        4       5      6
                           z        z        z       z      z
    
    提取公分母:
    (%i8) ratsimp(%);
              6  6        5  5        4  4        3  3        2  2
          27 y  z  + 108 y  z  + 252 y  z  + 352 y  z  + 336 y  z  + 192 y z + 64
    (%o8) -----------------------------------------------------------------------
                                             6
                                            z
    
    因式分解:
    (%i9) factor(%);
                                    2  2             3
                                (3 y  z  + 4 y z + 4)
    (%o9)                       ----------------------
                                           6
                                          z
    
    解非线性方程组:
    (%i10) a+b+2*c=0;
    (%o10)                          2 c + b + a = 0
    (%i11) 2*a-b=1;
    (%o11)                            2 a - b = 1
    (%i12) a-2*b*c=5;
    (%o12)                           a - 2 b c = 5
    (%i13) solve([%o10,%o11,%o12],[a,b,c]);
                 sqrt(7) + 1      2 sqrt(7) - 1      sqrt(7) - 14
    (%o13) [[a = -----------, b = -------------, c = -------------],
                      3                 3            4 sqrt(7) - 2
                              sqrt(7) - 1        2 sqrt(7) + 1      sqrt(7) + 14
                       [a = - -----------, b = - -------------, c = -------------]]
                                   3                   3            4 sqrt(7) + 2