基於MATLAB的分子相互作用的表徵模型

fpga&matlab發表於2020-10-01

分子在永不停息地作無規則運動。擴散現象是分子作無規則運動的例證。所謂擴散是指兩種不同的物質相互接觸時,彼此進入對方的現象。分子之間既有引力,又有斥力。固體能保持一定的形狀和體積且難以拉斷,說明分子之間存在引力,而固體和液體分子間保持一定的間隙且很難被壓縮,說明分子間又存在斥力。物質內分子間引力和斥力是同時存在的,引力和斥力都隨分子間距離的增大而減小,斥力減小得更快。當分子間距為某一定值r0時,引力等於斥力,此時分子處於平衡位置;當分子間距大於r0時,引力起主要作用;當分子間距小於r0時,斥力起主要作用。若分子間距大於分子直徑的10倍時,分子間作用力變得十分微弱,可以認為此時分子間作用力為零。

MATLAB是一種面向科學與工程計算的高階語言,它集科學計算、自動控制、訊號處理、神經網路和影像處理等學科的處理功能於一體,具有極高的程式設計效率。MATLAB是一個高度整合的系統,MATLAB提供的Simulink是一個用來對動態系統進行建模、模擬和分析的軟體包,它支援線性和非線性系統,能夠在連續時間域、離散時間域或者兩者的混合時間域裡進行建模,它同樣支援具有多種取樣速率的系統。在過去幾年裡,Simulink已經成為數學和工業應用中對動態系統進行建模時使用得最為廣泛的軟體包。

3.2 分子函式的設計

    在本例中,我們要通過輸入的座標值,來顯示分子的位置,所以我們首先來設計分子函式。其MATLAB程式碼如下所示:

x=linspace(x1,x2,Mx);

y=linspace(y1,y2,My);

z=linspace(z1,z2,Mz);

load pot.out;

data=pot(1:220881);

va=reshape(data,My,Mx,Mz);

load FF.out;

data1=FF(1:220881);

w=reshape(data1,My,Mx,Mz);

p = patch(isosurface(x, y, z, va,-0.36073643,w));

isonormals(x,y,z,va, p)

set(p, 'FaceColor', 'interp', 'EdgeColor', 'none');

hidden on

daspect([1 1 1])

view(3)

lighting phong

hsurf=isosurface(x, y, z, va,-0.3566);

vertices=hsurf.vertices(:,:);

save vertice.txt vertices -ascii;

faces=hsurf.faces(:,:);

save face.txt faces -ascii    ;     

·linspace

x=linspace(a1,a2,a3);a1為第一個元素,a2為最末一個元素,a3表示x共有a3個元素,每個元素間距相等。

·load

    載入外部資料。

·reshape

可以對陣列進行重組變形, Y = reshape(X,m,n) 前提條件 Y與X中所含的元素個數必須相等。則上述命令將X轉為 m*n的矩陣。

·isosurface

形成的曲面的點集

    那麼,我們可以得到如下的模擬結果。

3.3 分子定位設計

    本模組,我們主要設計這麼一個功能,輸入x,y,z座標值,然後在相應的位置顯示分子。在本章3.2,我們已經設計了分子函式,下面我們主要通過輸入座標值來顯示分子。其設計程式碼如下所示:

     其頂層程式碼為:

clc;

clear;

close all;

NUM=input('請輸入的要顯示的分子的個數');

for i=1:NUM

x1=input('請輸入分子X軸的座標上限MIN\n');

x2=input('請輸入分子X軸的座標下限MAX\n');

y1=input('請輸入分子Y軸的座標上限MIN\n');

y2=input('請輸入分子Y軸的座標下限MAX\n');

z1=input('請輸入分子Z軸的座標上限MIN\n');

z2=input('請輸入分子Z軸的座標下限MAX\n');

fenzi(x1,x2,y1,y2,z1,z2);

hold on;

end

為了使系統的顯示效果根據的明顯,我們修改分子函式。

……………………………………

%(x1,y1,z1)UP

hndl=plot3(x1,y1,z1);

set(hndl,'markersize',30,'marker','.','color','k');

A=text(x1,y1,z1,'A');

set(A,'fontsize',18,'color','k');

hold on

%(x1,y2,z1)UP

