2015-08-20 3 views
0

Я пытаюсь построить трехмерный график между двумя скалярами и одной матрицей для каждой из его записей. На компиляции он дает мне «подматрица определена неправильно» ошибка в строке 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 аргумента вектора и матрица для значений функций. Поэтому я расширил u до тензора. При каждой операции в вашем коде я добавил текущее измерение термина. Теперь дается прозрачная обработка вашего расчета. Для построения графика вы должны использовать plot3d (одиночные значения) или команду surf (поверхность). В 3-мерном сюжете вы хотите две карты 2 вектора (hx,ht) с dim n и m до скаляра z. Поэтому вы достигаете (nxm) -матрицы с вашими результатами. Это то, что вы хотите сделать? В настоящее время у вас есть 13 значений для каждого u(i,j,:) - запись, но вы хотите (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 
Смежные вопросы