【问题标题】:Matlab, Symbolic functions,Matlab,符号函数,
【发布时间】:2015-01-15 18:14:41
【问题描述】:
  1. 如何让用户输入一个函数(例如:t)并将其存储为符号函数?
  2. 然后我想将所有符号函数存储在一个数组中: 假设我的第一个功能是:f1 ( and I have gotten information of f1 by user in step 1 as f1=t) 第二个是:f2 (and I have gotten information of f2 by user in step 1 as f2=t^2) 现在我想做一个数组 A= [ f1, f2]

这样,当我打电话给A(2) 时,它给了我f2,这反过来又给了我例如4 当我写 f2(2)

我已经知道如何将输入作为内联函数获取,并通过使用此程序 (http://www.mathworks.com/matlabcentral/fileexchange/33025-convert-inline-to-symbolic/content/inline2sym.m) 将其转换为 sym。但如果它存在,我想要一个更简单的方法。

【问题讨论】:

  • 根本不要使用inline 函数——它们效率低下,并且如文档所述,已弃用。您只需要 symsymfun 和基本的 Matlab 数组或单元格即可完成您所描述的操作。
  • symfun 类型的数组是不可能的,您必须使用元胞数组。
  • @Daniel:是的。这就是为什么我在评论中提到使用元胞数组的原因。 symfun 对象就像函数句柄。

标签: arrays matlab


【解决方案1】:

根据您的问题,在我看来,您想要/需要的不是真正的符号函数,而是函数句柄。如果是这种情况,我会选择下面的代码。为while 1 之类的“丑陋事物”道歉,...但它使示例保持简短:

A = {};
while 1
    str = input('Enter a function of t (simply press return to exit):','s');
    if isempty(str), break; end
    A{end+1} = str2func(['@(t) ' str]);
end

当我运行它时,我可以输入“t”的一些功能:

Enter a function of t (simply press return to exit):t
Enter a function of t (simply press return to exit):t.^2
Enter a function of t (simply press return to exit):sin(t)
Enter a function of t (simply press return to exit):

元胞数组A 包含:

A = 
    @(t)t    @(t)t.^2    @(t)sin(t)

你可以通过以下方式调用函数:

>>A{3}(pi/2)

ans =

     1

我希望我正确理解了您的问题并且这会有所帮助。

【讨论】:

  • 您应该使用str2func 而不是evalThis blog post 解释了原因(如果避免 eval 对您来说还不够)。我同意很多时候用户不需要符号数学,但 OP 确实在标题和问题中说“符号”并提到转换为 sym
  • @horchler:更正了str2func。关于符号部分,我的猜测是“符号”这个词更多的是语言问题而不是实际要求。 OP提供的示例仅涉及:用户输入的函数(例如字符串)的输入、存储和评估。
  • 感谢@Adrien 的帮助。
  • @RAMANISHSINGH 如果这对您有帮助,请不要忘记接受有效的答案! meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多