首页 > 解决方案 > 处理函数 Matlab

问题描述

我开始在 Matlab 中使用函数句柄,我有一个问题,当我这样做时,Matlab 会计算什么:

y = (0:.1:1)';
fun = @(x) x(1) + x(2).^2 + exp(x(3)*y)

当我这样做时,Matlab 会计算什么:

fun = @(x) x + x.^2 + exp(x*y)

因为我正在评估这些函数的雅可比行列式(来自此代码)并且它给出了不同的结果。我不明白放 x(i) 或只放 x 的区别

标签: arraysmatlabsubscriptfunction-handle

解决方案


让我们定义一个向量vecvec = [1, 2, 3]

当您vec在第一个函数 as 中使用它时results = fun(vec),程序将仅采用向量、含义和 的x(1) = vec(1)特定x(2) = vec(2)元素x(3) = vec(3)。整个表达式将看起来像

results = vec(1) + vec(2).^2 + exp(vec(3)*y)

或更好

results = 1 + 2^2 + exp(3*y) 

但是,当您使用第二个表达式 asresults = fun(vec)时,它将vec在所有情况下都使用整个向量

results = vec + vec.^2 + exp(vec*y)

或更好

results = [1, 2, 3] + [1^2, 2^2, 3^2] + exp([1, 2, 3]*y)

您也可以清楚地看到,在第一种情况下,我真的不需要关心矩阵维度,并且变量的最终维度results与您的变量的维度相同y。在第二个示例中情况并非如此,因为您将矩阵vec和相乘y,这(在此特定示例中)会导致错误,因为vec变量具有维度1x3y变量11x1


推荐阅读