第一篇:三体运动的matlab演示
三体运动的matlab演示
figure('name','三体运动');%设置标题名字
N=3;%x=zeros(1,N);y=zeros(1,N);vx=zeros(1,N);vy=zeros(1,N);ax=zeros(1,N);ay=zeros(1,N);ke=ones(1,N);x=[0,2,3];y=[0,2,0];%设置三个质点的初始位置
vx=[-1.5,1,-0.8];vy=[1.2,1,0.6];%设置三个质点的初始速度 ax=zeros(1,N);ay=zeros(1,N);ke=[1.5,6,2];%设置三个质点的电荷相对值 M=[1,5,1];%设置三个质点的质量相对值
dt=0.005;pausetime=0.002;%设置时间微小元长度,越小演示越精细,但越慢;设置暂停时间;
set(gcf,'doublebuffer','on')%消除抖动
set(gca,'xlim',[-7 7],'ylim',[-7 7]);%设置坐标轴范围 hold on;axis equal;for m=1:N
p(m)=plot(x(m),y(m),'color','k','marker','.','markersize',15);%所有质点初始位置以及大小设置 end
for jj=1:5000 %设定运行距离 for m=1:N
ax(m)=0;ay(m)=0;
for n=1:N
if m~=n
ax(m)=ax(m)+ke(n)*ke(m)*(x(n)-x(m))*((x(n)-x(m))^2+(y(n)-y(m))^2)^(-1.5)/M(m);%按吸引力的格式写的加速度,如果要改为排斥力,需要将等号后面的m和n交换位置
ay(m)=ay(m)+ke(n)*ke(m)*(y(n)-y(m))*((x(n)-x(m))^2+(y(n)-y(m))^2)^(-1.5)/M(m);
else
end
end
x(m)=x(m)+vx(m)*dt+0.5*ax(m)*dt^2;%计算质点的新位置 y(m)=y(m)+vy(m)*dt+0.5*ay(m)*dt^2;vx(m)=vx(m)+ax(m)*dt;vy(m)=vy(m)+ay(m)*dt;
set(p(m),'xdata',x(m),'ydata',y(m));%设置质点的运动过程 plot(x(m),y(m),'color','b');%画出三个质点的运动轨迹
if abs(x(m))>10||abs(y(m))>10 %如果质点已经运动到边框外面则停止运行,跳出该层循环
break;
end end
if abs(x(m))>10||abs(y(m))>10 %如果质点已经运动到边框外面则停止运行,停止运行 break;end
% pause(pausetime);%暂停一会 drawnow end
运行结果
说明:更改不同的参数得到不同的运行结果。
以上程序只是平面内的演示,希望读者根据平面内的模拟程序得到空间内的演示程序。也可以添加更多的质点,得到更多体的运动,不过会使得运行变慢,较好的计算机才能做到。如要添加到四个质点,则需要N=4;且x,y,vx,vy,ke,M都要相应的有四个初始值。
程序目前存在的问题:
当两个质点运动到一点(即发生碰撞时),会产生速度的突变,如何能较好解决这个问题? 如果能够,希望能得到空间内的演示。
见文库内本人所编写其他的matlab模拟。
第二篇:MATLAB学习心得体
MATLAB学习心得体
真正接触matlab已经一学期左右,我很喜欢matlab的简单的语法,易于绘制图形一开始就感觉跟变魔术一样简单的语句就会有精美的图形这就更加让我对他如痴如醉了,最先开始接触是在大二参加数学建模时,一开始就被他所吸引(一个简单的程序就可以绘制出精妙的立体图形)真正认识和了解他是在这学期的matlab课上这使得我有机会去进一步了解和探索他了。他不但有很强的图形绘制能力而且他其中包含的toolbox更是让人用起来得心应手这也使得我对他更加的感兴趣。
首先我要说的是现今的MATLAB已全部采用C语言编写,它既是一种编程环境,又是一种程序设计语言。在MATLAB中,以复矩阵作为基本编程单元,无须定义即可采用,且可随时改变尺寸。在MATLAB中,表达式的书写像在稿纸中演算一样。提供20多个工具箱函数。易扩展性是最重要的特征之一,友好的界面、易记的命令和简便的操作。可将C语言编写的程序移植进来。
其次我想说的是matlab的help功能 help:最有效的命令其实,可以这样说吧,如果离开matlab课本,我想我自己是基本上什么都不会.一遇到什么问题,通常我的第一反应是:help它帮我解决了matlab学习中的许多困难与障碍所以在有不懂得地方第一个想到的就是他的help功能。
最后我也想说的是MATLAB真是一个好工具,也只能是一个好工具。它可以作为一个平台,承载知识和算法,感谢MATLAB带给我的新思维,也许以后可能不会再用到但回想自己学习的过程从对被他的神秘所吸引到后来的喜欢再到学习其间也让自己体会到了一个完整的学习过程,也许这就是学习最终的结果得到的不一定是结果但方法肯定值得借鉴,回头只能看到自己的影子,希望明天有明媚的阳光!
第三篇:用python模拟三体运动
用python模拟三体运动
知乎不让传动图,大家可以移步我的博客wend.blog.ustc.edu.cn,上面有动图大四就要有大四的样子,最近闲来无事,想起来以前一直想做的一件事:模拟三体运动。正好可以练一练python。小试牛刀先从模拟二维正方形中,弹性小球的运动轨迹入手,熟悉相关操作。物理情景很简单,就是弹性小球位于正方形空间中,有某初速度,未与边界碰撞时进行匀速直线运动,与边界碰撞时发生弹性碰撞。模拟思路很简单,在t时间,位于r处,取小时间微元dt,认为小球在此微元内进行匀速直线运动,计算t+dt时刻的位置和速度,继续迭代。代码如下import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animation def simData(): dt = 0.0001 d1 = 0.25 d2 = 0.25 v1 = 12 v2 = 5 while True: d1+=v1*dt d2+=v2*dt if(d1>1)or(d11)or(d2无限模拟下去,可以发现如果小球的初始条件不是那么特殊,小球最终将遍历正方形中所有点。这里吐槽一下python的动画模块,太不直观,帮助简直不知所云,在用动画展示数据这方面,mathematica就做的非常好。知乎不能发动图,所以我将图片存放在请输入提取码 访问密码 b684 可以下载
模拟三体为了简单,假设三个物体质量相同,有着相同的引力系数,三个物体的在t时刻的位置r、速度v都保存下来,取小时间微元dt,计算每个球所受的引力,然后计算加速度(按照xyz三个分量计算),推出t+dt时刻的位置和速度,继续迭代。
代码如下import numpy as npimport matplotlib.pyplot as pltimport mpl_toolkits.mplot3d.axes3d as p3import matplotlib.animation as animationx1=[]x2=[]y1=[]y2=[]z1=[]z2=[]x3=[]y3=[]z3=[]dt=0.00002d11 =-10d12 = 0d13=0v11 =-23v12 = 20v13=0d21 = 100d22 = 0d23=5v21 = 14v22 = 38v23=0d31=0d32=100d33=45v31=0v32=-30v33=34g=1000000for i in range(5000000): d11+=v11*dt d12+=v12*dt d21+=v21*dt d22+=v22*dt d13+=v13*dt d23+=v23*dt d31+=v31*dt d32+=v32*dt d33+=v33*dt x1.append(d11)y1.append(d12)z1.append(d13)x2.append(d21)y2.append(d22)z2.append(d23)x3.append(d31)y3.append(d32)z3.append(d33)r12=pow(np.sqrt(pow(d11-d21,2)+pow(d12-d22,2)+pow(d13-d23,2)),3)+.1 r13=pow(np.sqrt(pow(d11-d31,2)+pow(d12-d32,2)+pow(d13-d33,2)),3)+.1 r23=pow(np.sqrt(pow(d31-d21,2)+pow(d32-d22,2)+pow(d33-d23,2)),3)+.1 a121=g*(d21-d11)/r12 a122=g*(d22-d12)/r12 a123=g*(d23-d13)/r12 a211=-a121 a212=-a122 a213=-a123 a131=g*(d31-d11)/r13 a132=g*(d32-d12)/r13 a133=g*(d33-d13)/r13 a311=-a131 a312=-a132 a313=-a133 a321=g*(d21-d31)/r23 a322=g*(d22-d32)/r23 a323=g*(d23-d33)/r23 a231=-a321 a232=-a322 a233=-a323 v11=v11+(a121+a131)*dt v12=v12+(a122+a132)*dt v13=v13+(a123+a133)*dt v31=v31+(a321+a311)*dt v32=v32+(a322+a312)*dt v33=v33+(a323+a313)*dt v21=v21+(a211+a231)*dt v22=v22+(a212+a232)*dt v23=v23+(a213+a233)*dt'''fig = plt.figure()ax = fig.gca(projection='3d')ax.plot(x2, y2, z2)ax2 = fig.gca(projection='3d')ax2.plot(x1, y1, z1)ax3 = fig.gca(projection='3d')ax3.plot(x3, y3, z3)#ani = animation.FuncAnimation(fig, blit=False,interval=0.01, repeat=True)plt.show()'''输出动画的代码如下import matplotlib.pyplot as pltimport mpl_toolkits.mplot3d.axes3d as p3import matplotlib.animation as animationdef update_lines(num, dataLines, lines): for line, data in zip(lines, dataLines): # NOTE: there is no.set_data()for 3 dim data...line.set_data(data[0:2, :num])line.set_3d_properties(data[2, :num])return lines# Attaching 3D axis to the figurefig = plt.figure()ax = p3.Axes3D(fig)# Fifty lines of random 3-D lines#data = [Gen_RandLine(25, 3)for index in range(1)]data=[np.array([x1,y1,z1])[:,0:1000000:1000],np.array([x2,y2,z2])[:,0:1000000:1000],np.array([x3,y3,z3])[:,0:1000000:1000]]# Creating fifty line objects.# NOTE: Can't pass empty arrays into 3d version of plot()lines = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1])[0] for dat in data]# Setting the axes propertiesax.set_xlim3d([-200,200])ax.set_xlabel('X')ax.set_ylim3d([-200,200])ax.set_ylabel('Y')ax.set_zlim3d([-200,200])ax.set_zlabel('Z')ax.set_title('3D Test')# Creating the Animation objectline_ani = animation.FuncAnimation(fig, update_lines, fargs=(data, lines),interval=.1, blit=False)line_ani.save('3body2.gif')plt.show()由于gif能保存的信息太少,只能保存前段的运动情况,所以最后的运动情况给出静态图。最后的样子如图所示可以发现在初期运动相当没有规律,几乎陷入混沌,但是一段时间以后,有一个物体远离其他两个,剩下的两个纠缠在一起进行二体运动比翼齐飞,我试过不少初始条件,发现最后几乎都会发生这种情况,可能这就是三个质量差不多的物体的最终归宿吧。两个人相濡以沫,小三只好相忘于江湖。写到这里我突然发现,上周的GRE考试由个题大意是宇宙中没有质量相近的三星系统,但是却被观测到了,要你用逻辑解释这个问题。呵呵呵,直接用数学物理解释了。如果早早写程序的话,也许可以当场把模拟扔到GRE出题人身边。。
等有时间继续尝试一个超大质量物体和两个小质量物体的运动情况。另一组混乱之治镇楼。可以看到这组虽然初始的时候运动极其混乱,但是最后仍然是双星相伴,另外一个远离。
另外补充一句,如果随机产生初始条件的话,最终形成几个行星绕着一个大质量恒星转的概率基本为0,大多数情况是星体们擦肩而过,永不回头。可见我们生活在如此稳定的太阳系是多么的幸运。
第四篇:MATLAB实验报告(三) 西安邮电大学
西安邮电学院
《Matlab》 实验报告
(三)2011-2012 学年第 1 学期
专业: 班级: 学号: 姓名:
自动化 自动0903
2011 年 10 月 20 日
实验三 MATLAB图形系统一、实验目的
1.掌握绘制二维图形的常用函数。2.掌握绘制三维图形的常用函数。
3.熟悉利用图形对象进行绘图操作的方法。
4.掌握绘制图形的辅助操作。
二、实验仪器和设备
计算机一台(带有MATLAB6.5或以上版本的软件环境)。
三、实验原理
1.二维数据曲线图
(1)绘制单根二维曲线 plot(x,y);(2)绘制多根二维曲线 plot(x,y)当x是向量,y是有一维与x同维的矩阵时,则绘制多根不同颜色的曲线。当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
(3)含有多个输入参数的plot函数 plot(x1,y1,x2,y2,…,xn,yn)(4)具有两个纵坐标标度的图形 plotyy(x1,y1,x2,y2)2.图形标注与坐标控制 1)title(图形名称); 2)xlabel(x轴说明)3)ylabel(y轴说明)4)text(x,y图形说明)5)legend(图例1,图例2,…)
6)axis([xmin xmax ymin ymax zmin zmax])3.图形窗口的分割 subplot(m,n,p)4.三维曲线
plot3(x1,y1,z1,选项1,x2,y2,选项2,…,xn,yn,zn,选项n)5.三维曲面 mesh(x,y,z,c)与surf(x,y,z,c)。一般情况下,x,y,z是维数相同的矩阵。X,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。
6.图像处理
(1)imread和imwrite函数 这两个函数分别用于将图象文件读入MATLAB工作空间,以及将图象数据和色图数据一起写入一定格式的图象文件。
(2)image和imagesc函数 这两个函数用于图象显示。为了保证图象的显示效果,一般还应使用colormap函数设置图象色图。
四、预习要求
1.复习二维与三维图形的绘图函数。2.复习图形辅助操作。
五、实验内容及步骤
1.设y[0.53sinx1x2]cosx,在x=0~2π区间取101点,绘制函数曲线。
函数 :
x=0:2*pi/100:2*pi;y=(0.5+3.*sin(x)./(1+x.*x))./cos(x);plot(x,y);grid title('x-y')xlabel('x')ylabel('y')
2.已知y1=x2,y2=cos(2x),y3=y1*y2,完成下列操作:(1)在同一坐标系下用不同的颜色和线型绘制三条曲线;
x=0:0.01:2*pi;y1=x.*x;y2=cos(2.*x);y3=y1.*y2;plot(x,y1,x,y2,x,y3)grid
(2)分别用条形图、阶梯图、杆图和填充图绘制三条曲线。
y3=y1.*y2;subplot(2,2,1);bar(x,y1,'r');title('bar(x,y1,“r”)');grid;subplot(2,2,2);fill(x,y1,'r');title('fill(x,y1,“r”)');grid;subplot(2,2,3);stairs(x,y1,'r');title('stairs(x,y1,“r”)');grid;subplot(2,2,4);stem(x,y1,'r');title('stem(x,y1,“r”)');grid
同理 y2,y3如下图 所示
3.已知
x,x02e y1x0In(x1x2),
2:在-5<=x<=5区间绘制函数曲线。
x=-5:0.1:5;y=((x+sqrt(pi))./exp(2)).*(x<=0)+1/2.*log(x+sqrt(1+x.^2)).*(x>0);plot(x,y);grid;
4.绘制函数的曲面图和等高线 zcosxcosyexy422
其中x的21个值均匀分布在[-5,5]范围,y的31个值均匀分布在[0,10],要求使用subplot(2,1,1)和subplot(2,1,2)将产生的曲面图和登高图画在同一个窗口上。代码 :
x=-5:(10/20):5;y=0:(10/30):10;[x,y]=meshgrid(x,y);z=cos(x).*cos(y).*exp(-sqrt(x.^2+y.^2)./4)subplot(2,1,1);mesh(x,y,z);subplot(2,1,2);meshc(x,y,z);
5.将图形窗口分成两格,分别绘制正割和余割函数曲线,并加上适当的标注。
要求:1)必须画出0到2,即一个周期的曲线。
2)正割曲线为红色点划线输出,余割曲线为蓝色实线输出。3)图形上面表明正割和余割公式,横轴标x,纵轴标y。4)将图形窗口分成两格,正割在上,余割在下。
代码 :
x=0:0.01:2*pi;y1=sec(x);y2=csc(x);subplot(2,1,1);plot(x,y1,'r');title('y=sec(x)');xlabel('x');ylabel('y');grid subplot(2,1,2)plot(x,y2,'b');title('y=csc(x)');xlabel('x');ylabel('y');grid
6.绘制极坐标曲线asin(bn),并分析参数a、b、n对曲线形状的影响。
a=5;b=pi/3;n=2;theta=0:0.01:5*pi;y=a.*sin(b+n.*theta);polar(theta,y,'r');
分析:a决定了最外圆的半径,b决定了扇形的分布情况,n决定了扇形的数目
7.将图形窗口分成两个窗格,分别绘制出函数:
y12x5y2x3x12
在[0,3]区间上的曲线,并利用axis调整轴刻度纵坐标刻度,使y1在[0,12]区间上,y2在[-2,1.5]区间上。
x=0:0.01:3;y1=x.*2+5;y2=x.^2-3.*x+1;subplot(1,2,1);plot(x,y1,'r');axis([0,3,0,12]);grid subplot(1,2,2);plot(x,y2,'r');axis([0,3,-2,1.5]);grid
8.画出函数
zx2y2sin(xy)的曲面及等高线图。
x=-10:0.1:10;y=-10:0.1:10;
[x,y]=meshgrid(x,y);z=x.^2+y.^2+sin(x.*y);mesh(x,y,z);meshc(x,y,z);
9.综合实例中,还有一种最常用的电力系统无源滤波器单调谐滤波器,其阻抗表达式为:
ZfnRj(nL1nC)Rj(n1L1n1C)
式中,n为n次谐波角频率,1为基波角频率。当设1L0.164609053H1,R0.1,C0.3F,n在[0.5,25]取值时,单调谐滤波器的阻抗Zfn与谐波次数n的曲线如图3-4所示,试编写程序完成曲线的画取(注意图中各个地方的标注均用程序实现)。
10.用曲面图表现函数zx2y2,x和y的范围从-4到4,设置当前图形的颜色板从黑色到暗红、洋红、黄色、白色的平滑变化,打开网格。
x=-4:0.01:4;y=-4:0.01:4;[x,y]=meshgrid(x,y);z=x.^2+y.^2;mesh(x,y,z);meshc(x,y,z);colorbar('hot');
11.根据xa22y2225a1绘制平面曲线,并分析参数a对其形状的影响。
x=-10:0.1:10;y=-10:0.1:10;a=-5:5;n=size(a);for i=1:n
eq1=(x.^2)/(a(i).^2)+(y.^2)/(25-a(i).^2);
plot(x,y);
drawnow
axis([-10 10-10 10])
pause(1)end
第五篇:三体书评
文明的灵魂史诗——三体书评(朱星光)
在多年以后,我都会记得看完《三体》的那个夜晚。合上书页,从桌前的小窗向外眺望,夜空如往常般静默,漆黑的天幕上缀着点点繁星,而此时此刻坐在屋内的我,心情却如汹涌的波涛,久久难平。
康德有句话屡屡被人们引用:“有两种事物,我们越是沉思,越感到它们的崇高与神圣,越是增加虔诚与信仰,这就是头上的星空和心中的道德法则。”因为我们对道德法则的虔诚与信仰,人类几十万年的文明绵延至今;因为我们对头上星空的敬畏,伴随着现代科学技术的发展,人类进入了太空时代,对自身的好奇和宇宙的探索使我们清楚地明白了这样一个事实,那就是我们周围的一切并非理所当然,而是奇迹。
我们居住在一个罕有的星球上,这里有合适的温度、适宜的光照、大气层和地磁场的庇护,微生物的存在改变了空气的结构,而昆虫们忙忙碌碌地把生命连缀在一起,这里有季候、洋流,有一个个精妙绝伦、生机勃勃、巧夺天工的生态系统,人类这个蓝色星球上的唯一智慧生命,在这里繁衍生息,代代相传,发展出了高度的文明。然而,越是向更高层次发展,越是向宇宙更深处前进,越是有一个问题萦绕在我们心头:在这个浩瀚的宇宙之中,我们究竟是不是孤独的?
《三体》这部小说,确切地说,应该是刘慈欣的《三体》“地球往事”三部曲完美地回答了上述问题,并给我们带来了科学与艺术上的多重思考和无穷享受。《三体》的故事起源于“文革”年代,然而这仅仅是它的起点,由此宇宙的恢弘图景缓缓展现在我们面前。
人类在无意和偶然中发现,宇宙中我们并不孤独,半人马星系存在着智慧生命三体文明。由于三体星系拥有三颗太阳,其不规则运动使三体世界的生存条件极为严酷,三体人的生活形态是地球文明完全难以想象的,对于这个奇异的世界,刘慈欣发挥了他在硬科幻上的特长,赋予了这个世界完全真实的物理规律和演化进程。地球文明就像个发现了新大陆的孩子,好奇地向宇宙中的其他文明挥了挥手。
然而故事的发展却出乎人类的期望,三体文明对地球文明进行了严苛的技术封锁,锁死了地球基础科学发展的同时,向太阳系派出了庞大的舰队。地球文明这时才发现,宇宙绝不是人类所想象的那般美丽,其他文明也并不那么友好,甚至深藏祸心。我们熄灭了寻友的篝火,在黑暗中瑟瑟发抖。《三体》写到了这里,完全可以圆满地结束,然而刘慈欣在《三体Ⅱ·黑暗森林》中又带领读者到达了一个新的高潮,面对三体文明的进攻,人类举全球之力,制订了“面壁计划”,凭借着人类对三体人天然的思维方式上的优势,四位“面壁人”独立设计的四套方案气势磅礴,构思独特,令人拍案叫绝。它们中的每一个,都让读者以为这是终极的解决方案,然而,这些都还只是铺垫和浮云。
假如人类在宇宙中并不孤独,那么我们与其他文明之间是什么关系?由此而生的“宇宙社会学”正是为了解决这个疑问。借由书中主人公提出的三条公理,看似平淡无奇,然而却是对抗三体文明入侵的最后底牌,我从中读到的是多年来未曾在类似文学作品中体会过的启示性的震撼,一种极致的满足,在它面前,我们只有惊叹。
如果说前两部着重的是对于宇宙丛林法则的冷酷描写和人类文明的挣扎抵抗,那么《三体Ⅲ·死神永生》则是对地球文明的本质思考。当人类苦心经营,想尽办法对抗三体世界却一次次失败,人类和三体人最终发现,我们都敌不过宇宙中其他极高文明的一次漫不经心的清理操作,一片小小的“二向箔”最终终结了地球人类的全部努力、荣誉、梦想、辉煌和光荣,那超乎一切之上的力量,要求宇宙归零重生。此时此刻,每一个读者都会有这样的疑问:既然如此,我们苦苦生存的意义何在?
面对宇宙中其他文明的兽性进攻,书中的主人公程心一次次地用近乎胆怯与懦弱的行为选择了人性而不是兽性,救赎了这个世界,使人类仍然能在宇宙浩瀚的星河和文明中与别不同。
这也许就是地球人类文明存在的终极意义,是地球文明的灵魂史诗。
在整个《三体》“地球往事”三部曲中,刘慈欣熟练地运用着各种前沿科技概念,在他的生花妙笔下,抽象的科学原理幻化成了具象的美丽。从三维空间进入四维碎片的迷幻体验,到太阳系被二维化的凄美壮丽;从跨度长达170亿年的时空穿越,到一个人为了暗恋的对象买下一颗遥远的星星作为礼物那琼瑶式的浪漫孤独;从三个隐喻深刻的童话故事,再到对人类未来世界的全景描述,细腻真挚却又极其恢弘磅礴。
从《三体》中,我们知道,科幻文学不仅仅是人类对宇宙的莫名乡愁,更是我们对命运可能的推演和实验。在理性科学原理中间,隐藏着与其他文学相同的终极悲悯,并且往往因为其宏大的叙事风格而更显人类命运的悲怆。它能让你完全沉浸在书桌旁的台灯能够照到的小小空间之中,摒除了喧哗的世界,它能让你了解自己的孤独、悲凉和在永恒时光中的小小位置,当人们发问:“科幻文学有什么用?”的时候,你可能很难回答,但是在夜阑人静,手不释卷之时你会发现,世界上各种接近真知的努力都有唯一之核,就是对存在的追问。它的浩瀚之美让我们的灵魂恐惧却安宁。
刘慈欣的《三体》成功地奠立了一个新的科幻空间以及许多新的科幻定律,并树立了一个崭新的高度,它华丽又荒凉,它告诉我们,可以用来打破无限空间的永恒沉默的,除了坐标广播、引力波、空间曲率驱动飞船外,目前可行的,就是我们的想象力和创造力。
文明的忧思
刘慈欣先生的长篇科幻小说《三体》终于推出了大结局,觊觎地球的外星文明和盘托出,并宣告了在四百年后等待人类的生存之战。至此,《科幻世界》上大半年的连载终于告一段落。《三体》作为计划中的《地球往事》的第一部,其完结篇不仅仅是一次漂亮的落幕,更是一场恢弘的开篇„„我几乎要忍不住要使用更多的溢美之辞。
《三体》的幻想源于经典物理中的三体问题,即三个体积质量相当的天体,在远离其它星系以致其它星系的引力影响可忽略不计的情况下,三个天体在互相引力的作用下互相围绕运行,其运行轨迹将产生不可预测的混沌。很多年来,数学家们一直希望能建立三体乃至多体问题的数学模型,可遗憾的是,得到的结果仅仅是三体问题在非限制条件下的不可解。刘慈欣正是基于这样的科学事实,用大胆的想象和严谨的推断,在三体星系的行星中构建了一个外星文明形态,并描绘了该文明在如同不可捉摸的命运一般的“恒纪元”与“乱纪元”[注1]的轮替中,数百次的毁灭和重生。三体的故事有着广袤的时间与空间纬度,其以明暗两条线索发展,一条描述了科学家叶文洁在目睹了文革的疯狂与愚昧之后,痛苦的思索着后工业时代对人本复归的扼杀以及人类文明种种深入骨髓的病态,在一次偶然的科学实验中,她利用太阳作为发射天线,向宇宙中发出了人类文明存在的信号,多年后,她竟然收到了来自另外一个文明的回复,该回复用急促的句子阻止着地球人进一步的沟通,因为“如果你们的世界被定位,那么你们将被入侵”,但是出于对人类文明的绝望以及对外来高等智慧道德观念的美好幻想,叶文洁毅然的向太空中发射了回复的讯息,向外星文明表示“人类文明病入膏肓,我们需要你们的帮助改造”„„于是,三体世界的舰队开始向地球前进,并通过“智子”[注2]锁死了地球科技的进步,使地球文明不至于在四百年后三体舰队到达地球时已经远远的超过三体世界的文明水平,同时,叶文洁也组织起所有地球上对人类文明深感厌倦的力量,成为地球上的三体叛军。另一条暗线则描述了三体文明的大致形态,由于三体星系运行的混沌,该文明一直生活在朝不保夕的不可预测当中,乃至于其文明经历了数百次的毁灭与重生,最后,他们抛弃了一切的人文情感,建立起一种机械般精确却冰冷的社会形态。
刘在《后记》中介绍,他希望描述一个零道德的宇宙图景,但是《三体》本身却并非是零道德的,它充满了对于人类社会的道德反思,从极权社会人性的泯灭,到人类追求利益的那条鲜血淋漓的途径,再到后工业时代的人类沙文主义以及人类发展与环境的关系,他精确的描述了人类社会产生的罪恶以及现代主义所担忧的科学、技术、工业给人文世界带来的冲击,并通过道德碰撞营造出戏剧冲突。刘本身在《三体》中未介入作任何的道德论断——事实上,虽然作为“反派”出现,叶文洁们所拥有的悲天悯人的情怀却让人不得不肃然起敬——但是这篇文章却处处透射出对真理、美好、平等等普遍伦理的向往,并闪现出不少的个体光辉,值得我们献上最高的赞礼。
《三体》的文字更像是一篇纪实文学,在前半段,我甚至完全把《三体》看成是一次对历史的控诉与批判,这增加了小说主题的厚度,《三体》虽然不是描述文革的小说,文革也差不多只占了六分之一的篇幅,但是这个精彩的开篇却加深了小说的道德寓意,乃至于其始终萦绕全篇。这类扎根在现实基础上的科学幻想,需要更为深厚的科普功底,乃至于刘自己都说,很容易写成“即无小说的生动,又无科普的正确”,不过刘的确做到了“小说的生动”与“科普的正确”,其在小说中涉及知识面可谓庞杂,包括基本粒子、天体研究、经典物理、纳米材料、计算机、数学、历史„„细节上的优秀举不胜举,包括那个三体星系的外星文明,简直就是《1984》的外星版!刘展现出的底蕴不得不让人惊叹,我得说,这一篇硬科幻即使不能称上最好,也已然挤身最优秀的作品之列。不过,个人以为,《三体》最高明之处并不在于其情节之“悬”与科幻之“硬”,而是在于其对零道德宇宙的构想,他将相对主义从人类社会之间升级到智慧文明与智慧文明之间,由于文明彼此都采用利于自身利益的道德观念,从而导致了全宇宙范围内普遍伦理观念的缺失——即零道德的宇宙。这是一个如此显而易见的隐寓,当我们将范围再缩小的人类文明的程度,这岂不就是一个零道德的世界诞生的深刻内因?
然而刘却并没有因此绝望。在《三体》里,有一个无足轻重的三体人在收到叶文洁的讯号以后,发出了阻止地球人进一步联络的警告信号,其对人类世界的同情与其个人英雄主义般的正直感超越了文明、种族的界限,这样的个体也正是道德宇宙能够建立,文明能和平共存的希望所在。而树立这样的个体范本,显然也正是作者最终的期望。
在结尾处,三体人成功的锁死了地球人的科技进步,三体的舰队将在四百年后到达地球,面对四百年后被毁灭的命运,科学家意志消沉,小说中的人物大史为了让他们振作起来,带他们来到一处郊外,那里正闹蝗灾,大史告诉科学家,相比人类与三体人,蝗虫与人类的技术差距更大,人类自文明诞生以来就希望灭绝蝗虫,但是蝗虫依然傲然于天地间。三体人与人类同样没有意识到的是,“虫子从未被消灭过”!
至此,《三体》展现出更为宏大的精神内涵,体现出包括人类在内的所有生命在追求生存与平等时那强大的生命的尊严!
我真是觉得没有比这个更好的结局了。