在这篇有趣的论文中,我们对韩国音乐的搜索排行榜进行了测量和分析。这样的工作在我们知道的范围内还是第一次。

我们发现用户的网络搜索排行榜与其它音乐的排行榜(比如销量榜)有着明显的区别。我们发现了不同的歌手的搜索有着不同的有趣的时间特性。我们也发现用户搜索的不同模式。我们的研究对音乐公司的市场分析有着明显的商业意义。

我们的分析相对还比较简单。我们希望我们的工作能够引起业界的进一步关注和讨论。

Y Yang, C.Chen, Y.Chen, The Measurement of the Search Charts of Music, NSWC2009, Wuhan, China 论文pdf

Sigcomm08  

PPLive:Yan Huang,Cheng Huang
HK:Tom Z. J. Fu, Dah-Ming Chiu, John C. S. Lui

摘要:VoD比Live在用户共享上更少同步,所以更难。

方法:用户端存储(1G)、协调的冗余内容块放置 + 内容发现 + Fetch 调度

内容:

  1. 系统介绍
  2. 测量机制:系统级和元件级。
  3. 用户行为
  4. 性能评估指标
  5. 用户满意度测量

1、系统介绍

PPLive VoD:2007年秋开始运营。2008年1月,同时在线用户150k。

系统模型:

服务器:Media server + Tracker + Bootstrap server + Log server + Transit server(help NAT)

Peer:实现了dht,back up 一些bootstrap server,以免ISP block server

速率:381-450Kbps,HD:700Kbps

块分三种:

  • chunk:2MB,存储和bitmap声明的单元。
  • piece:16kB 供播放。总包括一个viewable块。
  • sub piece: 1kB。做调度。

块头里的内容:seq id + timestamp + auth info

没有重试的情况下,overhead 6.2%。重试的话,10%。

2、复制策略:冗余内容块放置策略

MVC(多电影cache):peer会cache多个电影

No prefetching: 只cache已经收到的要播放的块。不在线下Cache和用户正在播放无关的块:

理由:不浪费宝贵的uploading带宽。因为Peer的在线时间较短(仅1hr)。

??感觉这个问题比较复杂,值得更深入地分析。

Reject策略:以电影为级别进行reject。先用的LRU,然后用下面的加权方法代替。

加权的权重取决于被cache电影的完整性和需求度。需求是ATD(availability to demand ratio,等于cache电影的peer数/正在看电影的peer数)的减函数,ATD的最大值只能取6-8。这个最大值取决于目前网络中peer的上传带宽情况。以中国目前的带宽现状,要6-8个peer才能顶一个server。tracker提供ATD的全网统计。5-15分钟计算并广播一次。

该加权算法使server负载从19%降到了11%-7%。

??这个19%指的是server的CPU之类的负载?

3、检索策略:

三种:

  • tracker:记录全网peer的cache的电影的index。返回对应的peer list。
  • dht:最初用dht将电影指定到某个tracker上,实现负载均衡。后来peer也实现了dht,帮助路由到tracker去,怕ISP屏蔽tracker。
  • gossip:也返回peer list,还有自己的chunk bitmap。

peer定时送keep alive消息给tracker。并报告自己的bitmap和其它统计。
tracker用bitmap可以计算电影的health index。

4、Piece选择:

没有用anchor方法。所谓anchor方法,即用户跳时,如果跳的位置对应的piece没有,就选anchor点的piece。

原因:因为用户不太跳。每个电影才跳1.8次。此外,通过优化,达到了跳了以后启动时间为18s。还可以。

策略:先sequential,再rarest first。

5、传输策略:

即:选邻居、设timer。

策略:同时找多个邻居要,但要的是不同piece。当一个请求time out,换一个邻居再试。

请求某一个邻居的速度取决于这个邻居的响应时间。

邻居数的控制:经验数据。超过这个数目的邻居虽然使Piece的到达率提高,但duplicated包太多。

  • 500kbps,8-20个邻居较好。1Mbps,16-32个邻居较好。

当peer的上载速度扛不住时,server assitance

6、其它:

不让用户调共享率。如果peer不往tracker发bitmap,演播就停止。

??程序控制还是其它peer不给? 象是程序控制

穿NAT: STUN方法,因为发现60%-80%用户在NAT后。

80%在NAT后,其中Full Cone 47%,symmetric 30%,port restricted 23%

穿防火墙:控制upload速率和请求速率,避免防火墙认为遇到攻击。

内容authen:每个电影发布一个key。用digest或数字签名。在chunk级实现,但粒度不够,所以在piece级实现了一个简单的。

7、测量机制:在log server和tracker处集中收集。
Peer的报告时间:用户stop或退出系统时统一报MVR(movie viewing record)。在报告前做一些预处理。
cache reject时、新电影被cache时、timer(10min)过期时,报bitmap。

??更多重要的指标只怕没有披露 :)

8、用户行为

MVR(movie viewing record)记录用户看电影的行为:包括:

  • start time
  • end time
  • start position(30%)

测量:

