gpt4 book ai didi

matlab - 如何在 MATLAB 中重新定义 .^ 运算符?

转载 作者:太空宇宙 更新时间:2023-11-03 20:09:31 24 4
gpt4 key购买 nike

如何在 MATLAB 中重新定义指数函数 .^?来自:

x.^y

到:

sign(x).*abs(x.^y))

最佳答案

Can you redefine an arithmetic operator in MATLAB?... Yes

Should you redefine an arithmetic operator in MATLAB?... Eh, probably not.

为什么?因为 MATLAB 中的所有其他函数都期望算术运算符的行为与内置实现所定义的一样。

我已经回答了一些其他相关问题,这些问题涉及重载算术运算符和隐藏内置行为,我绝对建议您先通读这些内容以了解这种方法中涉及的细节、困难和陷阱:

现在我已经完成了免责声明,我会把枪交给你,用它可能会搬起石头砸自己的脚……;)


MATLAB 中的算术运算符具有功能等价物,当您调用它们时会在幕后调用它们,这些在 here 中列出。 .数组幂运算符 .^ 调用内置的 power调用时的功能。

现在,将为每个 data type 定义一个单独的 power 函数使用它。此函数将放置在 @type 目录中,您可以使用 which 查看该目录函数查看存在的不同 power 函数:

>> which power -all
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@single\power) % single method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@double\power) % double method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@char\power) % char method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int64\power) % int64 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int32\power) % int32 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int16\power) % int16 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int8\power) % int8 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint64\power) % uint64 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint32\power) % uint32 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint16\power) % uint16 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint8\power) % uint8 method

如果您的变量 xy 的类型为 double (因为它们在 MATLAB 中是默认设置的),那么您将不得不隐藏内置的 @double\power 函数。为此,您可以创建一个目录(我们称之为 temp),在其中创建一个名为 @double 的子目录,然后放置以下自定义 power 该子目录中的函数:

function result = power(x, y)
result = sign(x).*abs(builtin('power', x, y));
end

现在,基于 function precedence order如果您将目录 temp 添加到 MATLAB path 中,则使用 MATLAB ,或者如果您只是更改 current working directorytemp,然后在对双变量使用 .^ 运算符时,将调用上述自定义 power 函数而不是内置函数。

关于matlab - 如何在 MATLAB 中重新定义 .^ 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com