読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

math.jsによりJavaScriptで複素数を扱う

数学 JavaScript

-((-1)^(1/7))を何度か2乗してみる話

ちょっとこれの記事に感銘を受けまして。
ただ、僕は数学者ではなくプログラマなのでプログラマ的に検算をしたいと思います。

計算用ライブラリ

math.js という計算ライブラリがあります。今回はこれを使って検証してみます。

math.js の導入

今回は CDN を参照する形で導入した。(このブログ自体に)

math.js 導入後

math.ほげほげ() みたいな形の数学関数がいっぱい利用できる。詳しくは公式ドキュメントを参考のこと。
たとえば

math.pow(2, 8) → 結果: 256

みたいな感じ。

2乗の件のプログラム的実践

\[a = -(-1)^{1/7}\]

a = math.multiply(-1, math.pow(-1, math.fraction("1/7")))
console.log("a: " + a)
console.log("magniture: " + a.abs()) // 絶対値
console.log("angle: " + a.arg()) // 偏角

出力結果

a: -0.9009688679024191 - 0.4338837391175581i
magniture: 1
angle: -2.6927937030769655

ここで複素数が登場します。マイナス値を7乗根してるので。内部値が小数表記になってしまうのがちょっとオシイですね。


\[b = a^2\]

b = math.pow(a, 2)
console.log("b: " + b)
console.log("magniture: " + b.abs()) // 絶対値
console.log("angle: " + b.arg()) // 偏角

出力結果

b: 0.6234898018587334 + 0.7818314824680299i
magniture: 1
angle: 0.8975979010256554


\[c = b^2\]

c = math.pow(b, 2)
console.log("c: " + c)
console.log("magniture: " + c.abs()) // 絶対値
console.log("angle: " + c.arg()) // 偏角

出力結果

c: -0.22252093395631478 + 0.9749279121818235i
magniture: 1
angle: 1.7951958020513108


\[d = c^2\]

d = math.pow(c, 2)
console.log("d: " + d)
console.log("magniture: " + d.abs()) // 絶対値
console.log("angle: " + d.arg()) // 偏角

出力結果

d: -0.9009688679024188 - 0.4338837391175588i
magniture: 1
angle: -2.692793703076965


d == a の検証

judge = math.equal(d, a)
console.log(judge)

出力結果

true

なるほどたしかに一致しました。

本ブログでの数式の表示について

ここを参考にさせていただきました。

図について

Canvasに直に書いてます。興味ある方はこの記事のHTMLソース見てみると良いです。

自分で試してみたい方はコンソールにて

本記事には math.js をインポート済みですので、Chrome であれば F12 キー等でデバッグ用のコンソールを開き、以下を実行してみてください。

console.log("----")
a = math.multiply(-1, math.pow(-1, math.fraction("1/7")))
console.log("a: " + a)
console.log("magniture: " + a.abs()) // 絶対値
console.log("angle: " + a.arg()) // 偏角

console.log("----")
b = math.pow(a, 2)
console.log("b: " + b)
console.log("magniture: " + b.abs()) // 絶対値
console.log("angle: " + b.arg()) // 偏角

console.log("----")
c = math.pow(b, 2)
console.log("c: " + c)
console.log("magniture: " + c.abs()) // 絶対値
console.log("angle: " + c.arg()) // 偏角

console.log("----")
d = math.pow(c, 2)
console.log("d: " + d)
console.log("magniture: " + d.abs()) // 絶対値
console.log("angle: " + d.arg()) // 偏角

console.log("----")
judge = math.equal(d, a)
console.log(judge)

上に書いた内容と同じ結果が表示されるはずです。
もちろん本家math.jsのページのコンソールでも同じことができます。

複素数平面的な理屈

元記事のブコメにあったこのページが分かりやすいですね。

});