您正在查看 "mathematica 探险" 分类下的文章 2010-07-14 11:38 算术真的很难,十个月之后, 这个 fNest[Round[# (1 + r)] - 299576&, 100 M, 240] 终于能算出 37 了。——但不知若干年后,儿子会如何评价他老子的愚钝。
另附 GCC 4.4.1 里 -O3 优化出问题的代码一则。(4.4.1 已经比较老了,4.5 里已无此 bug)
#include <stdio.h>
|
2010-03-19 17:49 一段代码 m 经过编译,运行后,得到的输出与 m 完全相同,则称 m 为 能自我复现的程序。也就是说,这样的代码 m 是其运行环境里的一个“不动点”。
这样的程序在 Mathematica 里很容易写,比如“1”,“a”等等。这还不是最短的:最短的 m 即“没有代码”。
相对更“严肃”一些的自我复制程序是这样的:Print[# <> quote[#]]& @ "Print[# <> quote[#]]& @ "。
其中,quote = "\"" <> # <> "\""&。
C 语言实现起 |
2009-04-15 11:22 但愿能算个 0.1 了。
TDD 在通信里表示时分双工,在软件领域表示“测试驱动式开发”,我再加个“PDT”,“由编程驱动的测试”。
fMap[fSin, fRange[0, 2 iPi, 0.01 iPi]]
iPi = 3.141592653589793;
fSign = If[fEvenQ @ #, 1, -1]&;
fSin2 = Function[{x}, 1.0 fTotal[fMap[fSign @ # x ^ (2 # + 1) / Factorial[2 # + 1] &, fRange[0, 6]]]]; (* now, x is in [0, Pi/2) *)
fSin1 = Function[{x}, If[x > iPi / 2, fSin2[iPi - x], fSin2[x]]];
fSin0 = Function[{x}, If[x > iPi, - fSin1[x - |
2009-04-08 16:42 一首 E 调,120拍/分钟的歌。其中有个小错误,呵呵。
song = {{{0, 1/2}, {1, 1/2}, {2, 1/2}, {3, 1/2}}, {{5, 1}, {6,
1}}, {{0, 1/2}, {b[6], 1/2}, {1, 1/2}, {2, 1/2}}, {{3, 1}, {5,
1}}, {{0, 1/2}, {b[3], 1/2}, {b[5], 1/2}, {b[6], 1/2}}, {{1,
1}, {3, 1}}, {{2, 1/2}, {3, 1/4}, {2, 1/4}, {1, 1/2}, {b[7],
1/2}}, {{b[6], 1}, {b[6], 1/2}, {b[6], 1/2}}, {{b[6], 1/2}, {0,
1/2}, {b[6], 1/2}, {0, 1/2}}}~
Join~{{{b[6], 1/2}, {b[6], 1/2}, {1, 1/2}, {2, |
2009-04-02 18:41
fJoin = Head[#1][Sequence @@ #1, Sequence @@ #2]&;
fAppend = Function[{lst, ele}, fJoin[lst, {ele}]];
fFoldLeft = Function[{f, acc, lst}, If[Length[lst] > 0, fFoldLeft[f, f[acc, First @ lst], Rest @ lst], acc]];
fFoldRight = Function[{f, acc, lst}, If[Length[lst] > 0, fFoldRight[f, f[acc, Left @ lst], Most @ lst], acc]];
fMap = Function[{f, lst}, fFoldLeft[fAppend[#1, f[#2]]&, {}, lst]];
fRange0 = Function[{start, end, step, acc}, If[start <= end, fRange0[start + |
2009-03-19 15:45 fac1、fac2 都能跑,可喜可贺。
fac1 = If[# < 2, 1, # #0[# - 1]]&;
fac2 = If[#1 < 2, #2, #0[#1 - 1, #1 #2]]&;
fac1[1000] 的速度好像比 yacas 里 1000! 的速度还快,呵呵,fac1 可是递归着算的。 |
2009-03-16 18:14 绕了一圈,又回来了。有大整数了。
yamma initialized.
>fac = If[# < 2, 1, # #0[# - 1]]&;
>fac[20]
Out: 2432902008176640000
>
|
2009-02-03 15:32
yamma initialized.
>fac = If[# < 2, 1, # #0[# - 1]]&;
>fac[10]
Out: 3628800
>
|
2008-12-10 13:22 很久没更新博客了。
1. Mathematica 7 已诞生,而我的《Mathematica 探险》却没有太大的进展,从 5.2 折腾到了 7.0。不过,我的心还没死,还有希望。
2. emule 上找了个 1.37G 的 Mathematica 7,下下来一看,真是:有心栽花,花不开;无心插柳,柳成荫。
3. Mathematica 里解析个东西,比如 JSON,速度慢得很,不应该啊。——当然,我想用的是 Erlang 里的 [X | T] 递推形式,有别的更快的方法。我现在很喜欢 Erlang 里的 [X | T] 递推。
4. 预见未来。预见了未来,干预了未来,未来也就变了,预测 |
2008-02-25 17:43 留言里有人问矩阵的鞍点的求法,粗略写一个,仅供参考。
MatrixExtremum[m, Min, {1, -2, 2}]: 求每行最小值的行号、列号。
MatrixExtremum[Transpose[m], Max, {2, -1, 2}]: 求每列最大值的行号、列号。
上述两个集合一交,鞍点就出来了。
MatrixExtremum[m_, f_, pat_] :=
Flatten[MapIndexed[
Partition[Riffle[Flatten@Position[#1, f[#1]], #2[[1]], pat], 2] &,
m], 1];
SaddlePoint[m_] :=
Intersection[MatrixExtremum[m, Min, {1, -2, 2}],
MatrixExtrem |
| | |