k = 0.019;
Pstar = 100;
H = 33;
h = 0.1;
X = 36;
N = round(X/h);
t = zeros(1,N+1);
P = zeros(1,N+1);
P(1) = 84;
t(1) = 0;
yHeun = zeros(1,N+1);
yHeun(1)=84;
a = 1; b = 100;
while b-a >0.5
c = (a+b)/2;
for n = 1:N
t(n+1) = t(n) + h;
Inside = nthroot(sin(2*pi*t/12),15);
Harvest = c*0.5*(Inside+1);
P(n+1) = P(n) + h*(k*P(n)*(Pstar-P(n))-Harvest(n));
if P < 0
P = 0;
end
yHeun(n+1) = yHeun(n) + h*0.5*((k*P(n)*(Pstar-P(n))-Harvest(n))+(k*P(n+1)*(Pstar-P(n+1))-Harvest(n+1)));
end
if sign(yHeun(c)) == sign(yHeun(a))
c = a;
else
c = b;
end
end
disp(['The root is between ' num2str(a) ' and ' num2str(b) '.'])
Это код, который я пытаюсь запустить, и я знаю, что это, вероятно, отстой, но им ужасно кодирование и каждый раз, когда я пытаюсь запустить код, он говорит:индекс должен быть положительным целым или логическим?
Пытался доступ yHeun (50,5); индекс должен быть положительным целым числом или логическим.
Ошибка в Matlab3Q4 (строка 30) если знак (yHeun (с)) == знак (yHeun (а))
Я не имею ни малейшего представления, как сделать yHeun (с или или что-то еще) возвращать все, что было бы целым числом. Я не думаю, что я сделал while + for loop правильно.
Вопрос: «Начните с высшей границы H, равной 100 (высокое значение приводит к совокупности 0 после 36 месяцев), а нижняя граница равна 1. Поместите решатель из задачи № 3 выше в в середине цикла while и делите пополам верхнюю и нижнюю границы H до тех пор, пока разница между верхней и нижней границей не станет меньше 0,5 ".
На каком языке это? Вы должны добавить тег. –
Как стать лучше: http://uk.mathworks.com/help/matlab/debugging-code.html – nkjt