你怎么在函数执行Element-wise业务处理?

22日视图(30天)
我希望所有函数处理执行elementwise操作执行。这样做的原因是我写了一个3 d数值积分方案只能计算出正确的答案与这些类型的功能。
我想要的是对任何用户输入一个函数说
func = @ (x, y, t) x * y * t
会自动改变,
func = @ x (x, y, t)。* y。* t
基本上我需要检查函数elementwise操作然后改变它,如果必要。我也想避免符号包一起如果可能的话。
任何帮助将不胜感激。

答案(2)

明星黾
明星黾 2021年4月2日
我将严厉批评建议 vectorize 函数。我不知道为什么它是“不推荐”等情况下的自你的,它是有用的。是相对简单的编写自己的版本,但是只要它继续存在,我就会使用它。(我有时用它来做element-wilse长表达式的操作我发现的问题,因为它是更容易比手动通过表情和vectorizing每个操作,或编写自己的函数到底什么vectorize)。
也看到了 str2func 函数。
1评论
Stephen23
Stephen23 2021年4月2日
编辑:Stephen23 2021年4月2日
“我不知道为什么它是“不推荐”等情况下的自你的,它是有用的。”
我猜是因为它作用于文本,处理函数的引入以来气馁是用于存储功能:
“此外,代码通常是更健壮的函数处理而不是字符串代表功能。”

登录置评。


Stephen23
Stephen23 2021年4月2日
编辑:Stephen23 2021年4月2日
没有简单的答案。根本你的要求包括交换运营商,就像如果你要求更换COS i:这个不太可能是微不足道的,如果在所有可能的在一般情况下。注意转换成字符串(例如,为了使用VECTORIZE)将立即失去所有绑定到本地变量和本地函数范围内定义的函数处理时,这也不是一个通用的解决方案。
AFAIK,最通用的方法是多次调用该函数。你可以很容易地编写一个包装器函数,返回一个函数包含一个循环(调用您的输入函数)。这将是相当有效的。
或者使用一个匿名函数包装器(效率不及一个循环):
func = @ (x, y, t) x * y * t;
有趣= @(变长度输入宗量)arrayfun(函数、变长度输入宗量{:});%包装
有趣(1:3,4:6 -七章)
ans = 1×3
28 80 162
一样的功能,可以应用多少次你想要的,例如:
包= @ @ (f)(变长度输入宗量)arrayfun (f,变长度输入宗量{:});
有趣=包装(函数);%包装
有趣(1:3,4:6 -七章)
ans = 1×3
28 80 162

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!