将函数发送到matlab函数

时间:2013-10-08 01:21:06

标签: matlab vector

我正在尝试构建一个matlab函数,该函数将评估作为参数发送的函数和向量。我很难弄清楚如何发送函数,以便可以在matlab函数中进行评估。我想出了如何在没有这个功能的情况下做到这一点,但我有点迷失在一个matlab函数中进行评估。以下是我的代码......

这就是我要做的......

x = [x1 x2]';
f = x(x1)^2 + 2 * (x2)^2

x = [5 10];
f = (5)^2 + 2 * (10)^2 % which I would like to return 225, not a column vector

这就是我所拥有的以及我所尝试过的......

x = [5 10]';

% without using a matlab function
% k = 1
% f = x(k)^2 + 2 * x(k + 1)^2;   % returns the correct answer of 225

f = x^2 + 2 * x^2       % complains about the scalar 2
f = x.^2 + 2 * x.^2     % returns a column vector [75; 300]
function [value] = evalFunction(f,x)
value = f(x);

我试过......

f = @(x) x.^2 + 2 * (x+1).^2;
value = evalFunction(@f,x)      %Error: "f" was previously used as a variable

所以我试过......

f = @(x) x.^2 + 2 * (x+1).^2;
value = evalFunction(f,x)       %value = [97;342]

我是matlab的新手所以感谢任何帮助。我一直在做一些研究,并在stackoverflow上找到了一些东西,但似乎无法让它工作。我已经看到有其他方法可以做到这一点,但我最终会在matlab evalFunction函数中添加更多代码,所以我想这样做。谢谢!

2 个答案:

答案 0 :(得分:3)

Anonymous functionsfunction handles以及数组索引。将x作为2元素向量,定义并使用您的函数,如:

f = @(x) x(1).^2 + 2 * x(2).^2;
value = evalFunction(f,x) % but you can just do f(x) if that is all you need

但是,如果evalFunction除了在f评估x之外什么都不做,那么您根本不需要它。只需f(x)

可替换地,

f = @(x1,x2) x1.^2 + 2*x2.^2;
value = evalFunction(f,x1,x2); % here your function will call it by f(x1,x2)

答案 1 :(得分:3)

你可能是从C背景来看 - 在Matlab中,x+1是添加x的整个向量1 - 而不是偏移1的元素。

您需要的功能是

f = @(x)x(1).^2 + 2 * (x(2)).^2;

或者,要更像“类似matlab”:

f = @(x) [1 2] * x(1:2)'.^2;

执行x的前两个元素的元素方形作为列向量,然后使用[1 2]进行矩阵乘法,得到

1 * x(1) .^2 + 2 * x(2) .^2;

这似乎是你要求的。

警告:没有机会测试这个......