第一篇:三體運(yùn)動的matlab演示
三體運(yùn)動的matlab演示
figure('name','三體運(yùn)動');%設(shè)置標(biāo)題名字
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];%設(shè)置三個質(zhì)點(diǎn)的初始位置
vx=[-1.5,1,-0.8];vy=[1.2,1,0.6];%設(shè)置三個質(zhì)點(diǎn)的初始速度 ax=zeros(1,N);ay=zeros(1,N);ke=[1.5,6,2];%設(shè)置三個質(zhì)點(diǎn)的電荷相對值 M=[1,5,1];%設(shè)置三個質(zhì)點(diǎn)的質(zhì)量相對值
dt=0.005;pausetime=0.002;%設(shè)置時間微小元長度,越小演示越精細(xì),但越慢;設(shè)置暫停時間;
set(gcf,'doublebuffer','on')%消除抖動
set(gca,'xlim',[-7 7],'ylim',[-7 7]);%設(shè)置坐標(biāo)軸范圍 hold on;axis equal;for m=1:N
p(m)=plot(x(m),y(m),'color','k','marker','.','markersize',15);%所有質(zhì)點(diǎn)初始位置以及大小設(shè)置 end
for jj=1:5000 %設(shè)定運(yùn)行距離 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;%計算質(zhì)點(diǎn)的新位置 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));%設(shè)置質(zhì)點(diǎn)的運(yùn)動過程 plot(x(m),y(m),'color','b');%畫出三個質(zhì)點(diǎn)的運(yùn)動軌跡
if abs(x(m))>10||abs(y(m))>10 %如果質(zhì)點(diǎn)已經(jīng)運(yùn)動到邊框外面則停止運(yùn)行,跳出該層循環(huán)
break;
end end
if abs(x(m))>10||abs(y(m))>10 %如果質(zhì)點(diǎn)已經(jīng)運(yùn)動到邊框外面則停止運(yùn)行,停止運(yùn)行 break;end
% pause(pausetime);%暫停一會 drawnow end
運(yùn)行結(jié)果
說明:更改不同的參數(shù)得到不同的運(yùn)行結(jié)果。
以上程序只是平面內(nèi)的演示,希望讀者根據(jù)平面內(nèi)的模擬程序得到空間內(nèi)的演示程序。也可以添加更多的質(zhì)點(diǎn),得到更多體的運(yùn)動,不過會使得運(yùn)行變慢,較好的計算機(jī)才能做到。如要添加到四個質(zhì)點(diǎn),則需要N=4;且x,y,vx,vy,ke,M都要相應(yīng)的有四個初始值。
程序目前存在的問題:
當(dāng)兩個質(zhì)點(diǎn)運(yùn)動到一點(diǎn)(即發(fā)生碰撞時),會產(chǎn)生速度的突變,如何能較好解決這個問題? 如果能夠,希望能得到空間內(nèi)的演示。
見文庫內(nèi)本人所編寫其他的matlab模擬。
第二篇:MATLAB學(xué)習(xí)心得體
MATLAB學(xué)習(xí)心得體
真正接觸matlab已經(jīng)一學(xué)期左右,我很喜歡matlab的簡單的語法,易于繪制圖形一開始就感覺跟變魔術(shù)一樣簡單的語句就會有精美的圖形這就更加讓我對他如癡如醉了,最先開始接觸是在大二參加數(shù)學(xué)建模時,一開始就被他所吸引(一個簡單的程序就可以繪制出精妙的立體圖形)真正認(rèn)識和了解他是在這學(xué)期的matlab課上這使得我有機(jī)會去進(jìn)一步了解和探索他了。他不但有很強(qiáng)的圖形繪制能力而且他其中包含的toolbox更是讓人用起來得心應(yīng)手這也使得我對他更加的感興趣。
首先我要說的是現(xiàn)今的MATLAB已全部采用C語言編寫,它既是一種編程環(huán)境,又是一種程序設(shè)計語言。在MATLAB中,以復(fù)矩陣作為基本編程單元,無須定義即可采用,且可隨時改變尺寸。在MATLAB中,表達(dá)式的書寫像在稿紙中演算一樣。提供20多個工具箱函數(shù)。易擴(kuò)展性是最重要的特征之一,友好的界面、易記的命令和簡便的操作??蓪語言編寫的程序移植進(jìn)來。
其次我想說的是matlab的help功能 help:最有效的命令其實(shí),可以這樣說吧,如果離開matlab課本,我想我自己是基本上什么都不會.一遇到什么問題,通常我的第一反應(yīng)是:help它幫我解決了matlab學(xué)習(xí)中的許多困難與障礙所以在有不懂得地方第一個想到的就是他的help功能。
最后我也想說的是MATLAB真是一個好工具,也只能是一個好工具。它可以作為一個平臺,承載知識和算法,感謝MATLAB帶給我的新思維,也許以后可能不會再用到但回想自己學(xué)習(xí)的過程從對被他的神秘所吸引到后來的喜歡再到學(xué)習(xí)其間也讓自己體會到了一個完整的學(xué)習(xí)過程,也許這就是學(xué)習(xí)最終的結(jié)果得到的不一定是結(jié)果但方法肯定值得借鑒,回頭只能看到自己的影子,希望明天有明媚的陽光!
第三篇:用python模擬三體運(yùn)動
用python模擬三體運(yùn)動
知乎不讓傳動圖,大家可以移步我的博客wend.blog.ustc.edu.cn,上面有動圖大四就要有大四的樣子,最近閑來無事,想起來以前一直想做的一件事:模擬三體運(yùn)動。正好可以練一練python。小試牛刀先從模擬二維正方形中,彈性小球的運(yùn)動軌跡入手,熟悉相關(guān)操作。物理情景很簡單,就是彈性小球位于正方形空間中,有某初速度,未與邊界碰撞時進(jìn)行勻速直線運(yùn)動,與邊界碰撞時發(fā)生彈性碰撞。模擬思路很簡單,在t時間,位于r處,取小時間微元dt,認(rèn)為小球在此微元內(nèi)進(jìn)行勻速直線運(yùn)動,計算t+dt時刻的位置和速度,繼續(xù)迭代。代碼如下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無限模擬下去,可以發(fā)現(xiàn)如果小球的初始條件不是那么特殊,小球最終將遍歷正方形中所有點(diǎn)。這里吐槽一下python的動畫模塊,太不直觀,幫助簡直不知所云,在用動畫展示數(shù)據(jù)這方面,mathematica就做的非常好。知乎不能發(fā)動圖,所以我將圖片存放在請輸入提取碼 訪問密碼 b684 可以下載
模擬三體為了簡單,假設(shè)三個物體質(zhì)量相同,有著相同的引力系數(shù),三個物體的在t時刻的位置r、速度v都保存下來,取小時間微元dt,計算每個球所受的引力,然后計算加速度(按照xyz三個分量計算),推出t+dt時刻的位置和速度,繼續(xù)迭代。
代碼如下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能保存的信息太少,只能保存前段的運(yùn)動情況,所以最后的運(yùn)動情況給出靜態(tài)圖。最后的樣子如圖所示可以發(fā)現(xiàn)在初期運(yùn)動相當(dāng)沒有規(guī)律,幾乎陷入混沌,但是一段時間以后,有一個物體遠(yuǎn)離其他兩個,剩下的兩個糾纏在一起進(jìn)行二體運(yùn)動比翼齊飛,我試過不少初始條件,發(fā)現(xiàn)最后幾乎都會發(fā)生這種情況,可能這就是三個質(zhì)量差不多的物體的最終歸宿吧。兩個人相濡以沫,小三只好相忘于江湖。寫到這里我突然發(fā)現(xiàn),上周的GRE考試由個題大意是宇宙中沒有質(zhì)量相近的三星系統(tǒng),但是卻被觀測到了,要你用邏輯解釋這個問題。呵呵呵,直接用數(shù)學(xué)物理解釋了。如果早早寫程序的話,也許可以當(dāng)場把模擬扔到GRE出題人身邊。。
等有時間繼續(xù)嘗試一個超大質(zhì)量物體和兩個小質(zhì)量物體的運(yùn)動情況。另一組混亂之治鎮(zhèn)樓??梢钥吹竭@組雖然初始的時候運(yùn)動極其混亂,但是最后仍然是雙星相伴,另外一個遠(yuǎn)離。
另外補(bǔ)充一句,如果隨機(jī)產(chǎn)生初始條件的話,最終形成幾個行星繞著一個大質(zhì)量恒星轉(zhuǎn)的概率基本為0,大多數(shù)情況是星體們擦肩而過,永不回頭??梢娢覀兩钤谌绱朔€(wěn)定的太陽系是多么的幸運(yùn)。
第四篇:MATLAB實(shí)驗(yàn)報告(三) 西安郵電大學(xué)
西安郵電學(xué)院
《Matlab》 實(shí)驗(yàn)報告
(三)2011-2012 學(xué)年第 1 學(xué)期
專業(yè): 班級: 學(xué)號: 姓名:
自動化 自動0903
2011 年 10 月 20 日
實(shí)驗(yàn)三 MATLAB圖形系統(tǒng)一、實(shí)驗(yàn)?zāi)康?/p>
1.掌握繪制二維圖形的常用函數(shù)。2.掌握繪制三維圖形的常用函數(shù)。
3.熟悉利用圖形對象進(jìn)行繪圖操作的方法。
4.掌握繪制圖形的輔助操作。
二、實(shí)驗(yàn)儀器和設(shè)備
計算機(jī)一臺(帶有MATLAB6.5或以上版本的軟件環(huán)境)。
三、實(shí)驗(yàn)原理
1.二維數(shù)據(jù)曲線圖
(1)繪制單根二維曲線 plot(x,y);(2)繪制多根二維曲線 plot(x,y)當(dāng)x是向量,y是有一維與x同維的矩陣時,則繪制多根不同顏色的曲線。當(dāng)x,y是同維矩陣時,則以x,y對應(yīng)列元素為橫、縱坐標(biāo)分別繪制曲線,曲線條數(shù)等于矩陣的列數(shù)。
(3)含有多個輸入?yún)?shù)的plot函數(shù) plot(x1,y1,x2,y2,…,xn,yn)(4)具有兩個縱坐標(biāo)標(biāo)度的圖形 plotyy(x1,y1,x2,y2)2.圖形標(biāo)注與坐標(biāo)控制 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是維數(shù)相同的矩陣。X,y是網(wǎng)格坐標(biāo)矩陣,z是網(wǎng)格點(diǎn)上的高度矩陣,c用于指定在不同高度下的顏色范圍。
6.圖像處理
(1)imread和imwrite函數(shù) 這兩個函數(shù)分別用于將圖象文件讀入MATLAB工作空間,以及將圖象數(shù)據(jù)和色圖數(shù)據(jù)一起寫入一定格式的圖象文件。
(2)image和imagesc函數(shù) 這兩個函數(shù)用于圖象顯示。為了保證圖象的顯示效果,一般還應(yīng)使用colormap函數(shù)設(shè)置圖象色圖。
四、預(yù)習(xí)要求
1.復(fù)習(xí)二維與三維圖形的繪圖函數(shù)。2.復(fù)習(xí)圖形輔助操作。
五、實(shí)驗(yàn)內(nèi)容及步驟
1.設(shè)y?[0.5?3sinx1?x2]cosx,在x=0~2π區(qū)間取101點(diǎn),繪制函數(shù)曲線。
函數(shù) :
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)在同一坐標(biāo)系下用不同的顏色和線型繪制三條曲線;
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??,?x?02?e y??1x?0?In(x?1?x2),??
2:在-5<=x<=5區(qū)間繪制函數(shù)曲線。
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.繪制函數(shù)的曲面圖和等高線 z?cosxcosye?x?y422
其中x的21個值均勻分布在[-5,5]范圍,y的31個值均勻分布在[0,10],要求使用subplot(2,1,1)和subplot(2,1,2)將產(chǎn)生的曲面圖和登高圖畫在同一個窗口上。代碼 :
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.將圖形窗口分成兩格,分別繪制正割和余割函數(shù)曲線,并加上適當(dāng)?shù)臉?biāo)注。
要求:1)必須畫出0到2?,即一個周期的曲線。
2)正割曲線為紅色點(diǎn)劃線輸出,余割曲線為藍(lán)色實(shí)線輸出。3)圖形上面表明正割和余割公式,橫軸標(biāo)x,縱軸標(biāo)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.繪制極坐標(biāo)曲線??asin(b?n?),并分析參數(shù)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決定了扇形的數(shù)目
7.將圖形窗口分成兩個窗格,分別繪制出函數(shù):
y1?2x?5y2?x?3x?12
在[0,3]區(qū)間上的曲線,并利用axis調(diào)整軸刻度縱坐標(biāo)刻度,使y1在[0,12]區(qū)間上,y2在[-2,1.5]區(qū)間上。
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.畫出函數(shù)
z?x2?y2?sin(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.綜合實(shí)例中,還有一種最常用的電力系統(tǒng)無源濾波器單調(diào)諧濾波器,其阻抗表達(dá)式為:
Zfn?R?j(?nL?1?nC)?R?j(n?1L?1n?1C)
式中,?n為n次諧波角頻率,?1為基波角頻率。當(dāng)設(shè)?1L?0.164609053H?1,R?0.1?,C?0.3F,n在[0.5,25]取值時,單調(diào)諧濾波器的阻抗Zfn與諧波次數(shù)n的曲線如圖3-4所示,試編寫程序完成曲線的畫?。ㄗ⒁鈭D中各個地方的標(biāo)注均用程序?qū)崿F(xiàn))。
10.用曲面圖表現(xiàn)函數(shù)z?x2?y2,x和y的范圍從-4到4,設(shè)置當(dāng)前圖形的顏色板從黑色到暗紅、洋紅、黃色、白色的平滑變化,打開網(wǎng)格。
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.根據(jù)xa22?y2225?a?1繪制平面曲線,并分析參數(shù)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
第五篇:三體書評
文明的靈魂史詩——三體書評(朱星光)
在多年以后,我都會記得看完《三體》的那個夜晚。合上書頁,從桌前的小窗向外眺望,夜空如往常般靜默,漆黑的天幕上綴著點(diǎn)點(diǎn)繁星,而此時此刻坐在屋內(nèi)的我,心情卻如洶涌的波濤,久久難平。
康德有句話屢屢被人們引用:“有兩種事物,我們越是沉思,越感到它們的崇高與神圣,越是增加虔誠與信仰,這就是頭上的星空和心中的道德法則?!币?yàn)槲覀儗Φ赖路▌t的虔誠與信仰,人類幾十萬年的文明綿延至今;因?yàn)槲覀儗︻^上星空的敬畏,伴隨著現(xiàn)代科學(xué)技術(shù)的發(fā)展,人類進(jìn)入了太空時代,對自身的好奇和宇宙的探索使我們清楚地明白了這樣一個事實(shí),那就是我們周圍的一切并非理所當(dāng)然,而是奇跡。
我們居住在一個罕有的星球上,這里有合適的溫度、適宜的光照、大氣層和地磁場的庇護(hù),微生物的存在改變了空氣的結(jié)構(gòu),而昆蟲們忙忙碌碌地把生命連綴在一起,這里有季候、洋流,有一個個精妙絕倫、生機(jī)勃勃、巧奪天工的生態(tài)系統(tǒng),人類這個藍(lán)色星球上的唯一智慧生命,在這里繁衍生息,代代相傳,發(fā)展出了高度的文明。然而,越是向更高層次發(fā)展,越是向宇宙更深處前進(jìn),越是有一個問題縈繞在我們心頭:在這個浩瀚的宇宙之中,我們究竟是不是孤獨(dú)的?
《三體》這部小說,確切地說,應(yīng)該是劉慈欣的《三體》“地球往事”三部曲完美地回答了上述問題,并給我們帶來了科學(xué)與藝術(shù)上的多重思考和無窮享受?!度w》的故事起源于“文革”年代,然而這僅僅是它的起點(diǎn),由此宇宙的恢弘圖景緩緩展現(xiàn)在我們面前。
人類在無意和偶然中發(fā)現(xiàn),宇宙中我們并不孤獨(dú),半人馬星系存在著智慧生命三體文明。由于三體星系擁有三顆太陽,其不規(guī)則運(yùn)動使三體世界的生存條件極為嚴(yán)酷,三體人的生活形態(tài)是地球文明完全難以想象的,對于這個奇異的世界,劉慈欣發(fā)揮了他在硬科幻上的特長,賦予了這個世界完全真實(shí)的物理規(guī)律和演化進(jìn)程。地球文明就像個發(fā)現(xiàn)了新大陸的孩子,好奇地向宇宙中的其他文明揮了揮手。
然而故事的發(fā)展卻出乎人類的期望,三體文明對地球文明進(jìn)行了嚴(yán)苛的技術(shù)封鎖,鎖死了地球基礎(chǔ)科學(xué)發(fā)展的同時,向太陽系派出了龐大的艦隊。地球文明這時才發(fā)現(xiàn),宇宙絕不是人類所想象的那般美麗,其他文明也并不那么友好,甚至深藏禍心。我們熄滅了尋友的篝火,在黑暗中瑟瑟發(fā)抖。《三體》寫到了這里,完全可以圓滿地結(jié)束,然而劉慈欣在《三體Ⅱ·黑暗森林》中又帶領(lǐng)讀者到達(dá)了一個新的高潮,面對三體文明的進(jìn)攻,人類舉全球之力,制訂了“面壁計劃”,憑借著人類對三體人天然的思維方式上的優(yōu)勢,四位“面壁人”獨(dú)立設(shè)計的四套方案氣勢磅礴,構(gòu)思獨(dú)特,令人拍案叫絕。它們中的每一個,都讓讀者以為這是終極的解決方案,然而,這些都還只是鋪墊和浮云。
假如人類在宇宙中并不孤獨(dú),那么我們與其他文明之間是什么關(guān)系?由此而生的“宇宙社會學(xué)”正是為了解決這個疑問。借由書中主人公提出的三條公理,看似平淡無奇,然而卻是對抗三體文明入侵的最后底牌,我從中讀到的是多年來未曾在類似文學(xué)作品中體會過的啟示性的震撼,一種極致的滿足,在它面前,我們只有驚嘆。
如果說前兩部著重的是對于宇宙叢林法則的冷酷描寫和人類文明的掙扎抵抗,那么《三體Ⅲ·死神永生》則是對地球文明的本質(zhì)思考。當(dāng)人類苦心經(jīng)營,想盡辦法對抗三體世界卻一次次失敗,人類和三體人最終發(fā)現(xiàn),我們都敵不過宇宙中其他極高文明的一次漫不經(jīng)心的清理操作,一片小小的“二向箔”最終終結(jié)了地球人類的全部努力、榮譽(yù)、夢想、輝煌和光榮,那超乎一切之上的力量,要求宇宙歸零重生。此時此刻,每一個讀者都會有這樣的疑問:既然如此,我們苦苦生存的意義何在?
面對宇宙中其他文明的獸性進(jìn)攻,書中的主人公程心一次次地用近乎膽怯與懦弱的行為選擇了人性而不是獸性,救贖了這個世界,使人類仍然能在宇宙浩瀚的星河和文明中與別不同。
這也許就是地球人類文明存在的終極意義,是地球文明的靈魂史詩。
在整個《三體》“地球往事”三部曲中,劉慈欣熟練地運(yùn)用著各種前沿科技概念,在他的生花妙筆下,抽象的科學(xué)原理幻化成了具象的美麗。從三維空間進(jìn)入四維碎片的迷幻體驗(yàn),到太陽系被二維化的凄美壯麗;從跨度長達(dá)170億年的時空穿越,到一個人為了暗戀的對象買下一顆遙遠(yuǎn)的星星作為禮物那瓊瑤式的浪漫孤獨(dú);從三個隱喻深刻的童話故事,再到對人類未來世界的全景描述,細(xì)膩真摯卻又極其恢弘磅礴。
從《三體》中,我們知道,科幻文學(xué)不僅僅是人類對宇宙的莫名鄉(xiāng)愁,更是我們對命運(yùn)可能的推演和實(shí)驗(yàn)。在理性科學(xué)原理中間,隱藏著與其他文學(xué)相同的終極悲憫,并且往往因?yàn)槠浜甏蟮臄⑹嘛L(fēng)格而更顯人類命運(yùn)的悲愴。它能讓你完全沉浸在書桌旁的臺燈能夠照到的小小空間之中,摒除了喧嘩的世界,它能讓你了解自己的孤獨(dú)、悲涼和在永恒時光中的小小位置,當(dāng)人們發(fā)問:“科幻文學(xué)有什么用?”的時候,你可能很難回答,但是在夜闌人靜,手不釋卷之時你會發(fā)現(xiàn),世界上各種接近真知的努力都有唯一之核,就是對存在的追問。它的浩瀚之美讓我們的靈魂恐懼卻安寧。
劉慈欣的《三體》成功地奠立了一個新的科幻空間以及許多新的科幻定律,并樹立了一個嶄新的高度,它華麗又荒涼,它告訴我們,可以用來打破無限空間的永恒沉默的,除了坐標(biāo)廣播、引力波、空間曲率驅(qū)動飛船外,目前可行的,就是我們的想象力和創(chuàng)造力。
文明的憂思
劉慈欣先生的長篇科幻小說《三體》終于推出了大結(jié)局,覬覦地球的外星文明和盤托出,并宣告了在四百年后等待人類的生存之戰(zhàn)。至此,《科幻世界》上大半年的連載終于告一段落。《三體》作為計劃中的《地球往事》的第一部,其完結(jié)篇不僅僅是一次漂亮的落幕,更是一場恢弘的開篇??我?guī)缀跻滩蛔∫褂酶嗟囊缑乐o。
《三體》的幻想源于經(jīng)典物理中的三體問題,即三個體積質(zhì)量相當(dāng)?shù)奶祗w,在遠(yuǎn)離其它星系以致其它星系的引力影響可忽略不計的情況下,三個天體在互相引力的作用下互相圍繞運(yùn)行,其運(yùn)行軌跡將產(chǎn)生不可預(yù)測的混沌。很多年來,數(shù)學(xué)家們一直希望能建立三體乃至多體問題的數(shù)學(xué)模型,可遺憾的是,得到的結(jié)果僅僅是三體問題在非限制條件下的不可解。劉慈欣正是基于這樣的科學(xué)事實(shí),用大膽的想象和嚴(yán)謹(jǐn)?shù)耐茢?,在三體星系的行星中構(gòu)建了一個外星文明形態(tài),并描繪了該文明在如同不可捉摸的命運(yùn)一般的“恒紀(jì)元”與“亂紀(jì)元”[注1]的輪替中,數(shù)百次的毀滅和重生。三體的故事有著廣袤的時間與空間緯度,其以明暗兩條線索發(fā)展,一條描述了科學(xué)家葉文潔在目睹了文革的瘋狂與愚昧之后,痛苦的思索著后工業(yè)時代對人本復(fù)歸的扼殺以及人類文明種種深入骨髓的病態(tài),在一次偶然的科學(xué)實(shí)驗(yàn)中,她利用太陽作為發(fā)射天線,向宇宙中發(fā)出了人類文明存在的信號,多年后,她竟然收到了來自另外一個文明的回復(fù),該回復(fù)用急促的句子阻止著地球人進(jìn)一步的溝通,因?yàn)椤叭绻銈兊氖澜绫欢ㄎ唬敲茨銈儗⒈蝗肭帧?,但是出于對人類文明的絕望以及對外來高等智慧道德觀念的美好幻想,葉文潔毅然的向太空中發(fā)射了回復(fù)的訊息,向外星文明表示“人類文明病入膏肓,我們需要你們的幫助改造”??于是,三體世界的艦隊開始向地球前進(jìn),并通過“智子”[注2]鎖死了地球科技的進(jìn)步,使地球文明不至于在四百年后三體艦隊到達(dá)地球時已經(jīng)遠(yuǎn)遠(yuǎn)的超過三體世界的文明水平,同時,葉文潔也組織起所有地球上對人類文明深感厭倦的力量,成為地球上的三體叛軍。另一條暗線則描述了三體文明的大致形態(tài),由于三體星系運(yùn)行的混沌,該文明一直生活在朝不保夕的不可預(yù)測當(dāng)中,乃至于其文明經(jīng)歷了數(shù)百次的毀滅與重生,最后,他們拋棄了一切的人文情感,建立起一種機(jī)械般精確卻冰冷的社會形態(tài)。
劉在《后記》中介紹,他希望描述一個零道德的宇宙圖景,但是《三體》本身卻并非是零道德的,它充滿了對于人類社會的道德反思,從極權(quán)社會人性的泯滅,到人類追求利益的那條鮮血淋漓的途徑,再到后工業(yè)時代的人類沙文主義以及人類發(fā)展與環(huán)境的關(guān)系,他精確的描述了人類社會產(chǎn)生的罪惡以及現(xiàn)代主義所擔(dān)憂的科學(xué)、技術(shù)、工業(yè)給人文世界帶來的沖擊,并通過道德碰撞營造出戲劇沖突。劉本身在《三體》中未介入作任何的道德論斷——事實(shí)上,雖然作為“反派”出現(xiàn),葉文潔們所擁有的悲天憫人的情懷卻讓人不得不肅然起敬——但是這篇文章卻處處透射出對真理、美好、平等等普遍倫理的向往,并閃現(xiàn)出不少的個體光輝,值得我們獻(xiàn)上最高的贊禮。
《三體》的文字更像是一篇紀(jì)實(shí)文學(xué),在前半段,我甚至完全把《三體》看成是一次對歷史的控訴與批判,這增加了小說主題的厚度,《三體》雖然不是描述文革的小說,文革也差不多只占了六分之一的篇幅,但是這個精彩的開篇卻加深了小說的道德寓意,乃至于其始終縈繞全篇。這類扎根在現(xiàn)實(shí)基礎(chǔ)上的科學(xué)幻想,需要更為深厚的科普功底,乃至于劉自己都說,很容易寫成“即無小說的生動,又無科普的正確”,不過劉的確做到了“小說的生動”與“科普的正確”,其在小說中涉及知識面可謂龐雜,包括基本粒子、天體研究、經(jīng)典物理、納米材料、計算機(jī)、數(shù)學(xué)、歷史??細(xì)節(jié)上的優(yōu)秀舉不勝舉,包括那個三體星系的外星文明,簡直就是《1984》的外星版!劉展現(xiàn)出的底蘊(yùn)不得不讓人驚嘆,我得說,這一篇硬科幻即使不能稱上最好,也已然擠身最優(yōu)秀的作品之列。不過,個人以為,《三體》最高明之處并不在于其情節(jié)之“懸”與科幻之“硬”,而是在于其對零道德宇宙的構(gòu)想,他將相對主義從人類社會之間升級到智慧文明與智慧文明之間,由于文明彼此都采用利于自身利益的道德觀念,從而導(dǎo)致了全宇宙范圍內(nèi)普遍倫理觀念的缺失——即零道德的宇宙。這是一個如此顯而易見的隱寓,當(dāng)我們將范圍再縮小的人類文明的程度,這豈不就是一個零道德的世界誕生的深刻內(nèi)因?
然而劉卻并沒有因此絕望。在《三體》里,有一個無足輕重的三體人在收到葉文潔的訊號以后,發(fā)出了阻止地球人進(jìn)一步聯(lián)絡(luò)的警告信號,其對人類世界的同情與其個人英雄主義般的正直感超越了文明、種族的界限,這樣的個體也正是道德宇宙能夠建立,文明能和平共存的希望所在。而樹立這樣的個體范本,顯然也正是作者最終的期望。
在結(jié)尾處,三體人成功的鎖死了地球人的科技進(jìn)步,三體的艦隊將在四百年后到達(dá)地球,面對四百年后被毀滅的命運(yùn),科學(xué)家意志消沉,小說中的人物大史為了讓他們振作起來,帶他們來到一處郊外,那里正鬧蝗災(zāi),大史告訴科學(xué)家,相比人類與三體人,蝗蟲與人類的技術(shù)差距更大,人類自文明誕生以來就希望滅絕蝗蟲,但是蝗蟲依然傲然于天地間。三體人與人類同樣沒有意識到的是,“蟲子從未被消滅過”!
至此,《三體》展現(xiàn)出更為宏大的精神內(nèi)涵,體現(xiàn)出包括人類在內(nèi)的所有生命在追求生存與平等時那強(qiáng)大的生命的尊嚴(yán)!
我真是覺得沒有比這個更好的結(jié)局了。