Ошибка «индексы индекса должны быть либо натуральными числами, либо логическими числами».не в состоянии понять почему? - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть эти 3 функции

function r = RingRead(n,p)
    r=( p * RingReadggg(n-1,p))+( (1-p)* RingReadggb(n-1,p));
end

function r = RingReadggb(n , p)
    if n <= 1
        r = 0;
    else
        r = ((1-p)* RingReadggb(n-1,p) )+ p^2 +( p(1-p)* RingReadggb(n-2,p));
    end
end

function r = RingReadggg(n , p)
    if n == 1
        r = p;
    else
        r = (p+p(1-p)+( (1-p)^2 * RingReadggb(n-2,p)));
    end
end

Ниже данная программа использует вышеуказанные функции.

for p = 0.50:0.05:1
    r =  RingRead(4,p);
    plot(p,r)
    hold on       
end

При запуске это выдает ошибку

???Индексы нижнего индекса должны быть либо действительными натуральными числами, либо логическими.

Ошибка в ==> RingRead> RingReadggg при 18 r = (p + p (1-p) + ((1-p) ^ 2* RingReadggb (n-2, p)));

Ошибка в ==> RingRead при 3 r = (p * RingReadggg (n-1, p)) + ((1-p) * RingReadggb (n-1, p));

Ошибка в ==> RingAvailability при 2 r = RingRead (4, p);

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Ваш код вылетает прямо здесь:

r = (p+p(1-p)+( (1-p)^2 * RingReadggb(n-2,p)))

n равно 3, а p равно 0,5

но что такое

p(1-p) 

?ты имеешь в виду p * (1-p)?

1 голос
/ 23 сентября 2011

Как говорится в сообщении, ошибка возникает в этой строке:

r = (p+p(1-p)+( (1-p)^2 * RingReadggb(n-2,p)));

Под p(1-p) вы действительно имеете в виду p * (1-p)? Введенный как p(1-p) интерпретируется как индексирование в p по индексу 1-p. Попробуйте изменить строку на:

r = (p+p*(1-p)+( (1-p)^2 * RingReadggb(n-2,p)));

Похоже, у вас такая же проблема и в RingReadggb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...