Azzera filtri
Azzera filtri

symbolic expression to function

3 visualizzazioni (ultimi 30 giorni)
Qun Wu
Qun Wu il 15 Lug 2017
Commentato: Walter Roberson il 17 Lug 2017
The following code is to obtain a formula of calculating the determinant of the symmetric matrix.
function [ yy ] = detF( xdm )
ni = (1 + xdm) * xdm /2;
xx = sym('xx', [ni,1]);
xM = sym('xM', [xdm,xdm]);
for i = 1:xdm
ia = i * (i-1) /2 +1;
ib = i + ia - 1;
xM(i, 1:i) = xx(ia : ib);
end
for j = 1:xdm-1
for k = j+1:xdm
xM(j,k) = xM(k,j);
end
end
y = det(xM);
yy = symfun(y,xx);
end
xdm is the demension of the matrix. You can test the code by 'detF(2)'. The code returns something like
yy(xx1, xx2, xx3) = - xx2^2 + xx1*xx3
However, the argument of the symfun is 3 elements, what I need is a vector input like yy(x) = -x(2)^2 + x(1)*x(3)
Any suggestion? Thank you in advance.
Qun

Risposte (1)

Walter Roberson
Walter Roberson il 16 Lug 2017
Use matlabFunction with the 'vars' option and pass {xx} as the value of the option, or possibly the transpose of that depending if you want row vectors or column vectors. To emphasize, for this situation you need to pass a cell array that contains a symbolic vector
  2 Commenti
Qun Wu
Qun Wu il 17 Lug 2017
Thank you for your reply. I tried matlabFunction and pass xx as the 'var' value. And I got @(xx1,xx2,xx3)xx1.*xx3-xx2.^2 which is not the required one. I need something like @(x) x(1)*x(3) - x(2)^2
Walter Roberson
Walter Roberson il 17 Lug 2017
yy = matlabFunction(y, 'vars', {xx})
Notice the {}

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by