首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia中算子的超优先性

Julia中算子的超优先性
EN

Stack Overflow用户
提问于 2018-08-08 21:30:05
回答 1查看 343关注 0票数 2

在电气工程中,阻抗的并联可以用并联算子来表示。对于阻抗向量z[k],可以定义以下函数:

代码语言:javascript
复制
function ∥(z...)
    ypar = 0
    for k=1:length(z)
        ypar = ypar + 1/z[k]
    end
    return 1/ypar
end

https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm中定义了Julia算子的优先级。并行操作符在与关系操作符相同的优先级级别上定义。考虑以下例子:

代码语言:javascript
复制
julia> Base.operator_precedence(:∥)
6
julia> Base.operator_precedence(:+)
9
julia> Base.operator_precedence(:*)
11
julia> Base.operator_precedence(:^)
13

在z1和z2两种阻抗的简单情况下,并联阻抗等于z[1]*z[2]/(z[1]+z[2])。根据我个人的理解,并行运算符的优先级高于或至少等于乘法运算符*

我的问题是:如何将运算符的优先级从6更改为11、12或13?

EN

回答 1

Stack Overflow用户

发布于 2022-10-10 06:06:19

我会给你一个你不想要的答案。

这种阻抗计算通常被称为并行和,我建议您用++运算符表示它(两个和并行!)。在朱莉娅中,这可以定义为:

代码语言:javascript
复制
++(xs...) = 1/sum(1/x for x ∈ xs)

++的优先级与+相同。起初,这似乎是不可取的,但我认为这是正确的。

并行和的性质--可交换的,结合的,分布的--与加法完全相同,恒等式只是对方的逆(0比∞)。这两个运算符代表一个组件的添加,只是在不同的安排。并且,正和可以用正则和定义为a++b == 1/(1/a+1/b),而正规和可以用并行和定义为a+b == 1/(1/a++1/b)

结果是,最自然的做法是给平行和以与正常和相同的算子优先级。不幸的是,许多电气工程师给予它的优先权不是这个--很明显,因为他们没有考虑操作者的属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51755911

复制
相关文章

相似问题

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