0

2 つのスカラーと各エントリの 1 つの行列の間に 3D グラフをプロットしようとしています。コンパイルすると、11行目に「サブマトリックスが正しく定義されていません」というエラーが表示されます。コード:

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

助けてください。

4

1 に答える 1

0

3 次元の Figure の場合、2 つの引数ベクトルと関数値の行列が必要です。そこで、u をテンソルに展開しました。コード内のすべての操作で、用語の現在の次元を追加しました。これで、計算の透過的な処理が提供されます。プロットには、plot3d(single values) またはsurf(surface) コマンドを使用する必要があります。3 次元プロットでは、(hx,ht)次元 n と m を持つ 2 つのマップ 2 ベクトルがスカラー に必要zです。したがって、結果で (nxm)-matrix に到達します。これは、あなたがしたいことですか?現在、各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
于 2015-10-12T09:49:18.933 に答える