Link: http://en.wikipedia.org/wiki/Tupper's_self-referential_formula
code(matlab)
% use the symbolic toolbox to represent the big integer k k = sym(['960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350' ... '718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995' ... '165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183' ... '454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874' ... '461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014' ... '655997933798537483143786841806593422227898388722980000748404719']); [x,y] = meshgrid(0:1:106, 0:1:16); % evaluate the tupper formula tupper = rem(floor(floor((y+k)/17) .* 2.^(-17*x - rem((y+k), 17))), 2); % convert from symbolic to Matlab's native double precision tupper = double(tupper); % display it! image(fliplr((1-tupper)*255)); colormap gray axis equal title('Tupper''s (not-so-)self-referential formula!'); set(gca, 'XTick', [], 'YTick', []);
code(java)
function (x,y) { // floor(y/17) <br/> var v = dup(y); divInt_(v,17); //negative exponent of 2, rewritten as a bitwise right shift. <br/> var e = mult(x, k17); add_(e, mod(y,k17)); var sh = parseInt(bigInt2str(e,10)); if (sh>0) { rightShift_(v, sh-1); //final modulo to recover pixel bit. <br/> mod_(v, k4); return greater(v,k1); } else { //final modulo to recover pixel bit. <br/> mod_(v, k2); return greater(v,k0); } } Plot ranges: X:[ 0, 105] Y:[ 960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719, 960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404735]
有些朋友常常需要在Word 2007文档内容中加上一条横跨整页的分隔线,不过总是找不可快速的方法来实现。通常,在Word 2007中加入横线,是在“常用”功能区里单击“段落”组别中的“水平线”按钮。不过里面只有一种样式的线条可供选择,用户或许会觉得不太合适。
其实,在Word 2007文档中加分隔线的方法十分简单,只要直接用键盘输入3个“-”号后再敲回车键,就会得到一条细横线;输入3个“_”号,则会得到粗横线;此外,输入3个“=”、“*”、“~”及“#”,也会得到不同样式的横线哦。
另外,如果你不想Word 2007自动将这些符号变成横线,则可以单击横线旁边的闪电图标打开设置菜单,点选“撤消边框线”一项,即可将横线还原成符号。或者,你也可以点选“停止自动创建边框线”项目来停用这项功能。
1、MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:
C = conv2(A,B)
C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)。
2、MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
Y = filter2(h,X)
其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
Fspecial函数用于创建预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为:
type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5
clc
clear
close all
mu=[0,0];% 均值向量
Sigma=[1 0.8;0.8 1];% 协方差矩阵
[X,Y]=meshgrid(-3:0.1:3,-3:0.1:3);%在XOY面上,产生网格数据
p=mvnpdf([X(:) Y(:)],mu,Sigma);%求取联合概率密度,相当于Z轴
p=reshape(p,size(X));%将Z值对应到相应的坐标上
figure
set(gcf,'Position',get(gcf,'Position').*[1 1 1.3 1])
subplot(2,3,[1 2 4 5])
surf(X,Y,p),axis tight,title('二维正态分布图')
subplot(2,3,3)
surf(X,Y,p),view(2),axis tight,title('在XOY面上的投影')
subplot(2,3,6)
surf(X,Y,p),view([0 0]),axis tight,title('在XOZ面上的投影')

上学期,在学习《信号检测与估计理论》这门课程是就接触了:
最大后验估计(maximum a posteriori probability estimate, 简称MAP)和最大似然估计(maximum-likelihood estimation, 简称MLE)。
学的时候没打弄明白其原理,就会按照书上的例子,照猫画虎,应付一下考试!不过最近要用到这两个东西了,所以从新学习了。
其实这两个参数估计方法计算起来都很简单。关键在于如何理解其原理,就是要问一下:问什么要这么估计?这么估计有什么道理在?
下面是我自己的理解,说得过去,但不知道对不对?
假设你得到某个或者某些特定的观察数据 x,然后需要根据x ,估计未知的总体参数 θ。
一个自然的想法就是:在所有可能的θ取值中,逐个寻找,直到找到一个值
,能够让你获得观测数据x的“可能性”最大。
实际上就是寻找θ使概率P(x, θ)最大。

对于MAP来说,θ是已知先验概率密度函数P(θ)的随机变量。

对于MLE来说,θ是非随机变量或者分布未知的随机变量,这两种情况都可以认为P(θ)均匀分布的,即P(θ)=C。

下面来个具体的例子:
假设有五个袋子,各袋中都有无限量的饼干(樱桃口味或柠檬口味),已知五个袋子中两种口味的比例分别是
樱桃 100%
樱桃 75% + 柠檬 25%
樱桃 50% + 柠檬 50%
樱桃 25% + 柠檬 75%
柠檬 100%
如果只有如上所述条件,那问从同一个袋子中连续拿到2个柠檬饼干,那么这个袋子最有可能是上述五个的哪一个?
我们首先采用最大似然估计来解这个问题,写出似然函数。假设从袋子中能拿出柠檬饼干的概率为p(我们通过这个概率p来确定是从哪个袋子中拿出来的),则似然函数可以写作

由于p的取值是一个离散值,即上面描述中的0,25%,50%,75%,1。我们只需要评估一下这五个值哪个值使得似然函数最大即可,得到为袋子5。这里便是最大似然估计的结果。
上述最大似然估计有一个问题,就是没有考虑到模型本身的概率分布,下面我们扩展这个饼干的问题。
假设拿到袋子1或5的机率都是0.1,拿到2或4的机率都是0.2,拿到3的机率是0.4,那同样上述问题的答案呢?这个时候就变MAP了。我们根据公式写出我们的MAP函数。

根据题意的描述可知,p的取值分别为0,25%,50%,75%,1,g的取值分别为0.1,0.2,0.4,0.2,0.1.分别计算出MAP函数的结果为:0,0.0125,0.1,0.1125,0.1.
由上可知,通过MAP估计可得结果是从第四个袋子中取得的最高。
If we knew what we were doing, it wouldn't be called research, would it? -- Albert Einstein
Computers are incredibly fast, accurate and stupid. Human beings are incredibly slow, inaccurate and brilliant. Together they are powerful beyond imagination. -- Albert Einstein
