2014-10-15 4 views
0

Я вижу следующее поведение в компьютерах Windows 2013 и 2014a:MatLab: идентичная функция получает два разных результата

Кто-то отправляет мне файл .mat. В этом файле определена функция fi (th, beta). В командной строке я вызываю fi для двух значений (фактически бета - это матрица). Затем я нажимаю «изменить значение» для fi и ничего не меняю. Затем, когда я снова вызываю fi (th, beta), я получаю совершенно другое значение.

Как это может быть? Как я могу сказать, что такое «правильное» значение?

+0

Какова функция, определенная в файле '.mat'? Объявление делает ли функция что-либо для изменения переменных? Вы действительно не дали достаточной информации для того, чтобы кто-нибудь дал правильный ответ, что находится в файле '.mat' и что такое функция' fi'? – David

+1

Извините, Дэвид, я постараюсь предоставить дополнительную информацию. fi определяется как анонимная функция, на которую я полагаю: >> fi fi = @ (th, beta) D.^2. * beta (:, 1).^2. * (1-irf (th, beta)). * (IRF (й, бета) -бета (:, 3))^2./(irf(th,beta).*(1-beta(:,3)).^2).. irf - другая функция, определенная аналогично в файле .mat. –

+0

Сначала я боялся, что, поскольку отправитель файла назвал свою переменную бета-версию, он вызывал функцию бета-тестирования, но я считаю, что это не так (потому что нотация двоеточия заставляет MatLab смотреть на матрицу бета, а не на функцию) –

ответ

0

Причина, по которой возникает ваша проблема, заключается в том, что при нажатии значение значения на дескрипторе функции обновляется. В вашей функции используется D, которая была переменной при создании дескриптора функции. Предположим, что D теперь имеет другое значение, fi будет использовать новое значение после нажатия значение редактирования. Позвольте мне дать вам пример:

>> k = 2; 
>> f = @(x)k*x; 
>> f(4) 

ans = 

    8 

>> k = 4; 
>> f(4) 

ans = 

    8 

В этом примере к изменяется после е определяется. Однако f будет иметь свое первоначальное определение. Когда я использую , отредактируйте значение и ничего не измените, тем не менее он будет использовать новое значение k.

>> f % only to show the function has not changed 

f = 

    @(x)k*x 

>> f(4) 

ans = 

    16 

Надеюсь, это упростит вашу проблему.

Таким образом, ваш вопрос относительно правильного значения зависит от значений и функций, используемых внутри дескриптора функции.

+0

Спасибо! Понятно, что это происходит, когда я смотрю на него после прочтения вашего ответа. Я никогда бы не догадался, что функция «кэширует» значение. Отправитель файла должен был изменить значение D после редактирования функции, а затем отправить ее мне. –

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