首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MATLAB中重新定义.^运算符?

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

Stack Overflow用户
提问于 2011-09-28 10:49:16
回答 2查看 3.2K关注 0票数 3

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

代码语言:javascript
运行
复制
x.^y

至:

代码语言:javascript
运行
复制
sign(x).*abs(x.^y))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-28 12:45:09

你能在

中重新定义一个算术运算符吗?是

你是否应该在中重新定义算术运算符?...呃,可能不会。

为什么?因为MATLAB中的每个其他函数都期望算术运算符将按照内置实现所定义的那样运行。

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

现在我已经完成了我的免责声明,我将递给你一把枪,用它可能会射中你的脚……;)

MATLAB中的算术运算符具有函数等效项,当您调用它们时,会在幕后调用它们,它们被列出为here。在调用时,按数组的幂操作符.^调用内置的power函数。

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

代码语言:javascript
运行
复制
>> 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函数:

代码语言:javascript
运行
复制
function result = power(x, y)
  result = sign(x).*abs(builtin('power', x, y));
end

现在,基于MATLAB下面的function precedence order,如果您将目录temp添加到MATLAB path,或者如果您简单地将current working directory更改为temp,则在对双变量使用power运算符时,将调用上面的自定义.^函数而不是内置的函数。

票数 12
EN

Stack Overflow用户

发布于 2011-09-28 11:03:11

不要,这不会是正确的。(-1).^(1/2)应该总是给你虚数单位(i)。您拥有的表达式将得到( -1 ).^(1/2) -> -1。更糟糕的是,考虑(-1)^2。

创建一个单独的函数来执行您所描述的操作。就像这样

代码语言:javascript
运行
复制
function a = myPowerFunc(x, y)

a = sign(x).*abs(x.^y);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7577802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档