我想创建一个函数,它接受n个变量的函数,foo
作为字符串,在点x
进行评估。
我有以下代码,我想做什么。
function c = test(foo,n,x)
X=sym('x',[1,n]);
h(X(1:n)) = eval(foo);
H=matlabFunction(h);
A=num2str(x(1));
for i = 2:n
A=[A,',',' ',num2str(x(i));
end
c = H(eval(A));
end
这里的问题是matlabFunction H只接受输入,因为每个参数都用逗号分隔。但是,它将x视为单个输入向量,因此返回错误。例如,如果我使用
foo = 'X(1).^2 + X(2).^2'
,n = 2,x = [1,1],它无法分辨H([1,1])和H(1,1)之间的差异......因此错误。当然,使用n = 2很容易修复,但如果我的函数有任意数量的变量怎么办?
我希望这是有道理的,谢谢你的帮助。 -DS
答案 0 :(得分:0)
我明白了,这是一个可以完成所要求的功能。
%takes a function f as a string, in terms of X(1),X(2),..X(n)
%for example f = ('X(1).^2+X(2).^2+X(3).^2' is a function of 3 variables.
%n is the number of variables of f
%x is the desired vector to evaluate at.
function c = test(foo,n,x)
X = sym('x',[1,n]);
h(X(1:n)) = eval(foo);
H = matlabFunction(h);
args=num2cell(x);
c = H(args{:});
end