types - Julia 中的复数计算,奇怪的结果?
问题描述
我在 Julia 做一些简单的线性代数练习。
这是变量的定义方式
H = (1/sqrt(2)) * [1.0 + 0.0im 1.0 + 0.0im; 1.0 + 0.0im -1.0 + 0.0im;]
X = [0.0im 1.0 + 0.0im; 1.0 + 0.0im 0.0im;]
H
计算为
2×2 Array{Complex{Float64},2}:
0.707107+0.0im 0.707107+0.0im
0.707107+0.0im -0.707107+0.0im
并X
计算为
2×2 Array{Complex{Float64},2}:
0.0+0.0im 1.0+0.0im
1.0+0.0im 0.0+0.0im
单位矩阵定义为I = [1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im;]
现在都X * X
回来H * H
了
2×2 Array{Complex{Float64},2}:
1.0+0.0im 0.0+0.0im
0.0+0.0im 1.0+0.0im
正如预期的那样。但
I == X * X # returns true
I == H * H # returns false
X * X - I
返回
2×2 Array{Complex{Float64},2}:
0.0+0.0im 0.0+0.0im
0.0+0.0im 0.0+0.0im
正如预期的那样,而对 H 做同样的事情
2×2 Array{Complex{Float64},2}:
-2.22045e-16+0.0im 0.0+0.0im
0.0+0.0im -2.22045e-16+0.0im
我对朱莉娅很陌生。为什么会这样?
解决方案
这是因为sqrt(2)
它是一个浮点数,因此(sqrt(2)*sqrt(2))
不等于 2。
解决此问题的一种方法是为代数数定义一种新类型,如您在AlgebracNumbers.jl中所见。
例子:
sqrt(AlgebracNumber(2))^2 == 2
推荐阅读
- oracle - 更好的是在 for 循环中多次删除
- java - 如何在android webview中保存上次访问的url?
- aws-fargate - 如何将 Fargate 与 Media convert 连接起来?
- python - 如何比较python3中的两个csv文件?
- bash - 为什么此 YAD 列表代码无法正常工作?
- unix - Vim:在普通模式下切换键盘布局
- angular - Spring Gateway 如何路由深度 SPA 链接
- asp.net-core - 将 blazor 组件添加到现有 Asp.net 核心项目的问题
- r - 设置种子在我的 Windows 上不起作用,因为我使用 R 从不同的示例中复制
- wpf - 为什么在我的 XAML 文件中找不到该成员?