Я пытаюсь автоматизировать процесс в 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))
автоматически?
Спасибо за васпомощь!