Векторизованная функция как выход matlabFunction - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь автоматизировать процесс в MATLAB.У меня есть символическая функция, которая должна быть преобразована в анонимную функцию.

По сути, у меня есть что-то вроде этого:

    syms x y z t
    var = [x y z t];
    f = x.^2+y;
    gf = gradient(f, var);
    gf_fun = matlabFunction(gf, 'vars', {var});

выдача в качестве вывода

    gf_fun =
    function_handle with value:
    @(in1)[in1(:,1).*2.0;1.0;0.0;0.0]

Теперь я хотел бы оценить это gf_fun в нескольких точках за раз, но, конечно, я получил странные результаты из-за того, как написано gf_fun .Например, если я хочу оценить gf_fun в 6 (разных) точках одновременно, я получу

    rng('deafult')
    vv = ones(6,4);
    gf_fun(vv)
    ans =
    1.3575
    1.5155
    1.4863
    0.7845
    1.3110
    0.3424
    1.0000
         0
         0

вместо матрицы с размерами 4x6, где каждый столбец является оценкойодной точки.

Я знаю, что обходным решением будет использование цикла for, то есть

    results = zeros(4,6);
    for i = 1:6
        results(:,i) = gf_fun(vv(i,:));
    end

, но я должен избегать его из-за причин выполнения кода.

Есть ли способ автоматизировать весь процесс, используя матрицу в качестве результата gf_fun при оценке различных точек одновременно?Итак, в принципе, существует простой способ заменить 0.0 и 1.0 в gf_fun на более общие zeros(size(in1)) и ones(size(in1)) автоматически?

Спасибо за васпомощь!

...