Javascriptで複素数を扱うライブラリ
※この記事は古すぎてもう動かないのでこちらを参照。
以下は記録としてだけ。
ーーーーーーーーーーーーーーーーーーーー
練習を兼ねて作ってみた。ソースリストは最後のほうにつけてます。使い方は
(作成) a = new Complex(1,1);
(足し算) c = Complex.cadd(a, b);
(引き算) c = Complex.csub(a, b);
(掛け算) c = Complex.cmul(a, b);
(割り算) c = Complex.cdiv(a, b);
(べき乗) c = Complex.cpow(a, b);
(exp) c = Complex.cexp(a);
(log) c = Complex.clog(a);
とかでOK。
---------------------
function Complex(x, y) {
this.x = x;
this.y = y;
return this;
}
Complex.cadd = function (a, b) {
return Complex(a.x+b.x, a.y+b.y);
}
Complex.csub = function (a, b) {
return Complex(a.x-b.x, a.y-b.y);
}
Complex.cmul = function (a, b) {
return Complex(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x);
}
Complex.cdiv = function (a, b) {
r2= b.x*b.x + b.y*b.y;
return Complex((a.x*b.x+a.y*b.y)/r2, (-a.x*b.y+a.y*b.x)/r2);
}
Complex.cconj = function (a) {
return Complex(a.x, -a.y);
}
Complex.cexp = function (a) {
return Complex(Math.exp(a.x)*Math.cos(a.y),Math.exp(a.x)*Math.sin(a.y));
}
Complex.clog = function (a) {
r2= a.x*a.x + a.y*a.y;
return Complex(0.5*Math.log(r2), Math.atan2(a.y,a.x));
}
Complex.cpow = function (a, b) {
return Complex.cexp(Complex.cmul(Complex.clog(a),b));
}
function cabs(a) {
return Math.sqrt(a.x*a.x+a.y*a.y);
}
function carg(a) {
return Math.atan2(a.y,a.x);
}
« 「平家伝説殺人事件」を読んだ。 | トップページ | 相対論的水素原子のエネルギー準位(Dirac方程式の解)をkeisan.casio.jpにUP! »
「パソコン・インターネット」カテゴリの記事
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- MATLAB Onlineで高周波基板設計用のRF PCB Toolboxを使ってみる。Coupled line バンドパスフィルタやratraceカプラが設計できる。モーメント法(MoM)や有限要素法(FEM)でちゃんと計算してくれているようだ。(2024.12.06)
- MATLAB Onlineで高周波用のRF Toolboxを使ってみる。Touchstoneファイルの読み込み、dB表示グラフ、スミスチャートなど簡単にできるし、フィルタ合成やIEEE P370 De-embedding(ZC-2xThru)も使える(MATLABで書かれたものがオリジナル)。(2024.12.05)
- MATLAB OnlineのSimulinkでローレンツ方程式をode8で計算してみる。Interface 2025年1月号でMATLAB Onlineの半年ライセンスがついてきたので。Simulinkを使うのは初めてだったが、わかりやすいSimulink入門コースを修了したのですぐできた。(2024.12.04)
- Interface2025年1月号はMATLABで1ニューロンから手作り 数学&図解でディープ・ラーニング。初歩からAlexNetの転移学習、CNNまで話題が豊富で、なんとMatlab Onlineの半年ライセンスがついてくる。Simulinkや各種toolboxも使える。早速MATLAB入門オンラインコース修了した。(2024.12.03)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2024年12月11日 5G AmericasがセルラーネットワークでのAIのホワイトペーパー、GSAが2024年の5Gレビュー、NordicがIoTに適したThingy:91 X発表、Wi-Fi 6GHzが世界でどうなっているか、Huaweiが5G GaNパワーアンプで有利、Samsung Galaxy M34 5G分解(2024.12.11)
- 高周波・RFニュース2024年12月9日 iFixitがDJI Neo分解、TechInsightsがApple Pencil Pro分解、QualcommのNeurIPS 2024でのAI技術発表、IntelのIEDM 2024での発表、 Nokiaの7GHz帯の6G、Analog DevicesのPhased Array Antennaのホワイトペーパー、ZDTが史上二番目の売上高(2024.12.09)
- 高周波・RFニュース 2024年12月6日 NGMNが無線パフォーマンス評価フレームワーク発行、5GAAがC-V2Xのロードマップ発行、Marvellの3nm 1.6Tbps PAM4インターコネクト、Nokiaの2.4Tbps光伝送、Silicon Labsの低消費電力モジュール、Xiaomi 14T Pro分解動画(2024.12.06)
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- 日経サイエンス2025年1月号の特集 和算再発見の佐藤賢一さんの記事「算聖 関孝和の実像」に出てきた矢高に対する円弧の2乗の近似式をカシオの高精度計算サイトkeisan.casio.jpの自作式として作った。ものすごい精度であることがよくわかる。(2024.12.03)
コメント
« 「平家伝説殺人事件」を読んだ。 | トップページ | 相対論的水素原子のエネルギー準位(Dirac方程式の解)をkeisan.casio.jpにUP! »
Complex.prototypeにメソッドを追加するとクラスメソッドの呼び出しではなくインスタンスメソッドにできます。
function Complex(x = 0, y = 0) {
this.real = x
this.imag = y
return this
}
Complex.prototype.toString = function() { return `${this.real}+${this.imag}i` }
Complex.prototype.cadd = function(n) { return new Complex(this.real + n.real, this.imag + n.imag) }
Complex.prototype.csub = function(n) { return new Complex(this.real - n.real, this.imag - n.imag) }
let a = new Complex(1, 1)
let b = new Complex(2, 3)
console.log("a = " + a)
console.log("b = " + b)
console.log("a + b = " + a.cadd(b))
console.log("a - b = " + a.csub(b))
console.log(a instanceof Complex)
これができると、演算子オーバーロードが欲しくなりますね。
投稿: えぐち | 2021年11月20日 (土) 17時06分