1)到达时间间隔分布:
p(t)=a*t^b: a=0.06-0.18,b=-0.7-0.93:幂率:

???不是泊松。

2)观看duration:

往后跳的位置分布挺均匀:

因为平均跳的次数不到一次,所以这就是跳的距离的分布。

???说明是均匀往后跳的,关系到prefetch策略。

3)每个人也就送1-2个MVR。每个MVR平均长度为电影的5-16%。所以很多人都没有坚持看完。

??? 注意平均跳数不是整个电影的,看平均跳的时间更能感觉用户跳的快慢。

4)70%-90% 小于10分钟左右就跳了。50%-70% 小于1-2分钟就跳了:

???说明大多数用户很快地跳,然后停止播放。

5)开启-关闭软件的时间:70%呆的时间超过15分钟。

???也许可以利用这个特性prefetch?

???离开系统和离开频道是两回事。值得用MVR统计一下

6)2:00PM,11:00PM人最多。

???夜猫子 :) 。说明还不是主流。

7)fig9: 500-1k人做种子。15k-50k人看。

???说明是这部分稳定的Peer支持的。大多数人多是在2:00pm,11:00pm来转一圈,又走了。所以flush crowd的支持很重要

???看来行为是:一部分人稳定把电影看完,另一部分看两下、跳几下就跑了。

9、性能评估   

1)用户满意度

Total View Time
方法1: 时间比例:根据MVR:计算初始buffering时间占整个观看时间的比例。F:fluency

???所以buffering时间的测量是有的

方法2:时间比例加权感觉质量。感觉质量通过client观察用户行为。这个没做。只是建议。

2)Server load

一个普通server,100个电影,100M-160M带宽,扛住。

3)health of replication

即ATD。分三级考虑:

  • 电影级
  • 考虑cache的电影的百分比
  • chunk bitmap级。

Owning ratio(OR):chunk id小的,即前面的owner率大,最大的也有30%-40%。

???和Yi那篇文章里提到的测量结果的一致。

需求与提供的比:6-10倍。

???和前面的6-8的限制有关
???用一天作为测量单位。也许更细一些会更清楚
???看来因为很多用户看两下、跳几下就跑了。所以总需求不大。而那些稳定的peer能扛住。这是P2P的优点。

4)用户满意指数:

用F(m,i):

fig16: F>90%的占40-50%;F=10-20%的占20-25%。

???说明20-50%的人刚buffer起来看了几秒就跳了。

fig17: flush crowd时,F小的增加了。 说明flush crowd使用户满意度下降

5)用户上下载带宽分布

tbl4:上载带宽分布:2008年5月,182K peer,平均从server下载速率32kbps.

???注意Server的带宽使用是在100M上下的。是Server Assistance的

???10%的peer下载速度超过600k?同时看两个节目?:)

upload速度的分布:
0-200k  36%
200k-360k  28%
360k-600k  25%
600k-1000k  5%
>1000k  6%

???和微软测试的结果不同

chord.ppt : Manan Rawal, Bhaskar Gupta

Chord:

定义:

m-bit ID

数据结构:

    succesor(k) = first node whose identifier is >= identifier of k in identifier space.
    Finger Table: finger [k] = first node that succeeds (n+2^(k-1))mod(2^m)
    finger [1] 即 succesor

    路由表:

        前驱,后继

基本逻辑:路由(可扩展的)

    n.find_successor(id) 问节点n:你知道id A的后继是哪个吗?:功能:找内容,因为id A的内容就存在id A的后继上。

// ask node n to find the successor of id
n.find_successor(id)
    if (id belongs to (n, successor])
        return successor;
    else
        n0 = closest preceding node(id);
        return n0.find_successor(id);

// search the local table for the highest predecessor of id
n.closest_preceding_node(id)
    for i = m downto 1
        if (finger[i] belongs to (n, id))
            return finger[i];
    return n;

特别逻辑:对付网络的变化,如节点加入、离开、异常断开

A:节点加入和稳定

节点A加入: 操作:
    1)改变A前驱的successor为A
        找到A的前驱,通知它
            加入新数据结构:前驱
                前驱的维护

    2) 初始化A的succssor和finger table
            succssor即其前驱的successor
            finger table从其前驱和后继的finger table可以初始化

Chord方法:每个节点周期运行稳定算法,更新数据结构

n.create()
    predecessor = nil;
    successor = n;

n.join(m)    初始化后继
    predecessor = nil;
    successor = m.find_successor(n);

n.stabilize() 周期运行,更新自己的后继为后继的前驱。并通知该后继节点更新自己的前驱为我
    x = successor.predecessor;
    if (x in (n, successor))
        successor = x;
    successor.notify(n);

n.notify(m)
    if (predecessor is nil or m in (predecessor, n))
        predecessor = m;

n.fix_fingers()    周期运行,更新finger table的项
    next = next + 1 ;
    if (next > m)
        next = 1 ;
    finger[next] = find_successor(n + 2^(next-1));

n.check_predecessor()    周期运行,检查前驱的正确性
    if (predecessor has failed)
        predecessor = nil;

维护正确的后继是关键

加副本:r个副本

