【问题标题】:How to evaluate functions at each points in matlab如何在matlab中评估每个点的函数
【发布时间】:2015-04-16 18:28:13
【问题描述】:

我需要解决两种类型的问题,我们有两个变量 f(x,y) 的函数: 一个是x,y是具有相同长度的向量,如何在每个(x_i,y_i)处评估函数。在第一维中,它只是 f(x)。如何在二维中实现这一点。

另一个是评估由 x 和 y 形成的网格的每个点的值,即 对每个 (i,j) 在每个点 (x_i,y_j) 进行评估

【问题讨论】:

  • 您需要更加具体。什么样的功能?你试过什么了?你自己做过研究吗?
  • 对于一个有两个变量的通用函数
  • Matlab 文档/帮助中心有很多这样的例子,你读过吗?
  • 为什么不能定义一个接受两个输入的函数,然后在两个输入上使用元素运算符(.*, ./, .^ 等)?这同样适用于值网格。
  • 是的,这正是我要说的。在您提供更多详细信息之前,我无法真正回答您的问题。

标签: matlab


【解决方案1】:

对于第一个问题,你能澄清一下吗?我想我看到了第一个维度的情况,但我不明白你所说的二维的意思。

关于网格,应该如下解决。 cartprod.m 是我在 here 找到的自定义笛卡尔积函数。

% Define Test Data
x = 1:5;
y = 2:4;

% Define Test Function
f = @(x,y) x*y;

% Permutate x/y as a grid
s = sortrows( cartprod(x,y) , 1 );

% Apply function for each permutation
a = arrayfun( f, s(:,1), s(:,2) );

% Reshape into matrix
M = reshape( a, 5, [] )   % Solution here

如果我误解了,请告诉我,并请为我澄清问题的前半部分!

【讨论】:

  • arrayfun 调用是不必要的。您可以在函数中使用.*,只需将向量直接放入f。它也快得多。
  • 在我的情况下是这样,但我的方法是针对一个更复杂的函数,该函数不容易矢量化。 OP 声明“对于具有两个变量的一般函数”:)
  • 真的吗? f = @(x,y) x.*y;a = f(s(:,1),s(:,2)); 有什么问题?
  • 啊,我明白了。够公平的!
【解决方案2】:

1.

除了其他解决方案,如果你定义带有向量属性的函数,剩下的就很容易了。

示例:

function f = myfunc(x)
%% x is a vector or matrix including y,z,.. vectors
%
f = (1 + ((x(:,1) + x(:,2) + 1).^2);

然后按如下方式轻松评估您的功能:

X = [1 1;2 3;1 -1];    % consider this your input data
f(X);

2.

另外,如果不想单独定义,函数也可以在现场定义:

f = @(x)(1 + ((x(:,1) + x(:,2) + 1).^2);
f(X)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多