Convert a symbolic vector to a list of scalar outputs for a function created by matlabFunction

조회 수: 1 (최근 30일)
When matlabFunction creates an anonymous function, its arguments are always scalars. But when I want to use the function, my data is in vector form. Indeed, when I create the matlab function, I don't know the size of the vector. Is there some way that I can convert an n x 1 vector into n scalars for the purpose of feeding it into my matlab function? Here's an example
syms c1 c2 c3 c4 c5 c6 c7 c8
n = 5;
c = sym('c',[n,1])
f = @(c) prod(c)
jacf= matlabFunction(jacobian(f(c)))
jacf is now a function with arguments c1 ... c5, specifically
jacf =
function_handle with value:
@(c1,c2,c3,c4,c5)reshape([0.0,c3.*c4.*c5,c2.*c4.*c5,c2.*c3.*c5,c2.*c3.*c4,c3.*c4.*c5,0.0,c1.*c4.*c5,c1.*c3.*c5,c1.*c3.*c4,c2.*c4.*c5,c1.*c4.*c5,0.0,c1.*c2.*c5,c1.*c2.*c4,c2.*c3.*c5,c1.*c3.*c5,c1.*c2.*c5,0.0,c1.*c2.*c3,c2.*c3.*c4,c1.*c3.*c4,c1.*c2.*c4,c1.*c2.*c3,0.0],[5,5])
If for example my vector c = 1:5, is there some way I can break it into scalars so that I can compute
jacf(1,2,3,4,5)
Or, better, is there a way I can convert jacf into an anonymous function whose vector argument is [c1,c2,c3,c4,c5]
Thanks for any suggestions!

채택된 답변

Andrei Bobrov
Andrei Bobrov 2018년 3월 15일
편집: Andrei Bobrov 2018년 3월 16일
n = 5;
c = sym('c',[n,1]);
jacf= matlabFunction(jacobian(prod(c)),'v',{c});
use
>> c = 1:5;
>> jacf(c(:))
ans =
120 60 40 30 24
or for vectors
function out = jacf(x)
n = numel(x);
out = prod(x(repmat((1:n-1)',1,n) + tril(ones(n-1,n))));
end
or
function out = jacf(x)
n = numel(x);
e1 = eye(n);
out = prod(repmat(x(:),1,n).*~e1 + e1);
end

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Code Generation에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by