今年是好没长进的一年呢。。只学了些基本的方法。。
本文记号
0] x:p x类型为p
1] f(x) 表示一个函数
2] (n_1,n_2,...) 表示多元组,特别的,(n)表示一个一元组
3] x 表示一个代数符号/未知数/变量,即x:unm
4] {...} 表示一个集合(一般指无序)
- {expr|x in set} 表示对set里的每一个元素执行expr的集合,即
set2<-{expr|x in set} 此时expr是set关于set中的元素x到set2的映射之一,记为
expr:mapper((set,x,set2))
- 特别的,符号的集合被记为unm (Universal names),所有集合的集合被记为als (All sets)
1[e] 函数的类型:
- f(x:(set:als)):(set2:als) (为f:fun<(x:(set:als)):(set2:als)>简写)
abbr. f(x): set->set2
- 某类型的函数构成集合{(f:unm):(set:als)->(set2:als)}
- 例: mapper({(set:als,sy:unm,set2:unm)}):{(f:unm):(sy:set)->(py:set2)}
5] [...] 表示一个向量/矩阵/序列(根据上下文)
6] 某些集合的表示
- R/RR 实数集合
- 实数后继记为(x:RR)+,前导记为x-
- Q/QQ 有理数集合
- Z/ZZ 整数集合
- C/CC 复数集合
- 广义的,多元数集合将被记为<bS_1,bS_2...>
即C=<R,R>
二元整数将被记为CC^Z=<ZZ,ZZ>
- n次多项式集合被记为poly<n:ZZ>
- 多项式用某符号表示的函数集合记为(x:unm)(poly<n:ZZ>)
7] 极限的表示
- lim{x->n}(expr)
如
- lim{x:unm->n:RR}(p:poly<d:ZZ>)=p(x)
8] = 和 <- 和 ->
- = 表示意义等同或严格相等
- <- 表示赋值
- -> 是函数返回值的一个记号
* 记为 表示意义等同
9] 运算符
-
+ - * / ^ 等常见的
10]括号的滥用
别见怪
1. 极限
思想
我们有一个函数f(x):RR->RR.
函数,大概学过编程的人都认得。但是计算机的函数和数学的比,有拓展的方面,也有不如的方面。
一个单变量函数可以看成是一个集合到另一个集合的映射。类似的,多变量函数没有区别,因为我们可以将它归为多元组。
大多数情况下,f(x)的值都是可计算的。确实,当f(x:RR):x(poly<n:ZZ>)时,是可计算的。但是回想起这一个式子,典型的"错误"式子:
1/0
它的值无法计算。我们简单地将这个值称为NaN或CCInf。或直接抛出错误。
NaN是个很特殊的值。NaN{operator}(p:als)=NaN。你可能会说这是无穷大oo..其实它不是。oo是一个过程的数形记号。oo不会等于任何数.
那么让我们看看这两个函数f(x)=e^x和g(x)=sin(x)/x.
f(x)=e^x($f(x)=e^x$)是一个普通的例子,在函数作用域上的任何一点可求值。g(x)=sin(x)/x($g(x)=frac{sin{x}}{x}$)似乎也是处处可求值的,但是在x=0时却无意义。
(16x SSAA 高斯模糊平滑4px 立方缩放)
就是中间那个白色圆点的地方。观察这个函数,显然的,这个点的值应该是1;因为越接近这个点,值越趋向于1.我们还发现,我们可以从两个方向逼近这个点,
那么我们把从右向左逼近称为lim{x->N+}(f(x)),从左往右逼近称为lim(x->N-}(f(x)),字面上看,也就是说从左往右逼近永远小于N.
如果一个函数对于某一个N有lim{x->N+}(f(x)}=lim{x->N-}(f(x))等价于lim(x->N)(f(x))
但是如何求这个值呢?显然观察法是不靠谱的.为此,我们先引出严格的定义.
背景知识
数列的极限
假使我们有一个无穷序列x=Senquence[x_1,x_2,x_3,...]和一个数N:RR:const
如果对于任意小的p:RR,我们总能找到一个数d:ZZ+,使得foreach i >= d:abs(x[i]-N)<=p
那么我们称N为数列x的极限
如果一个数列有极限,我们称这个数列是收敛(convergent)的,如果一个数列不是收敛的,那么我们说这个数列是发散(divergent)的.
这个数列的极限记为
lim{x}[oo]
(oo表示无限增长的过程)
为了建立统一方便的记号,我们将发散序列的表示记为
lim{x}[oo]=oo
由于oo是一个过程而不是实数,那么我们就来劲了
is_convergent(x[])=> is(lim{x}[oo],RR)
is_divergent(x[]) => if(lim{x}[oo]=oo)
函数某点的极限
我们这里的函数,指的当然是定义域为实数域的函数。
我们有一个函数f(x),给定一个足够小的r:RR,一个逼近的数N:RR和一个L:RR:const,对于任意的0<e:RR<=r,都有一个t:RR,使得f(x)在Range(x,N+,N+(-)t)范围内abs(f(x)-L)<=e,那么L被称为lim{x->N+(-)}(f(x))
这是一个相当精确的定义,只是LZ语文不好...注意上式中+(-)号必须相等.
另一个等价的定义,不过没说明N+,N-,N时的极限的关系...
e:RR
theta:RR
forall e>0 exist(theta>0)->{
when(x in UNull(N,theta))->
f(x) in UNull(L,e)
)
}
UNull 表示空心邻域即
UNull(x,y)={p|Range(p,x+,x+y)&Range(p,x-,x-y)}
Range 函数返回一个实数集表示范围,
Range(x,f,t)={x|f<=x<=t}
x+(-) 运算符表示去本身,例如
x+<=p 等价于 x<p
无穷处的极限
通过第一个定义我们可以推出函数在无穷处的极限的定义.
given(f(x)),if(exist(A:RR)):{
forall(small) e:RR > 0 exist t:RR :
when x > t:
abs(f(x)-A)<=e
}->A=lim{x->+oo}(f(x))
given(f(x)),if(exist(A:RR)):{
forall(small) e:RR > 0 exist t:RR :
when x < t:
abs(f(x)-A)<=e
}->A=lim{x->-oo}(f(x))
if(f(x).{lim{+oo}=lim{-oo}})f(x).{lim{oo}=lim(+oo)=lim(-oo)}
收敛的定义是类似的.
无穷小和无穷大
程序员的基本素养----你一定对时间复杂度不陌生.比如我一看到指数级复杂度就觉得是没法满足要求的,而事实上有些指数级算法的真实应用不错.我们叫它渐进复杂度.
数学上表示一个函数变化的速度也是用类似的,不过被称为阶(Order).
我们用O+(f(x))表示一个函数趋向无穷大的速度,用O-(f(x))表示趋向无穷小的速度.
× 无穷小
什么是无穷小?
其实无穷大和无穷小一样,都是一个过程的描述.
定义 Definition
给定一个函数f(x),如果lim{x->x_0}(f(x))=0,记f(x)为x_0处的无穷小,(x->x_0时的无穷小),
表示为iS(f,x->x_0)
× 无穷大
与无穷小类似.
iB(f,f->f_0)
× 阶
阶表示接近的速度.
(注意,阶函数在逼近域中是单调函数)
设a=iS(f,x->x_0),b=iS(g,x->x_0)
1. lim(a/b)=0
O-(a)>O-(b)
2. lim(a/b)=oo
O-(a)<O-(b)
3. lim(a/b)=c:RR:const
O-(a)=O-(b) ....... 同阶无穷小
specially,when c=1,
O-(a)~O-(b) ............ 等价无穷小
O+阶正好相反.
计算
O(f)+O(g)=max(O(f),O(g))
求极限
目录