【问题标题】:how to input array into array of a function如何将数组输入到函数数组中
【发布时间】:2017-11-24 14:58:38
【问题描述】:

假设我有一个array[2 2] 的符号函数。每个元素代表一个功能。然后我用matlabFunction() 函数将它转换为函数处理程序。到目前为止一切都很好。例如,当我输入f(1,1) 时,我可以获得2x2 答案矩阵。如何输入向量而不是手动输入1 and 1。例如我想定义x0=[1 1],然后输入f(x0)。每次我得到Not enough input arguments. 它都会尝试输入1 to x,然后再输入1 to x 并给出答案。但是因为还有一个名为 y 的变量,所以它给出了输入参数不足的错误。有什么建议吗?基本上我想创建 f(x),其中 f 和 x 是矩阵。所以它变成了方程组。

例如:

variable1= [1 1]

 jac= @(a,b)reshape([b,a.*2.0+a.^2.*b.^2.*3.0,a+b.*2.0,a.^3.*b.*2.0],[2,2])
 jac(variable[1 1])
Not enough input arguments.

Error in symengine>@(a,b)reshape([b,a.*2.0+a.^2.*b.^2.*3.0,a+b.*2.0,a.^3.*b.*2.0],[2,2])

但是当

jac(1,1)

ans =

     1     3
     5     2

【问题讨论】:

  • 请在您的帖子中包含该符号函数和您的代码
  • @SardarUsama 完成
  • 复制这个变量1= [1 1] jac= @(a,b)reshape([b,a.*2.0+a.^2.*b.^2.*3.0,a +b.*2.0,a.^3.*b.*2.0],[2,2]) jac(variable[1 1]) 它将起作用。在把 jac(1,1) 重新创建我的问题之后,我还编辑了你可以从那里复制的问题
  • 谢谢让我现在检查

标签: arrays matlab function math


【解决方案1】:

用一个变量而不是两个变量来定义你的函数。即

jac = @(x) reshape([x(2), x(1).*2.0+x(1).^2.*x(2).^2.*3.0, ...
   x(1)+x(2).*2.0, x(1).^3.*x(2).*2.0], [2,2]);

现在您可以将其输入为jac(variable1),正如预期的那样返回:

ans =

     1     3
     5     2

% where variable1 = [1 1]

但是由于您通过应用matlabFunction() 获得了该匿名函数,因此您需要在制作符号函数时进行相应的更改,即使用syms x 而不是syms a b 并将a 替换为@ 987654329@ 和 bx(2) 在您的代码中。

【讨论】:

  • 但是这个函数来自matlab,我没有定义。这是一个很长的代码,这就是为什么我给出了它的一部分。但一切都应该自动化。有没有一种方法可以让 matlab 按照您的建议将现有函数定义为一个变量?
  • 因为代码需要输入函数的导数,所以必须有不同的变量名才能得到它的雅可比函数?
  • @ssovukluk 正如您所写,您使用matlabFunction 转换了您的函数,如果您显示转换前的函数,则可以根据一个变量来定义它
  • @ssovukluk 您可以通过在代码中使用syms x 而不是syms a b 并用x(1)b 替换ab 来解决这个问题。如果你这样做,我非常肯定你的问题会得到解决
  • @ssovukluk 似乎是一个有趣的 AI。祝你工作顺利!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多