0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LuaAdvent Calendar 2022

Day 2

luaで複素数ライブラリを使う

Last updated at Posted at 2022-12-12

この記事はアドカレに参加しています。

luaで複素数ライブラリを使う

みなさん、複素数すきですか?
すきなわけねぇよなぁあ
そんなこんなで、複素数を使わなければならないときがあります。
ところが、luaには複素数の演算をサポートしたものがありません。

そこで、外部ライブラリを使うなどの手段で複素数の計算を行います。

方法は4つあるので、順番に紹介していきます。

1. lua-complex

 英語な言語をしゃべる人が作ったライブラリです。

ダウンロードとかはこちらから↓
lua-complex

こっちもたぶん同じもの↓
complex.lua

さて、肝心な使いかたですが、まずはrequireします。

require("complex")

この時点でエラーが出る時は、complex.luaがrequireできる場所にないとか、そもそもcomplex.luaをダウンロードしてないとか、そんなかんじです。

次に、複素数の宣言は、

local x1 = 3 + 4 * math.i

とします。math.iと掛け算しているほうが虚部です。

複素数同士の計算は、普通にx1*x2とかx1*10とかでいいみたいです。便利ですね。

で、気になるのがsinとかabsとかですが、これはmath.sinとかmath.absでできるみたいです。

local x1 = 3 + 4 * math.i
local s = math.sin(x1)--複素数の場合は複素数の計算をする
local d = math.sin(1)--実数の場合は実数の計算をする

便利ですね。

こんなに便利なライブラリですが、注意すべきことがあります。
それは、グローバル変数がいろいろと変更されるということです。

mathとか、typeとかいろいろいじられてます。少し残念ですね。

僕の環境ではdebug_printが上手くいかなかったので、場合によっては不都合が生じるかもしれないです。

2. complex.lua

 こんどは、ジャパニーズな方が作った外部ライブラリです。

ダウンロードはこちらから↓
complex.lua

こちらもrequireして使います。
詳しい説明はダウンロード先で詳しく日本語で説明されているので、そちらを参照してください。やっぱり母国語だと安心しますね←英語弱者

特徴として挙げるなら、複素数の宣言を

local z = complex.new(3, 4)

とする、とかですかね。

あと、こちらもグローバル変数が使用されているので、注意が必要です。変数被りとか考えたくないですね。

3. c++から引っ張ってくる

 この方法はdllを作る必要があるので少しめんどうです。

詳しい実装方法は、以下の二つの記事にあります。
AviUtlでC++のクラスや構造体を使う
LuaユーザーデータにC++クラスを載せるのは注意

c/c++とかの理解も必要だと思うので、少し大変だと思います。

4. 自分で実装する

 1と2で紹介したライブラリはluaで書かれています。そこで、コードを覗いてみました。

基本的に複素数の値はテーブルで保持されています。

local s1 = 3 --実部
local s2 = 4 --虚部
local c = {r = s1, i = s2}

あとは、複素数同士の演算をする関数を定義するだけです。
数式とかも適当に調べれば出てくるので、自作ライブラリを作るのもありかもしれないですね。
複素数の指数関数・対数関数・べき関数
複素数の三角関数

最後に

 いつかフラクタルとかもやってみたいですね。

twitter

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?