改进:让那种主动退出的节点做一些退出前的迁移工作:
    - 把存的key传给后继
    - 通知前驱和后继:自己要走了,请更新自己的后继或前驱

Triantafillou, P. (2003), “PLANES: The Next Step in Peer-to-Peer Network Architectures”, In SIGCOMM Workshop on Future Directions in Network Architectures (FDNA-03), Karlsruhe, Germany, 27th August 2003.

用大公无私的节点做簇头,组成顶级的Overlay。用Hashing把node id映射到簇。

性能评估:O(logn)类似的讨论。

UK

ROME协议可以根据Chord环的负载调节它的大小,即节点监视自己的负载情况,然后节点可以根据网络的负载情况加入或离开,这样N保持最优。由bootstraper服务器中心控制(2005)

将多个网的自举服务器联起来,形成高层网络。实现跨网的服务器共享。

server通过关键字声明自己能支持和不能支持的业务,这样才能匹配两个服务器。

查询带上查询节点的关键字。通过的节点利用这些关键字觉得它是否是语义上更好的邻居。

优先保证本地的。给本地留有余地。

过程:
- 登记:初始化自己的邻居表。要求邻居把自己加到邻居表里。消息经过的时候更新自己的邻居表。
- 查询;用TTL防止无限循环和死锁。不能部分reserve

仿真:
- 目的:证明能增加系统整个的负载量
- 三步:关键词产生、server构造和初始化。

参考;
Castro, M., Druschel, P., Kermarrec, A-M. and Rowstron, A. (2002), “One Ring to Rule Them All: Service Discovery and Binding in Structured Peer-to-Peer Overlay Networks”, in Proceedings of the SIGOPS European Workshop, France, September 2002.

Mislove, A. and Druschel, P. (2004), “Providing Administrative Control and Autonomy in Structured Peer-to-Peer Overlays”, In Proceedings of the 3rd International Workshop on Peer-to-Peer Systems (IPTPS‘04), San Diego, CA, USA, 26th-27th February 2004, pp. 162-172.

通过ID空间的划分,反映连接限制。对应用来说是透明的一个网络。
- 内容和路由的本地化。
- 原生性地支持NAT和防火墙

每个环有一个环ID。顶级环的环ID为全0.

所有节点加入顶级环(负载均衡),除非在NAT后。所有节点也加入自己的环。

网关节点在自己加入的各组内声明自己外联的网络。(通过加入Anycast组)

路由:Key: 环ID+Key。
通过环ID,走Anycast,默认是顶级环。

如何得到key对应的环ID:将Key对应的环ID存在顶级环里。

通过cache解决性能的问题。

在FreePastry里面实现了。

参考:

Skipnet [13] 第一个清楚地表达了对内容和路由的本地化的需求。它按位置分配节点ID。
Scribe [5],[6] 在组内维护一个组员到组长的生成树,实现组播和单播。
Coral[9], 用多个环提供数据本地存储。根据测量的Ping延时动态配置。
[14]在一个Chord环里通过特别的路由办法,找到一个子环里的最近的节点。(不提供路由本地化)

[13]  N. Harvey, M. Jones, S. Saroiu, M. Theimer, and A. Wolman.
Skipnet: A scalable overlay network with practical locality properties.
In Proc. USITS 2003, Seattle, WA, 2003.

[5]  M. Castro, P. Druschel, A.-M. Kermarrec, and A. Rowstron. SCRIBE:
A large-scale and decentralized application-level multicast infrastruc-
ture. IEEE JSAC, 20(8), Oct. 2002.

[6]  M. Castro, P. Druschel, A.-M. Kermarrec, and A. Rowstron.
Scalable application-level  anycast for highly dynamic groups.   In Proc. NGC
2003, Munich, Germany, 2003.

proximity neighbor selection [3, 12],

[9]  M. Freedman and D. Mazieres.   Sloppy hashing and self-organizing
clusters. In In Proceedings of the 2nd International Workshop on Peer-
to-Peer Systems (IPTPS ’03), Berkeley, CA, 2003.

[14]  D. Karger and M. Ruhl.   An augmented Chord protocol supporting
heterogeneous subgroup formation in peer-to-peer networks.  In Pro-
ceedings of the 3nd International Workshop on Peer-to-Peer Systems
(IPTPS’04), San Diego, CA, 2004.

这里提到的其他论文的概括还不错。

Garcés-Erice, L., Biersack, E.W., Ross, K.W., Felber, P.A. and Urvoy-Keller, G. (2003), “Hierarchical peer-to-peer systems”, in Parallel Processing Letters, Vol. 13, No. 4, pp. 643-657.

2级Chord。先找组,再在组内找节点。

学习Internet的等级路由。

好处:
    - 减少查找的跳数
    - 在组内查找快
    - 以组为单位进行管理。组可以用不同的DHT协议。

每组挑出一些超级节点作为网关节点。网关节点组成顶级Overlay,负责组间消息的路由。

合作缓存机制:减少数据传输延时

算法:
    - 分配节点到组
    - 选出超级节点
    - 维护顶级Overlay

