使用向量作为matlabFunctions的输入

时间:2014-05-05 22:26:01

标签: matlab

我想创建一个函数,它接受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

1 个答案:

答案 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