2016-11-02 2 views
0

Посмотрев на другие решения с этим кодом ошибки, я не смог найти решение этой ошибки. Все переменные очищаются в моем командном окне, поэтому у меня нет никаких помех. После ввода >> part2a (1.0,0.5,0.1,0.05) я получаю сообщение об ошибке. Я предполагаю, что продолжаю идти, что другие части будут иметь те же проблемы.Индекс сообщения об ошибке превышает размеры матрицы

Индекс превышает размеры матрицы.

Ошибка в part2a (строка 12) y1 (j + 1) = y (j) + h1. * X;

function part2a(h1,h2,h3,h4) 
t=0; 
tf=10; 
n1=(tf-t)/h1; 
n2=(tf-t)/h2; 
n3=(tf-t)/h3; 
n4=(tf-t)/h4; 
y=0; 
x=(7.2*(sin(t))^2)-(0.208333*(1+y)^1.5); 
for j=1:n1 
    t(j+1)=t(j)+h1; 
    y1(j+1)=y(j)+h1.*x; 
end 
for j=1:n2 
    t(j+1)=t(j)+h2; 
    y2(j+1)=y(j)+h2*x; 
end 
for j=1:n3 
    t(j+1)=t(j)+h3; 
    y3(j+1)=y(j)+h3*x; 
end 
for j=1:n4 
    t(j+1)=t(j)+h4; 
    y4(j+1)=y(j)+h4*x; 
end 
t1=0:h1:10; 
t2=0:h2:10; 
t3=0:h3:10; 
t4=0:h4:10; 
plot(t1,y1,t2,y2,t3,y3,t4,y4); 
xlabel('Time in days'); 
ylabel('Change in depth of the tank in meters'); 
end 

ответ

0

Ваш y=0; не меняется. Его скаляр, а не вектор. Поэтому, когда вы выполняете y (2), вы получаете ошибку, так как y (2) не существует.

на основе ваших комментариев, чтобы у хранить последнее значение, можно сделать следующим образом, в первом цикле:

for j=1:n1 
    t(j+1)=t(j)+h1; 
    y1(j+1)=y+h1.*x; 
    y = y1(end); 
end 
+0

Как бы вы рекомендовать мне это исправить? Я попытался сменить y на нули (n4), и у меня появилось сообщение об ошибке, которое говорит о несоответствии размеров подзапросов. –

+0

@ B.Lott Зависит от того, что делает ваша программа и что означает 'y'. Если вы хотите использовать значение 0 для каждого 'y', просто измените' y (j) 'на' y'. – Marcin

+0

В этом случае y = 0 является начальным условием для первой итерации метода Эйлера. Я хочу, чтобы каждый y после этого заменил тот, который был до него в уравнении. –

Смежные вопросы