Как динамически инициализировать переменную - PullRequest
1 голос
/ 19 октября 2019

Я хочу в Matlab динамически инициализировать переменную. Мне это нужно, потому что я хочу, чтобы пользователь определял произвольно много констант и формулу, которая вычисляет это. Кроме того, я хочу иметь ползунок для настройки констант, чтобы они не могли быть заданы только в формуле. У меня есть формула, которая применяется к формуле пользователя, и в результате у меня есть дифференциальное уравнение, которое я хочу решить. У меня есть рабочая программа, но она очень медленная.

Я пытался дать константы для функции, которая помещается в дифференциальное уравнение, и это работает. Тем не менее, я полагаю, потому что оценка «eval» очень медленная и функция внутри дифференциального уравнения очень часто вызывается, что тратится много времени на переопределение констант

самый маленький код не работает

function test1
    eval("x = 0;");
    function test2
    end
end

Я ожидаю, что x динамически создается и может использоваться внутри test2.

1 Ответ

0 голосов
/ 19 октября 2019

Вы можете использовать assignin , создав переменную в test2 и присвоив ей test1 (не вложенная функция).

Пример из справки Matlab:

function m = minRand2(n)
    assignfh2(n)

    A = fh(n)
    m = min(A(:));
end

function assignfh2(n)
    rand = 13*ones(n);
    fh = @(dim)rand(dim);
    assignin('caller','fh',fh)
end

затем позвоните

m = minRand2(2)

Пример с соглашением об именах, предложенным в вопросе:

test1 

function m = test1
    test2
    disp(name_var_a);
end

function test2
    eval(['value_a = "I am a string";']);
    assignin('caller','name_var_a', value_a)
end

Вызов test1 дает:

I am a string

Вы также можете использовать evalin.

...