TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 2 体問題 3 / Fehlberg 法 / 刻み幅を細かく、精度を厳しくする / それに意味のないとき

時間を細かく刻めば改善はする。ここでは Fehlberg 法を使っているので、精度を厳しくしても改善する。しかしいずれも彌縫策に過ぎない。 TwoBodies = class() function TwoBodies:init(funcs, t0, inits, h, tol) self.step = h self.funcs = funcs self.t0…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 2 体問題 2 / Fehlberg 法 / それに意味のないとき / 質点同士が極端に近づくとき

参考: パソコンで見る天体の動き, p.166 簡単にするため、質点同士の質量差が極端であるものとし、極端に重いほうの質点 (たとえば太陽とする) が原点から動かないものとする。長半径 1、離心率 0.999、周期 2 の条件で極端に軽いほうの質点 (何らかの天体と…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 2 体問題 1 / Fehlberg 法 / それに意味のないとき

Lua の実行画面は使わずに Graphs アプリケーションに描画してみる。再生、一時停止、リセットの各操作はスライダーをボタン代わりにして行う。 TwoBodies = class() function TwoBodies:init(funcs, t0, inits, h, tol) self.step = h self.funcs = funcs s…

LabVIEW & myDAQ 16 / 乱数を発生させて表示する

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.82-87 test1.vi - Google ドライブ LabVIEW を起動し、新規 VI を開く。 ブロックダイアグラムで右クリックして関数パレットを…

LabVIEW & myDAQ 15 / LabVIEW の基本操作

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.70-80 LabVIEW を起動する。 メニューバーから [ファイル]、[新規VI] の順に選択する (あるいは Ctrl + N を押す)。 2 つのウ…

LabVIEW & myDAQ 14 / ELVISmx 5 / Dynamic Signal Analyzer を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.62-65スペアナのようなものである。 ELVISmx を起動し、[Function Generator] と [Dynamic Signal Analyzer] とをクリックする…

LabVIEW & myDAQ 13 / ELVISmx 4 / Bode Analyzer を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.59-62 ネットワークアナライザーのようなものである。ボード線図がプロットできる。ここでは CR ローパスフィルターの f 特 (…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 聯成振動 2 / Nyström 法 / ゴムひもの伸び縮みを表現する

CoupledVib = class() function CoupledVib:init(funcs, t0, inits, initsDot, h, numOfDiv) self.fillLine = (function() local POW = math.pow local ATAN = math.atan2 local MIN = math.min local SQRT = math.sqrt local SIN = math.sin local COS = ma…

伸び縮みしているのがわかるような太い線を描く

fillLine = (function() local POW = math.pow local ATAN = math.atan2 local MIN = math.min local SQRT = math.sqrt local SIN = math.sin local COS = math.cos return function(gc, x1, y1, x2, y2, area) -- (gc, 始点, 終点, 面積) local angle = ATA…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 聯成振動 1 / Nyström 法 / それに意味のないとき

参考: Excelで学ぶ微分方程式, p.204-209テキストは古典的 Runge-Kutta 法を使っているが、ここでは、特殊な方程式に対する Nyström 法を使ってみる。 縦の点線が平衡点: CoupledVib = class() function CoupledVib:init(funcs, t0, inits, initsDot, h, num…

LabVIEW & myDAQ 12 / ELVISmx 3 / Oscilloscope を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.57-59単なるオシロである。ここでは普通の FG から出力する波形を測定してみる。 ELVISmx を起動し、[Oscilloscope] をクリッ…

LabVIEW & myDAQ 11 / ELVISmx 2 / Function Generator を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.56-57単なる FG である。ここでは AO 0 端子から三角波を出力してみる。 ELVISmx を起動し、[Function Generator] をクリック…

LabVIEW & myDAQ 10 / ELVISmx 1 / Digital Multimeter を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.49-56単なるテスターである。キャパシタンス、インダクタンスはグレイアウトされていて測定できない。ここでは抵抗値を測って…

LabVIEW & myDAQ 9 / MAX のテストパネルで動作確認をする 7 of 7 / カウンターでパルス数を数える (CTR 0 SOURCE)

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.45-48 パルス数を計測するときは、CTR 0 SOURCE 端子 (D0 端子と共用)を使う。 下のように接続する。 テストパネルを開く。 […

LabVIEW & myDAQ 8 / MAX のテストパネルで動作確認をする 6 / カウンター出力 (CTR 0 OUT) を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.45-46 ここで言う「カウンター出力」とはディジタル信号を連続的なパルス波として出力する機能のことである。D3 (PFI 3) 端子…

LabVIEW & myDAQ 7 / MAX のテストパネルで動作確認をする 5 / ディジタル入力 (DI) を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.43-44 下のように接続する。 MAX を起動し、テストパネルを開いて、[デジタルI/O] タブを選択する。 [すべて入力] ボタンをク…

LabVIEW & myDAQ 6 / MAX のテストパネルで動作確認をする 4 / ディジタル出力 (DO) を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.41-43 下のように接続する。 MAX を起動し、テストパネルを開いて、[デジタルI/O] タブを選択する。 [すべて出力] ボタンをク…

テーブルは極力作らない

function addVect1(vectA, vectB) -- 加算が 2 回、テーブルコンストラクトが 1 回。 return {vectA[1] + vectB[1], vectA[2] + vectB[2]} end function addVect2(vectA, vectB) -- 加算が 2 回、代入が 2 回。 vectA[1] = vectA[1] + vectB[1] vectA[2] = v…

LabVIEW & myDAQ 5 / MAX のテストパネルで動作確認をする 3 / アナログ出力 (AO) を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.39-41 下のように接続する。 [アナログ出力] タブを選択する。 [チャンネル名] ドロップダウンリストから [myDAQ1/ao0] を選択…

LabVIEW & myDAQ 4 / MAX のテストパネルで動作確認をする 2 / アナログ入力 (AI) を使う

参考: ミニ・アダプタmyDAQとLabVIEWで作るMy実験ベンチ: パソコンに取り込んで計測・制御思いのままに (計測・制御シリーズ), p.38-39 MAX を起動する。 左のペインで [マイシステム]、[デバイスとインタフェース] の順に展開して [NI myDAQ "myDAQ1"] を選…

シングルショット信号を捉える / this particular, simulate

予想されるシングルショット信号に合わせて画面の縦横のスケール、画面のオフセット、トリガーレベルを変える。 次のいずれかの操作をする。 [Run] 取得モードのままで [Normal] トリガーモードにする。発生したシングルショット信号がトリガーレベルを交叉…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 2 重振子でバタフライ効果を見る / 古典的 Runge-Kutta 法

L2 の長さを 0.01% だけ違えた 2 組の 2 重振子を同一座標に描く。t = 6 あたりまでは同じ軌道を描くが、t = 10 を過ぎると全然違う軌道になる。 DoublePend = class() function DoublePend:init(funcs, t0, inits, h, numOfDiv, len1, radius1, len2, radiu…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 2 重振子 / 古典的 Runge-Kutta 法

参考: 工業力学 (機械工学基礎講座), p.229-231 DoublePend = class() function DoublePend:init(funcs, t0, inits, h, numOfDiv, len1, radius1, len2, radius2) self.len1 = len1 self.radius1 = radius1 self.len2 = len2 self.radius2 = radius2 self.hi…

TI-Nspire & Lua / コルーチン 6 / yield の引数が resume の返値になる

function test() for i = 1, 3 do coroutine.yield("stopped at", i) end end co = coroutine.create(test) for i = 1, 7 do print(coroutine.resume(co)) -- resume は、resume に成功したかどうかを示す true/false を返すほか、yield に指定された引数を…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / Pendulum Waves / 古典的 Runge-Kutta 法

長さの違う複数の振子を同じ初期角から一斉に振る。各糸の長さは、たとえば同じ 30 秒間に振子 1 は 15 往復、振子 2 は 16 往復、振子 3 は 17 往復 ...... するように設定する。参考: Pendulum Waves Pend = class() function Pend:init(funcs, t0, inits,…

TI-Nspire & Lua / 常微分方程式の数値解法 / 応用例 / 単振子 / 古典的 Runge-Kutta 法

参考: Excelで学ぶ微分方程式, p.171-176 Pend = class() function Pend:init(funcs, t0, inits, h, numOfDiv, len, radius) self.len = len self.radius = radius self.Unpack = unpack or table.unpack self.Sin = math.sin self.Cos = math.cos self.func…

TI-Nspire & Lua / 常微分方程式の数値解法のまとめ (『パソコンで見る天体の動き』) / クラス化する

同じ処理を今度はクラス化する。 1. 古典的 Runge-Kutta 法 構文: rkClassic({funcs}, t0, {inits}, h [, numOfDiv])▶ソースコードを表示する/非表示にする rkClassicClass.lua 実行結果 (左から t, x, y) 2. Shanks による 12 段 8 次の Runge-Kutta 法 構…

TI-Nspire & Lua / リストをランダムに並べ替える / Fisher-Yates のシャッフル

function FisherYates(list) local unpack = unapck or table.unpack local oldlist = {unpack(list)} local newlist = {} for i = 1, #list do newlist[#newlist+1] = table.remove(oldlist, math.random(#oldlist)) -- 「リストに残っている要素をランダム…

TI-Nspire & Lua / コルーチン 5 / resume するときに coroutine に引数を渡す

参考: はじめてのLuaプログラミング―人気の軽量スクリプトでアプリケーション開発! (I・O BOOKS) function test(from, to) while true do for i = from, to do input = i calcRoot(i) end end end co_test = coroutine.create(test) function calcRoot(n) ou…

TI-Nspire & Lua / コルーチン 4 / 他の函数から間接的に中断する

参考: はじめてのLuaプログラミング―人気の軽量スクリプトでアプリケーション開発! (I・O BOOKS) function test() while true do for i = 1, 10 do input = i calcRoot(i) end end end co_test = coroutine.create(test) function calcRoot(n) output = "?" …