具体分析了用Chord做顶级overlay的性能:
    - 模型
    - 分析了期望的查找跳数

查询:到本组超级节点,到负责该Key的组的超级节点,再到负责该key的节点。

关键问题也就是这些问题:
    - 到本组超级节点:集中的超级节点列表(不论是中央服务器还是作为键值对存在网络中)
    - 组间路由:明确指定组ID/ID空间划分间接组寻址

当多级的时候,总是先路由到顶级。然后一级级下来。

节点加入组g。
     - 在网络中存g-超级节点list。 
    - 节点查询key=g,得到超级节点的list,然后向这些节点申请加入。(所以ID空间是独立的)

超级节点维护候选超级节点列表,并定时发给各节点。
    - 监视组内节点特点:开机时间、CPU、带宽、

当一个超级节点失败时,候选超级节点列表中的第一个节点主动加入上一级Overlay。并通知组内节点和上一级Overlay的邻居节点。

用组内的对应于该Key的节点做Cache。改善性能。

修改Chord。变邻居IP为邻居IP列表,其中包括邻居组的超级节点列表

当组的超级节点变化时,立刻更新前驱和后继的路由表,但Lazily更新finger表的自己。

模型分析:

性能改善来自稳定节点的选取和环内节点数的减少

P个节点、I个组。两种节点:稳定节点(宕机概率Ps)、不稳定节点(宕机概率Pr)。Pr>>Ps

考虑(N,p)。

假设:
- N个Peer在2^m上均匀分布,距离2^m/N
- finger table里的项有p的概率宕机,但后继总是对的:因此,总能前进

随机选择的查询节点和产生的Key,H:跳数。T:查询节点和Key之间的距离(随机变量),求E[H]。
要求h(n)=E[H|T=n]. h(1)=1
jn: finger表中n前面的finger表项的个数。
所以:如果第jn项的peer没宕机,一跳能前进x=(2^jn)*(2^m/N)这么多的距离。h(n)=h(n-x)+1
如果第jn项的peer宕机,而第jn-1项的peer没宕机,一跳能前进x=(2^(jn-1))*(2^m/N)这么多的距离。h(n)=h(n-x)+1
这样就得到回归方程式。

忽略组内查表(组很小,64-256)。模型Chord的查询跳数与N, Pr的关系。

参考:

<100个节点的全连接网络用CARP [18].
100-1000用consistent hashing [19]
[14] 测量与M个landmark的RTT,将结果排序,判断自己属于M!个组中的哪一个。然后获得这个空间的ID。由此实现位置敏感的Overlay。用CAN做了实验。
KaZaA:高可用和高性能节点做超级节点,新节点联到RTT最近的超级节点。超级节点组成一个Overlay. CAP[15]用类似的结构
Brocade [16] 类似于[14]+[15]. 但如果有[14]了,它为何还要[15]呢?需要看一下它的论文。
[17]:改进了Pastry, 每一跳路由时选择最近的节点。但越往后,可供选择的余地越小,而最后一跳往往是最长的。

14.  S.   Ratnasamy,   M.   Handley,   R.   Karp,   and   S.   Shenker,
“Topologically-aware overlay construction and server selection,”
in Proceedings of Infocom’02, (New York City, NY), 2002.

15.  B. Krishnamurthy, J. Wang, and Y. Xie,
“Early measurements of a cluster-based architecture for p2p systems,”
in ACM SIGCOMM Internet Measurement Workshop, (San Francisco, CA), November 2001.

16.  B. Y. Zhao, Y. Duan, L. Huang, A. D. Joseph, and J. D. Kubiatowicz,
“Brocade: Landmark routing on overlay networks,”
in In Proceedings of IPTPS’02, (Cambridge, MA), March 2002.

17.  M. Castro, P. Druschel, Y. C. Hu, and A. Rowstron,
“Exploiting network proximity in peer-to-peer overlay networks,”
Tech. Rep. MSR-TR-2002-82,  Microsoft  Research,  One  Microsoft  Way, Redmond, WA 98052, 2002.

18.  K. W. Ross, “Hash-routing for collections of shared web caches,”
IEEE Network Magazine, vol. 11, 7, pp. 37–44, Nov-Dec 1997.

19.  D. Karger, A. Sherman, A. Berkhemier, B. Bogstad, R. Dhanidina, K. Iwamoto, B. Kim, L. Matkins, and Y. Yerushalmi,
“Web caching with consistent hashing,”
in Eighth International World Wide Web Conference, May 1999.

微分方程及边值问题:计算与建模

微分方程可以通过方向场和解曲线直观呈现。工具dfiled(tutorial, 下载)可以画一元一次方程,工具pplane(tutorial(pdf), 下载)可以画二元一次方程组的线和稳定点。

第一章、一阶微分方程

注意对dy/dx=g(x)h(y)进行分离变量,将h(y)移到等式左边时,会导致h(y)=0的解的丢失。这个解不在通解里,为奇解。

求飞机的轨迹时,先列出dy/dt, dx/dt的方程,然后将两者相除,得到dy/dx的微分方程。

