2016-11-16 5 views
0

Я хотел бы знать, как переопределить внутреннюю функцию с переменной, определенной в рабочей области в Matlab R2015a при запуске файла m.Matlab: как переопределить внутреннюю функцию с переменной в рабочей области

Я имею в виду, если я определяю:

function test 
fun1 
clear input 
load test 
plot(input) 
return 

function fun1 
input=1:10; 
save('test.mat','input') 
return 

и я бег теста, то я получаю:

Error using input 
Not enough input arguments. 

Error in test (line 8) 
plot(input) 

Matlab принимает входной сигнал в качестве встроеных функций.

Вы знаете, как это решить (без изменения имени переменной)?

Спасибо.

+0

Вы никогда не должны перезаписать встроенную функцию. (Чтобы избежать такой ошибки) – obchardon

+0

Но если вы создаете переменную или новый .m-файл, который как точное имя встроенной функции, эта встроенная функция будет «перезаписываться». – obchardon

+0

@obchardon Я не согласен. Это абсолютно не проблема, если вы знаете, что делаете, например, при перегрузке операторов для пользовательских классов ('plus()' и т. Д.). MATLAB даже предоставляет функцию ['builtin'] (https://www.mathworks.com/help/matlab/ref/builtin.html) (« _Execute встроенная функция из перегруженного метода »), чтобы вызвать исходную версию, когда это необходимо , || cardogar - это плохая практика «запускать переменные в существование», используя «load». Гораздо лучший подход - «A = load (...); var = A.someName', который менее запутан как для mlint, так и для людей. –

ответ

0

Решение дается в комментариях по @ Dev-İl

Лучше не порождать переменные в существование переменные в рабочей области.

Так что это сделало бы простой пример выше работы:

A=load('test.mat'); 
input=A.input 
0

Укажите точное имя файла, включая расширение. И лучше использовать переменную, которая будет принимать входные данные.

function test 
    fun1 
    clear input 
    data=load('test.mat'); 
    plot(data.input) 
    return 
end 
function fun1 
    input=1:10; 
    save('test.mat','input') 
    return 
end 

И если вы хотите использовать ту же структуру данных, вы можете использовать:

data.input=1:10; 
save('test.mat','-struct','data')