2014-04-23 33 views
-5

我正在做一個項目建模,圍繞意大利麪醬的流程,使用稱爲的斯托克斯流的BEMLIB代碼prtcl_3d_ss_visualize.m可從「http://dehesa.freeshell.org/BEMLIB/」獲得。下面是代碼:MATLAB:???在一個賦值A(I)= B中,B和I中的元素數必須相同

%--- 
file2 = fopen('prtcl_3d_ss_visualize.m') 
Npnt = fscanf(file2,'%f',[1,1]) 
Nvert = fscanf(file2,'%f',[1,1]) 
Nface = fscanf(file2,'%f',[1,1]) 
vert = fscanf(file2,'%f',[3,Nvert]); 
wall = fscanf(file2,'%f',[1,1]) 
fclose(file2) 
%--- 

for i=1:Nvert 
save = vert(2,i); 
vert(2,i) = vert(3,i); 
vert(3,i) = save; 
end 

Ic=0; 
for i=1:Nface 
for j=1:Npnt 
    Ic=Ic+1; 
    fac(j,i) = Ic; 
end 
end 

patch('faces',Nfac’,'vertices',vert’,... 
     'FaceColor','y',... 
     'FaceLighting','phong',... 
     'BackFaceLighting','lit') 
%light('Position',[1 3 2]); 
%light('Position',[-3 -1 3]); 
%material dull 
%material shiny 
%axis vis3d off 
axis([-1.5 1.5 -1.5 1.5 -0.5 2.5 ]) 
%view(45,34) 
xlabel('x') 
ylabel('z') 
zlabel('y') 

xw(1)=-1.5; zw(1)=-1.5; yw(1)=wall; 
xw(2)= 1.5; zw(2)=-1.5; yw(2)=wall; 
xw(3)= 1.5; zw(3)= 1.5; yw(3)=wall; 
xw(4)=-1.5; zw(4)= 1.5; yw(4)=wall; 
xw(5)=-1.5; zw(5)=-1.5; yw(5)=wall; 
patch(xw,zw,yw,yw); 
hold off 

輸入查詢MATLAB中的代碼時,我遇到了幾個錯誤,其中第一個我解決了不斷變化的fopen(「prtcl_3d」)給fopen(「partcl_3d_ss_visualize.m」),這是名他檔案。 我碰到了第二誤差是其中I輸入

patch('faces',Nfac’,'vertices',vert’,... 
     'FaceColor','y',... 
     'FaceLighting','phong',... 
     'BackFaceLighting','lit') 

NFAC」被orighinally fac'but我得到錯誤‘???未定義函數或變量FAC’所以我改成了已定義的變量NFAC。

我現在面臨的問題是代碼的最後部分。當我輸入的第一行

xw(1)=-1.5; zw(1)=-1.5; yw(1)=wall; 

我得到的錯誤消息:「???在一個分配A(I)= B,B中的元素數量,我必須是相同的。」

我得到這個xw,zw,yw其餘部分的輸入,我做錯了什麼?

非常感謝,

阿基洛夫

回答

0

我解決了不斷變化的fopen( 'prtcl_3d')到 的fopen( 'partcl_3d_ss_visualize.m'),這是他文件的名稱。

不,你沒有解決它,你打破它。在最初的劇本,partcl_3d_ss_visualize.m(或我的版本在互聯網絡中,至少),我們有這些行:

file2 = fopen('prtcl_3d.net') 
Npnt = fscanf(file2,'%f',[1,1]) 
Nvert = fscanf(file2,'%f',[1,1]) 
Nface = fscanf(file2,'%f',[1,1]) 
vert = fscanf(file2,'%f',[3,Nvert]); 
wall = fscanf(file2,'%f',[1,1]) 
fclose(file2) 

這將打開某些類型的數據文件prtcl_3d.net,並加載一些所需的值(此文件大概是包含在您下載的代碼中的某個地方)。你所做的是讓腳本自己加載並在文件的開頭嘗試找到一些不存在的浮點數。

完成此操作後,wall的輸出可能爲空。因此,yw(1)(1個元素)和wall(零個元素)具有不同的大小,當您嘗試將另一個分配給另一個時,會出現錯誤。

重要說明:它不會提前發生錯誤,因爲它能夠打開文件並嘗試讀取某些內容 - 檢查讀取的內容是否正確是您的工作。在這種情況下,只需手動查看您的工作空間就足夠了。在其他情況下,可以使用isempty,isnumeric,size等功能完成錯誤檢查,具體取決於您期望的輸出類型。


關於fac/,我想象,這個腳本並不是孤立的,你應該這樣一個創建正確的變量之前運行的腳本或功能。

它說,網站上:

BEMLIB是Fortran 77的的邊界元軟件庫和C. Pozrikidis,實用指南,以邊界元陪同書Matlab的代碼(用Fortran 90的兼容)使用軟件庫BEMLIB的方法,「Champan & Hall/CRC,(2002)。這本書的章節8-12包含BEMLIB用戶指南

我建議你需要的BEMLIB用戶指南,以幫助您瞭解代碼中並和如何使用它,直到你明白,你不該不會對它做任何改變。

+0

非常感謝你,我是編碼新手(很清楚),並且可能比我能咀嚼更多,你的回答非常有幫助。 – AkilMATLAB

相關問題