3

我正在尝试构建一个 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 函数添加更多代码,所以我想这样做。谢谢!

4

2 回答 2

3

匿名函数函数句柄以及数组索引。以x2 元素向量为例,定义和使用您的函数,例如:

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除了评估fat之外什么都不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)
于 2013-10-08T01:28:55.627 回答
3

您可能来自 C 背景 - 在 Matlab 中,x+1是添加的整个向量-x1不是偏移 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;

这似乎是你所要求的。

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

于 2013-10-08T03:18:39.523 回答