hndl=plot3(x1,y2,z1);

set(hndl,'markersize',30,'marker','.','color','k');

B=text(x1,y2,z1,'B');

set(B,'fontsize',18,'color','k');

hold on

%(x2,y1,z1)UP

hndl=plot3(x2,y1,z1);

set(hndl,'markersize',30,'marker','.','color','k');

C=text(x2,y1,z1,'C');

set(C,'fontsize',18,'color','k');

hold on

%(x2,y2,z1)UP

hndl=plot3(x2,y2,z1);

set(hndl,'markersize',30,'marker','.','color','k');

D=text(x2,y2,z1,'D');

set(D,'fontsize',18,'color','k');

hold on

%(x1,y1,z1)DOWN

hndl=plot3(x1,y1,z2);

set(hndl,'markersize',30,'marker','.','color','k');

E=text(x1,y1,z2,'E');

set(E,'fontsize',18,'color','k');

hold on

%(x1,y2,z2)DOWN

hndl=plot3(x1,y2,z2);

set(hndl,'markersize',30,'marker','.','color','k');

F=text(x1,y2,z2,'F');

set(F,'fontsize',18,'color','k');

hold on

%(x2,y1,z2)DOWN

hndl=plot3(x2,y1,z2);

set(hndl,'markersize',30,'marker','.','color','k');

G=text(x2,y1,z2,'G');

set(G,'fontsize',18,'color','k');

hold on

%(x2,y2,z2)DOWN

hndl=plot3(x2,y2,z2);

set(hndl,'markersize',30,'marker','.','color','k');

H=text(x2,y2,z2,'H');

set(H,'fontsize',18,'color','k');

hold on

lx2=[x1 x2];ly2=[y1 y1];lz2=[z1 z1];

BL2=plot3(lx2,ly2,lz2,'b');

set(BL2,'linewidth',1);

hold on

lx4=[x1 x2];ly4=[y2 y2];lz4=[z1 z1];

BL4=plot3(lx4,ly4,lz4,'b');

set(BL4,'linewidth',1);

hold on

lx8=[x1 x2];ly8=[y2 y2];lz8=[z2 z2];

BL8=plot3(lx8,ly8,lz8,'b');

set(BL8,'linewidth',1);

hold on

lx11=[x1 x2];ly11=[y1 y1];lz11=[z2 z2];

BL11=plot3(lx11,ly11,lz11,'b');

set(BL11,'linewidth',1);

hold on

lx1=[x1 x1];ly1=[y1 y2];lz1=[z1 z1];

BL1=plot3(lx1,ly1,lz1,'b');

set(BL1,'linewidth',1);

hold on

lx7=[x2 x2];ly7=[y1 y2];lz7=[z1 z1];

BL7=plot3(lx7,ly7,lz7,'b');

set(BL7,'linewidth',1);

hold on

lx9=[x2 x2];ly9=[y1 y2];lz9=[z2 z2];

BL9=plot3(lx9,ly9,lz9,'b');

set(BL9,'linewidth',1);

hold on

lx12=[x1 x1];ly12=[y1 y2];lz12=[z2 z2];

BL12=plot3(lx12,ly12,lz12,'b');

set(BL12,'linewidth',1);

hold on

lx3=[x1 x1];ly3=[y1 y1];lz3=[z1 z2];

BL3=plot3(lx3,ly3,lz3,'b');

set(BL3,'linewidth',1);

hold on

lx5=[x1 x1];ly5=[y2 y2];lz5=[z1 z2];

BL5=plot3(lx5,ly5,lz5,'b');

set(BL5,'linewidth',1);

hold on

lx6=[x2 x2];ly6=[y2 y2];lz6=[z1 z2];

BL6=plot3(lx6,ly6,lz6,'b');

set(BL6,'linewidth',1);

hold on

lx10=[x2 x2];ly10=[y1 y1];lz10=[z1 z2];

BL10=plot3(lx10,ly10,lz10,'b');

set(BL10,'linewidth',1);

hold on

我們對系統進行模擬,可以得到如下的結果。

·輸入一個分鐘的情況

 

圖3-2 分子位置顯示

·輸入二個分鐘的情況

圖3-2 多個分子的位置顯示模擬效果圖

相關文章