替换法:观察方程的形式,替换。
- dy/dx=F(ax+by+c)     : v=ax+by+c
- dy/dx=F(y/x)         : v=y/x
- dy/dx+P(x)y=Q(x)y^n (伯努利方程) n>1    :v=y^(1-n)
- 方程中没有x或y        :v=y’ (y”=dv/dy*dy/dx=v*dv/dy,这样就变为了v和y的一阶偏微。

恰当方程
- M(x,y)dx+N(x,y)dy=0  : 如果My=Nx,就有一个通解F(x,y),使Fx=M,Fy=N。然后解出这个F即可。

第二章、模型与数值方法

dp/dt=ap+bp^2构成了一系列有意思的人口模型
- dp/dt=kp(M-p) 可以描述传染病或流言的传播,其中M为总人数
- dp/dt=(b-ap)p 可以描述生孩子率b和死亡率ap的人口
- dp/dt=(b-ap)p-h 可以描述生下一代率b、死亡率ap、单位时间捕捉数量h的鱼数
- dp/dt=kp(p-m)可以描述生孩子率kp和死亡率km的人口,其中k,m为常数

这些形式的右边都没有t出现,成它们为自治的。它们同时也是可分离的。可以得到关于p的解析表达式。

如果有一套测量结果(ti,pi),可以通过(1/p)dp/dt=a+bp来进行曲线拟合,得到a和b。即(p, (1/p)dp/dt)应该在直线a+bp上。

在上述模型的讨论中,关于稳定解的讨论很有意义。作为一个稳定点,它一定有dp/dt=0。满足dp/dt=0的点通常叫临界点。因此,可以代入ap+bp^2这样的方程来获得这些临界点。然后再用相位图来具体分析这些临界点的稳定性。

比如,我们可以很惊奇地发现,对dp/dt=kp(p-m)来说,随着时间的推移,p要么爆炸,要么灭绝,而p到底会落得怎样一个结局,全取决于p的初始数量。而对dp/dt=(b-ap)p-h来说,稳定点对h非常敏感。如果h太大,p就一定灭绝,这就是竭泽而渔的结果。

对那些无法得到方程解的一元一阶微分方程,比如dx/dt=e^(-x^2),它的原函数是非初等函数,可以用数值逼近的方法得到数值解。具体的方法有:欧拉方法、改进欧拉方法、龙格库塔(Runge-Kutta)方法,它们分别得到O(h),O(h^2),O(h^4)的逼近精度。其中h为步长。而高阶方程可以将其变换成一阶方程组,然后进行数值逼近。

第三章、高阶线性微分

n阶的齐次线性方程,总有n个线性无关的解。判断线性无关可以用Wronski行列式,即
    | f    g   |
    |          |    = 0
    | f’    g’ |

这些线性无关的解可以通过方程的特征多项式获得。如果特征根有一个K重根r,就要用y=U(x)e^(rx)代进去,会发现U(x)是一个关于x^i的线性多项式,i=0…K-1。计算特征根,可以用Matlab的root函数。

求非齐次方程组的特解可以用待定系数法。即分析f(x)里含有的m次多项式、e^(rx)、Acoskx+Bsinkx等部分,取其中的线性无关项,与这些项的所有导数,构造一个待定系数的线性组合,代入方程,解出那些系数,从而得到这个特解。但如果构造出的线性组合中的元素中,有和对应的齐次方程组的通解相同的项,那这个项是没有用的,因为它代进去这个方程得到的结果是0,不对结果产生影响。这时就要在构造的线性组合上乘x^s,使生成的结果不再含有通解项(s选能完成这个任务的最小整数),然后代入方程组,求解。

而如果函数的导数无穷多,因此构造不出来一个线性组合,这时可以用参数变易法。即如果通解包括y1,y2。则假设有一个特解u1*y1+u2*y2。而u1,u2可以通过下面的方程组先求出来u1′,u2′。
    u1′y1+u2′y2=0
    u1′y1′+u2′y2′=f(x)
然后再求出u1,u2。

第四章、微分方程组

解齐次线性方程组,包括消元法和特征值法。

消元法用矩阵形式来表示,就是解
    | L1    L2  |          | f1(t)    L2  |
    |              | X   = |                 |
    | L3    L4  |          | f2(t)    L4  |
                        
    | L1    L2  |         | L1      f1(t)  |
    |             | Y   = |                  |
    | L3    L4  |         | L3      f2(t)  |

第五章、线性微分方程组

齐次方程组的特征值法:

先求特征值|A-lamda*I|=0,然后用|A-lamda*I|*V=0求出特征向量,结果是X=C1*V1*e^(lamda1*t)+C2*V2*e^(lamda2*t)+…

推理方法:设X(t)=V*e^(lamda*t),所以X’(t)=lamda*V*e^(lamda*t)。而X’(t)=A*X(t)=A*V*e^(lamda*t),所以lamda*V=A*V。所以,lamda为特征值。而V为特征向量。

注意求V不一定总成功。

而如果特征值为共轭复数对。用其中一个计算特征向量v,它是一个复数。然后代入X(t)=V*e^(lamda*t),得到一个X(t)。用这个X(t)的实部和虚部作为两个特征解。

对二阶的方程组X”(t)=A*X(t),还是设X(t)=V*e^(lamda*t),所以X”(t)=lamda^2*V*e^(lamda*t)。而X”(t)=A*X(t)=A*V*e^(lamda*t),所以lamda^2*V=A*V。所以,lamda^2为特征值。而V为特征向量。

实际系统中,lamda^2通常为负值,这时特征向量为正弦函数,即为频率为sqrt(lamda)的一个振动。

用特征值法,如果没有重根,很好。而如果有重根,就会丢失解。比如两重根,设这个通解为(V1*t+V2)*e^(lamda*t),代入发现有|A-lamda*I|*V2=V1, (|A-lamda*I|^2)*V2=0,|A-lamda*I|*V1=0。这样就可以求得通解。注意V1应该是非零的,否则没有意义。

由此推广到对于lamda的秩为r的广义特征向量,(|A-lamda*I|^r)*V=0,但(|A-lamda*I|^(r-1))*V!=0

第六章、非线性方程组

而对非线性方程组,用Matlab的Iode程序可以直观地画出来结果。
Iode是一个教育软件包,它配合UIUC的一套基本差分等式的课程Math 285

对自治的非线性方程组dx/dt=f(x,y),dy/dt=g(x,y),可观察它的临界点。根据这些点的性质,可以分为汇点、源点、鞍点、中心点,渐进稳定点。

研究这些点时,用殆线性化的方法,用u=x-x0, v=y-y0(x0,y0为要研究的点的坐标),把点移动零点。用泰勒公式,可以证明,此时du/dt=fx(x0,y0)u+fy(x0,y0)v; du/dt=gx(x0,y0)u+gy(x0,y0)v; 即U’=J*U。J为雅可比矩阵。这样,就把非线性方程组,变为了一个以(0,0)为临界点的线性方程组,从而可以研究在临界点(0,0)的特性。这个临界点就是我们原始方程要研究的临界点的偏移结果。

一阶二元线性方程组的临界点(0,0)的性质,依赖于A的两个非零特征值的取值:(解出来然后分析)
实数、不等、同号    ::        正:结点源点; 负:结点汇点
实数、不等、异号    ::        不稳定的鞍点
实数、相等            ::        正:结点源点; 负:结点汇点
非零实部、副共轭    ::        螺线极点: 实部为正:源点; 为负:结点汇点
虚数                    ::        椭圆曲线,稳定中心

一个有意思的非线性方程组例子是捕食者和被捕食者的模型
    dx/dt=ax-pxy
    dy/dt=-by+qxy
这个模型画出的结果是一个在第一象限靠近零点的逆时针旋转的圈,挺有意思。   

另一个是反映竞争的人口模型
    dx/dt=a1*x-b1*x^2-c1*xy
    dy/dt=a2*y-b2*y^2-c2*xy
在这个模型中,a表示生长因子,b表示自我抑制的因子,c表示竞争。
这个模型画出的结果是:如果c1*c2b1*b2,则一个会灭亡。也挺有意思。   

当我们用数值逼近的方法去逼近前面所说的人口模型时,我们会得到这样一个方程:
    Xn+1=r*Xn(1-Xn)
仿真发现,当r>3.56时,结果开始周期倍增。然后突然出现一个3周期的情形,然后又周期倍增。这就是很令人难以捉摸的混沌。

第七八九章

其它,可以用Laplace变换求常系数线性微分方程的解;用幂级数方法求变系数(系数为x^i)的线性微分方程的解;用傅立叶级数求分段连续函数、热方程的解。这些都是通过变换解方程的办法。

附录: Matlab相关的微分方程工具和语句

矩阵求解:AX=B:inv(A)*B

特征值:eig(sym(A))

积分:Syms x; int(f(x))。

微分

用dsolve
一阶:dsolve(’Dy=1+y^2′,’y(0)=1′,’v')
二阶:y=dsolve(’D2y=cos(2*x)-y’,’Dy(0)=0′,’y(0)=1′);y=simple(y);
方程组: [f,g]=dsolve(’Df=3*f+4*g’,’Dg=-4*f+3*g’);加初始条件:[f,g]=dsolve( ‘Df=3*f+4*g’,’Dg=-4*f+3*g’,’f(0)=0,g(0)=1′);

用solve:
求通解:y=solve(’D2y-2Dy-3*y=0′);加初始条件:y=solve(’D2y-2Dy-3*y=0′,’y(0)=0,y(1)=1′); y=simple(y) ;pretty(y)
画曲线:ezplot(y,[-6 2])

ode45: 四阶五级的龙格库塔法求近似解

function xdot=nonlin(t,x)
xdot=[0.5*cos(0.5*t)-x(2)-0.5*x(2)^3-0.4*x(1); x(1)]

initial conditions x0, as shown in the following main program:

t0=0;  % initial time
tf=40;  % final time
x0=[0,0.05]‘; % initial conditions x0
[t,x]=ode45(’nonlin’,t0,tf,x0);
x1=x(:,1); % this is the velocity curve
x2=x(:,2); % this is the acceleration curve

微分方程能够描述时空的变换,在数学建模上有很强的作用。

常微分方程是关于单变量的微分方程。

对于一阶常微分方程,如果它是可分离的,即可以写成f(y)dy=g(x)dx,就可以将x,y分别放在方程的两边,然后在两边分别积分,就可以得到答案。

如果它是线性的,即可以写成y’(x)+p(x)y(x)=q(x),这里一个技巧是用积分因子m(x)=exp[P(x)], P(x)是p(x)的不定积分。用这个m(x)乘方程的两边,有m(x)y’(x)+m(x)p(x)y(x)=m(x)q(x)。而左边的式子m(x)y’(x)+m(x)p(x)y(x)正好等于d(m(x)y(x))/dx。所以,我们有d[m(x)y(x)]/dx=m(x)q(x),所以这是一个可分离的形式。两边积分,然后将m(x)移到等式右边,就可以得到y(x)。

从上面这个算法可以看出,解微分方程的一个重要方法,即通过积分因子、线性变换等方法,将等式变换为简单的形式,从而得解。

此外,还有一个重要方法,即用一个猜想的特定函数直接代入方程,然后试图解出这个函数中那些待定的表达式。比如对二阶齐次线性常微分方程ay”(x)+by’(x)+cy(x)=0,就是用y(x)=exp(rx)代入,将其转化为一个关于r的辅助方程ar^2+br+c=0。然后当b^2-4ac有三种情况,即>0,=0,<0,时,有不同的r解,因此得到不同的通解。

值得注意的是,当b^2-4ac=0时,此时,r只有一个解r=-b/2a。这时就要感知这里还一定有另一个解。所以又用y(x)=f(x)exp(rx)代入,再找一遍,这时会惊奇地发现,方程最后变成f”(x)=0。由此得到f(x)=ax+b。这样才最后得到通解(ax+b)exp(rx)。

一旦得到二阶齐次线性常微分方程的解,求非齐次的方程的解的问题,就变成了寻找一个特解。然后用齐次的通解加上这个特解,就得到非齐次方程的通解了。

而这两个方法具体用起来用怎样的变换、待定函数,都没有定式,而是需要根据方程本身的特点,设计特别的具体式子。这也是解微分方程的难点和刺激所在。一旦解出来,就能发现很重要的规律,比如物理学上的牛顿定律、爱因斯坦的相对论,都和微分方程息息相关。

下面看偏微分。

偏微分是多个变量函数的微分。讨论一个函数的偏微的前提通常是它的k阶偏导存在且连续。

偏微通常能得到很多的解,甚至解族。这时就需要用初始条件I.C.和边界条件B.C.来确定具体的解的方程。这些条件找得不好,可能导致无法找到合适的解。

解偏微有一个奇特的解法,就是求它的一个球对称或圆对称的解,就是记u(x,y,z)=f(r), r=sqrt(x^2+y^2+z^2),把它代入后,常常能够惊奇地发现式子变成了一个关于r的常微分方程。这个f(r)也被叫做调和函数。

很多二阶偏微都是经典。举例来说,热的传导,就有人想出来是Ut=K(Uxx+Uyy+Uzz),其中U是温度。一维的就是Ut=KUxx。如果加上热源与散热片,就是Ut+CU=KUxx+h(x,t)。同样经典的是波的方程,记大气压U(x,y,z,t),波的方程就是Utt=a^2*(Uxx+Uyy+Uzz)。

线性偏微有叠加性。这意味著对非齐次线性偏微,可以利用它的叠加性把问题分解,把右边拆了,分别求解后,再将结果按拆的系数关系加起来,这样解起来就方便一些。而对齐次线性偏微,这意味著将多个解线性相加,结果还是一个解。

偏微的通解是很难找的。往往找到一般解就够用了。n阶偏微方程的一般解就是含有n个任意函数(每个函数含m-1个变量)的解。

回过来看一阶偏微。

如果偏微就是对一个变量的,那就可以按常微来解。只是要把结果中的C用其他m-1个变量的任意函数代替。

如果偏微的每一项都是对一个单独变量的,就可以将u(x,y,t)分离变量为X(x)Y(y)T(t)代入,然后等式两边同除以X(x)Y(y)T(t),这样有时可以惊奇地发现,结果成立的条件是大家都等于常数。这样按常微分方程分别解出X,Y,T。

对一阶线性常系数偏微,即aUx+bUy+cU=f(x,y)。如果b!=0,通过坐标变换,w=bx-ay,z=y或x,y的线性组合,记V(w,z)=U(x,y),代入,就可以把方程转化为对变量z的偏微,然后按常微来解。

而对一阶线性变系数偏微,也可以通过类似的变换方法解,但通常难解。

用一阶线性常系数偏微,能够对种群密度、存货量分布进行很好的模型。用一阶线性变系数偏微,能够对气体流、交通流等问题进行很好的模型。这些例子都很有意思。揭示了从实际问题中抽象出偏微方程的基本方法。

科技英文写作与讲演 - 科学的罗赛塔石碑

1、准备幻灯片

淡黄色的背景

Arial字体:全部用黑体

字号不小于18

在幻灯片中只包括关键词或简洁的短语,以主题的形式表达。不要使用完整的句子。在演讲中用声音来补充完整的信息,增加趣味和细节。避免给听众阅读幻灯片上的句子。而是稍做浏览幻灯片把上面的关键词语组合成完整的句子,给听众所阅读到的材料增加信息量。

用颜色、字号、斜体在幻灯片中强调,不用下划线、感叹号。演讲时用声调、停顿及重读进行强调。

只有在需要强调时间顺序或优先性的时候,才用序列号。否则,用箭头、破折号。

用一个片子向同事或资助部门致谢。如果有时间,就大声阅读这些名字。片子上只写姓名,然后通过声音增加其职务和其他信息,如机构和国家。

最后完成的幻灯片,完整、品味高雅,就像一次精美的宴会,一道道精致的菜肴被依次优雅地呈上来。

每张幻灯片的解释时间不超过1分钟(或更短)

2、用声音表达的艺术

重音

英语的语调极其注意重音。要重点掌握英语的重音。英语主要是靠重音来调节语速的,而不是靠音节。发音对你的英语能否被他人理解的影响程度不如使用正确的重音。事实上,语言学家还没有在精确的发言方面达成一致。但重音却是全世界一致的。只要重音正确,就不必为自己的口音担心。

音调

找好自己发音的调。练习使自己不是通过咽喉的上部或鼻道发声的,而是通过咽喉的下部或胸前部发声。这样发声会更悦耳、圆润和热情,同时嗓子也不容易疲劳。

音量和发音的深度

演讲时要增大音量和发声的深度,这样才显得饱满和热情。

通过咽喉发高频声音听起来有点像儿童。孩子气的重音腔调和音调会导致听众猜度演讲人并未那么专业。要训练自己使用更为深度和饱满的声调演讲。

语速和韵律

用比平常更慢的语速。找一个英语说得好的人帮助你选择用于强调的单词或短语,从而获得一个令人感兴趣的声音旋律。

通常,说英语时,会感觉不如说自己的母语舒服,因此可能加快语速。紧张也可能导致说得过快。而会议演说需要比正常对话更慢的语速和更清楚的表达。

通过练习和周密的时间控制达到控制语速的目的。

生动地表达

用讲话、表情、微笑和手势,使演讲变得生动和有趣。尽自己所能将你的信息变得新颖和激动人心。与听众进行超越语言的交流。

如果一定要朗读时

- 尽可能多地抬头目视听众
- 至少腾出一只手进行非语言的交流
- 准备论文时考虑:
– 在要强调的音节处标注重读符号
– 标注需要停顿的地方
– 划出需要加强语气的短语
– 大声地练习

过渡性的词语

在话语中通过过渡性词汇从一张片子进入下一张。
as you see,
having said this,
once again we,
and, yes, the,
well,
for example,
now to our surprise,
actually,
anyhow,
all right, so.

3、身体语言、自如演讲

眼神的交流

不要老盯着PPT。短暂看一下屏幕,提醒自己听众正在看到的是什么,或偶尔用激光笔强调莫个要点。大部分时间,注视听众。

必须做出勇敢的样子,专心地注视听众。表示出你正在与他们对话的样子,显示你多么希望他们能理解你。

从左到右,从前到后。在每个地方停留5~10秒或更长一点。在大量听众中,可以直接看着别人的眼睛。

保持身体的开放

尽可能让身体的前面部分全部面向听众。张开双臂、运用手势。绝不要背对听众。

不要依赖屏幕,熟悉自己的幻灯片。注意力集中到听众。

避免前后摇摆,特别避免后退。可以走动一下,让自己看起来比较舒服。

用双手传达信息和热情。训练自己的手做一些简单的手势,比如手掌向上、手指分开、大拇指与另一手指轻触。

激光笔

不要一直开着。而是用单个稳定的光点在希望解释的地方准确地停留2~3秒,此时要保持沉默,然后关闭激光笔开始讲话。

将一只手放在握激光笔的另一只手的手腕处,帮助稳定。准确地将光点打到需要的地方,甚至不需要转过身去,这样给人的感觉就非常地专业。

练习

大声通读幻灯片,并为自己计时,必要时删减材料。控制音量和声音的厚度。想象身边就是听众。慢、慢、慢,尽量仔细而热情地解释你的工作。

按时结束。最后简单地说一句:谢谢各位。

巧妙地回答问题

让自己的声音大些,仔细听,走向提问者。

可以请提问者改述问题,或请他会后来交流。

可以要求提问者重复问题,使其它人听见。

或说:我不明白你的问题,请解释一下;这是一个好问题,我需要思考一下;我希望我能回答这个问题。

可以依靠听众,问:有人能帮助我回答这个问题吗?

最后

注意挺直站立、自信、微笑。专注于:1)讲述故事;2)交流;3)发展科学。

Next Page »