2014-09-21 4 views
-2

У меня есть метод, который используется внутри метода, каждый из них работает хорошо независимо друг от друга, но когда используется внутри одного возникает ошибкаВложенные функции в MATLAB

function [cov]=CC(a,b) 

     meana=mean(a); 
     meanb=mean(b); 
     entity=0; 

     for k=1:10 
      entity=entity+((a(1,k)-meana) * (b(1,k)-meanb)); 
     end 

     cov=entity; 

работает нормально, но если он используется внутри этого метода возникают некоторые ошибки что говорит

??? Попытка получить доступ к b (1,10); индекс за пределами границ, потому что размер (b) = [1,9].
Ошибка в ==> CC в 9
entity=entity+((a(1,k)-meana) * (b(1,k)-meanb));
Ошибка в ==> CM на 8
e=CC(dim(1,i:10),dim(1,j:10));

Функция CM показана ниже

function [covM]=CM(a,b) 

    dim=[a b]; 

    for i=1:2 
     for j=1:2 
      e=CC(dim(1,i:10),dim(1,j:10)); 
     end 
    end 

    covM=e; 

Так что делает это заявление " ??? Attempted to access b(10); index out of bounds because numel(b)=9 " означает? b является [1,10] не [1,9]

+1

ошибка явно. b - вектор [1,9]. поэтому доступ к индексу 10 невозможен. – ASantosRibeiro

+0

Кроме того, ошибка возникает из-за того, что вы уменьшаете размер dim-массива в строке 'CC (dim (...', используя индекс цикла – darthbith

ответ

0

исходной переменной «Ь» является 1x10, но в строке:

e=CC(dim(1,i:10),dim(1,j:10)); 

вы на самом деле вызвать функцию CC, которая получает две переменные, и относиться к ним снова, как a, b , но теперь они разные:

dim(1,i:10) сейчас (внутри CC) называется a

dim(1,j:10) сейчас (внутри CC) называется b.

Из-за цикла, когда j = 2, тогда dim(1,j:10) - 1x9, и поэтому переменная b, что внутри CC функция. это является причиной ошибки.

+0

спасибо, этот разумный ответ – user1841718

+0

Хорошо, вы приветствуете – Adiel

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