2015-08-20 20 views
0

我想繪製每個條目的2個標量和一個矩陣之間的3D圖形。在編譯它給我「角子錯誤定義」上線11碼錯誤:Scilab代碼給出的子矩陣錯誤地定義了錯誤

i_max= 3; 
u = zeros(4,5); 
a1 = 1; 
a2 = 1; 
a3 = 1; 
b1 = 1; 
hx = linspace(1D-6,1D6,13); 
ht = linspace(1D-6,1D6,13); 
for i = 1:i_max 
    for j = 2:4 
     u(i+1,j)=u(i,j)+(ht*(a1*u(i,j))+b1+(((a2*u(i,j+1))-(2*a2*u(i,j))+(a2*u(i,j-1)))*(hx^-2))+(((a3*u(i,j+1))-(a3*u(i,j-1)))*(0.5*hx^-1))); 
     plot(ht,hx,u(i+1,j)); 
    end 
end 

完整的錯誤消息:

-->exec('C:\Users\deba123\Documents\assignments and lecture notes\Seventh Semester\UGP\Scilab\Simulation1_Plot.sce', -1) 
+(((a3*u(i,j+1))-(a3*u(i,j-1)))*(0.5*hx^-1))) 
              !--error 15 
Submatrix incorrectly defined. 
at line  11 of exec file called by :  
emester\UGP\Scilab\Simulation1_Plot.sce', -1 

請幫助。

+0

你不應該爲你的'ht'和'hx'矩陣提供一個索引嗎? – spoorcc

回答

0

對於三維圖形,需要2個參數矢量和一個函數值矩陣。所以我把你擴展到一個張量。 在代碼中的每個操作中,我都添加了該術語的當前維度。現在,給出了一個透明的處理你的計算。對於繪圖,您必須使用plot3d(單個值)或surf(曲面)命令。 在3-dim圖中,您需要兩個具有dim n和m的map 2矢量(hx,ht)到標量z。因此,你用結果到達一個(nxm)矩陣。這是,你想要做什麼?目前,每個u(i,j,:) - 條目都有13個值,但每個數字都需要(13x13)。也許eval3d功能可以幫助你。

i_max= 3; 
u = zeros(4,5,13); 
a1 = 1; 
a2 = 1; 
a3 = 1; 
b1 = 1; 
hx = linspace(1D-6,1D6,13); // 1 x 13 
ht = linspace(1D-6,1D6,13); // 1 x 13 

for i = 1:i_max 
    for j = 2:4 
     u(i+1,j,:)= u(i,j)... 
        + ht*(a1*u(i,j))*b1... // 1 x 13 
        +(((a2*u(i,j+1)) -(2*a2*u(i,j)) +(a2*u(i,j-1)))*(hx.^-2))... // 1 x 13 
        +(((a3*u(i,j+1))-(a3*u(i,j-1)))*(0.5*hx.^-1)) ... // 1 x 13 
        + hx*ones(13,1)*ht; // added to get non-zero values 
        z = squeeze(u(i+1,j, :))'; // 1x13 

        // for a 3d-plot: (1x13, 1x13, 13x13) 
        figure() 
        plot3d(ht,hx, z'* z ,'*'); // 

    end 
end