【发布时间】:2016-08-21 09:33:45
【问题描述】:
我想转移到 C#,这是一个计算来自 MATLAB 的表达式的相量角的函数,angle()。我发现 angle(x+yi)=atan2(y,x) 但我的问题来了,我有一个 平方根 取决于我给它的值是 positive 还是 negative。但是,在 MATLAB 中,如果 sqrt 函数得到一个负数,它会返回一个 imaginary,这与 C# 中它返回 NaN 不同。
那么,我怎样才能让两个代码给出相同的结果呢?
即 MATLAB:
angle(a*1i-sqrt(expression))
C#:
Mathf.Atan2(a,-sqrt(expression))(我做了什么,我认为是错误的)
【问题讨论】:
-
帮我取某人的标题
-
取表达式的绝对值。记得从初中CAST。余弦在第四象限为正,所有函数在第一象限为正,正弦在第二象限为正,正切在第三象限。
-
@jdweng 我认为不会这样做,在 matlab 中,sqrt(negatives) 给出了一个用于计算的虚数,通过使用 abs 值,我正在更改结果,使得 c# 不会表现为matlab
-
只要你意识到i轴是sqrt -1,ax+by和ax+bi真的没有区别。数学是一样的。
-
@jdweng 好吧,我不完全明白你想告诉我什么,但是为了测试我移动了 sqrt(expression) 而 expression 有一个负值,这意味着 sqrt 返回一个虚构的,所以 c#对应于:Mathf.Atan2(a-sqrt(abs(expression)),0)(其结果始终为 pi/2)并且 matlab 的结果对于相同的输入是相同的,所以我猜 c# 中的 sqrt 应该更改参数位置取决于表达式的符号,可能使用简单的 if 语句。我做了你告诉我的事情,我理解为:Mathf.Atan2(a,-sqrt(abs(expression))) 并没有产生相同的结果。
标签: c# matlab complex-numbers phase