ModelicaのDCモータモデルをちょっと掘り下げ。 以下が絡んでくる。 電気/電子領域。 古典力学領域。 幾何学(材料力学)領域。 物理モデリングは伝達経路、伝達関数、微分方程式解決、シミュレーションの4つの工程がある。 Modelicaは伝達関数、微分方程式解決をサボれるツール。
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
1件〜100件
【連続系】MATLAB、Pythonで株価予測 その68【フーリエ変換⑤】
フーリエ変換のプログラム化の前に数式レベルでいろいろ解決。 積分をΣで解決する。(リーマン積分) 関数をベクトルと解釈する。 畳み込み積分は内積で解決。 ベクトルのそれぞれの要素数をNで切りそろえているのでそれほど複雑にはならないはず。
MATLAB、Pythonを使って株価予測を使用と考えるシリーズ。 と言っても基本的にはフーリエ変換が中心のネタとなる。 FFT/IFFTで分析し、さらに詳細に分析するために元々のフーリエ変換、逆フーリエ変換の数式ベースで解析も。
【連続系】MATLAB、Pythonで株価予測 その67【フーリエ変換④】
前回、打ち出した方針を再掲。 要素数Nが重要。 関数、変数のベクトル要素数がNできり揃う。 これにより、逆変換も苦にならない想定。 文章で表現したものを数式で表現。 ベクトルになる箇所を明確にした。 プログラム化はやってみないとわからん。 なんとか辻褄合わせができるよう頑張る。
【連続系】MATLAB、Pythonで株価予測 その66【フーリエ変換③】
フーリエ変換、逆フーリエ変換を再確認。 問題点は無限の解釈の仕方。 無限の範囲に於いての「関数同士の内積」。 「関数同士の内積」も無限要素のベクトルと解釈する必要がある。 有限数を便宜上、無限に近いものとすれば、ある程度成立する可能性はある。
【連続系】MATLAB、Pythonで株価予測 その65【フーリエ変換②】
細かい周波数特性の取り方としてフーリエ変換を利用することとした。 フーリエ変換とDFT,FFTは別物。 目的が一緒なので、本来は気にしなくても良いが、今回に限っては別物扱いせざるを得ない。 フーリエ変換の連続的、範囲が∞であることがプログラム化に対しての大きな課題。 そもそも出来るのかもわからん。
【連続系】MATLAB、Pythonで株価予測 その64【フーリエ変換①】
さらに適切な周波数を特定できないか検討。 10[Hz]じゃなくて9.7[Hz]が実はより適切だったかも。とか。 入力サンプリング期間を延ばせば、見た目の周波数より細かい周波数特性は出せる。 問題は期間の伸ばし方。 0埋めで伸ばす場合、0埋めがあまり多すぎると元データと乖離する。 サンプリング間の補間もまぁまぁメンドイ。
【個別株】MATLAB、Pythonで株価予測 その63【シミュレーション③】
10[Hz]に於ける売買タイミングと株価を再掲。 個別株に対して収支シミュレーション実施。 20万越えの利益。 途中、5万円の損失が出てるが、これはうまい損切。 これのおかげで次の売買で大きく利益を上げられている。
【個別株】MATLAB、Pythonで株価予測 その62【シミュレーション②】
10[Hz]に於ける売買タイミングと株価を確認。 10回の売買が発生する。 収支シミュレーションを行う上でのパラメータ決め。 VTIの時の差分は以下。 売買手数料は0円。 売買単位は10株 買付余力は75万。 100万以下の売買を前提として売買手数料を0円にしているため。
【個別株】MATLAB、Pythonで株価予測 その61【シミュレーション①】
分析予測対象の個別株を選んできた。 大企業株のため、VTIの特性に似てはいるが、細かい上下が見て取れる。 とりあえず周波数解析実施。 10[Hz]あたりが突出している。 9~11[Hz]の範囲だけを残してIFFT実施。 筋が良さそうなのでこれをベースに掘り下げる予定。
【収支】MATLAB、Pythonで株価予測 その60【シミュレーション⑫】
前回の収支シミュレーションの考察を実施。明らかに損がでる売買も行っている。しかし、そこで売買しないと買付余力がなくなり、機会損失になる場合もある。買付余力があれば、損が出る売買は見送れるので買付余力を如何に残せているかも重要にはなってくる。同じシミュレーションを個別株で行えないか?基本ロジックは一緒なので可能。
【収支】MATLAB、Pythonで株価予測 その59【シミュレーション⑪】
ついに収支シミュレーション実施。 収益としては11万円弱。 イマイチな結果にも見えるが、最大単価時の一回の売買よりも収益は出ている状態。 たまたまの可能性は高い。
【収支】MATLAB、Pythonで株価予測 その58【シミュレーション⑩】
収支シミュレーションの方針を確認。 買付手数料:買付金額の0%。 売却手数料:売却金額の0.45%。 税金:利益の20%。 売買単位:1口。 買付余力:100万円。 VTIなど海外ETFは1口から売買可能。 というか100口、100株が売買単位なのは日本特有の文化。
【収支】MATLAB、Pythonで株価予測 その57【シミュレーション⑨】
Python版の売却、買付タイミング時のVTI単価特定コードを実行。 グラフはOK。 VTI単価出力もOK。 極大値、極小値のインデックスがMATLABで実施した時と異なるが、これはオリジンのせい。 MATLABは1オリジン、Pythonは0オリジン。
【収支】MATLAB、Pythonで株価予測 その56【シミュレーション⑧】
売却、買付タイミング時のVTI単価特定コードのPython版を作成。 MATLABの時に実施した論理インデックス検索のやり方を修正。 このために複素共役を負の周波数側に持ってきた。(忘れてたけど)
【収支】MATLAB、Pythonで株価予測 その55【シミュレーション⑦】
売却、買付タイミング時のVTI単価特定コード(MATLAB版)の実行結果を確認。 グラフで確認。 拡大グラフで確認。 コマンドウィンドウ出力を確認。 一部を除いて利益が出そうな数値にはなっている。
【収支】MATLAB、Pythonで株価予測 その54【シミュレーション⑥】
売却、買付タイミング時のVTI単価特定コード(MATLAB版)を作成。 ついでにバンドパスフィルタの部分をちょい改修。 Python(Numpy)側のコードも似たような感じで改修予定。
【収支】MATLAB、Pythonで株価予測 その53【シミュレーション⑤】
極大値と極小値の特定するコードのPython(Numpy)版を作成。 動作としては反転波形も含めてMATLABと同一。 実際にはこれらコードにく分けて以下が必要だが、本番コード作成時に盛り込む。 各プロット時の値の取得。 ドルから円へ変換。 $1=¥127で計算する予定。
【収支】MATLAB、Pythonで株価予測 その52【シミュレーション④】
極大値と極小値の特定のMATLABコードを作成。 上記コードの動作確認。 極大値に赤丸、極小値に青丸を置いてる。 一部問題点あり。 最初に極小値が来ることを想定している。 しかし、最初に買付をする想定なので、むしろ今回のコードの方が都合が良い。
【収支】MATLAB、Pythonで株価予測 その51【シミュレーション③】
微分して0になれば極値。 極大値は、「微分値がプラス→0→マイナス」となるところ。 極小値は、「微分値がマイナス→0→プラス」となるところ。 「微分して0」でも極値にならないパターンもある。 3次関数とかが代表的。
【収支】MATLAB、Pythonで株価予測 その50【シミュレーション②】
いままではExcelで終値から平均値を引いた値と算出したものをcsvにしていたが、MATLAB、Pythonで終値を取り込んでから平均値を引く方式に変更。 MATLAB、Pythonともにmeanという関数/メソッドで平均値算出可能。 Pythonはaverageという加重平均を算出するメソッドが存在。
【収支】MATLAB、Pythonで株価予測 その49【シミュレーション①】
収支シミュレーションをする上で、今後の方針を決めた。 基本的にはプログラム的に算出するが、実際の売買時の計算は手動で。 気が向いたら自動演算化するかも。 極大値、極小値を特定する必要があるが、これはそれほど難しくはない。(つもり)
【VTI】MATLAB、Pythonで株価予測 その48【周波数解析⑫】
新VTIチャートからの抽出周波数を1個ではなく、複数にすることで筋の良さそうな特性が出てくる。 しかし増やせば良いというものではない。 増やせば増やすほど元の新VTIチャートに近づくだけ。 単にローパスフィルタを掛けただけになることも。 何パターンか出してみて自分自身が信用できそうなものを探すって流れになる。
【VTI】MATLAB、Pythonで株価予測 その47【周波数解析⑪】
新VTIチャートから各種周波数を抽出して比較。 3[Hz]が筋が良さそう。 ついで5[Hz]。 7[Hz]は細かい特性は掴んでいるが、ちょっとイマイチ。 今回の情報だけを見ると3[Hz]で売り買いすればOKということになるが・・・。
G検定対策のまとめ記事はこちら。はじめにG検定の強化学習についての勉強方法を聞かれたんで、とりあえず記事にしてみた。正直、G検定の強化学習関連は情報も少なく、かなり学習し難いカテゴリになる。法律/最近の動向系と比べるとややマシとは言えるが、
【VTI】MATLAB、Pythonで株価予測 その46【周波数解析⑩】
新VTIチャートの周波数特性を確認。 1[Hz]、3[Hz]、5[Hz]、7[Hz]あたりが突出している。 まずはお試しで3[Hz]を抽出して確認。 かなり特徴を表していることが分かる。 Python(Numpy)でも同様のことができることを確認。
【VTI】MATLAB、Pythonで株価予測 その45【周波数解析⑨】
新しく2021年6月から2022年5月のVTIチャートを取得。 MATLABでplotしてみた。 いい感じに乱高下している。 MATLABとPython(Numpy)のFFT、IFFTで元の波形に戻せるかを確認。 共に戻せることが確認できたので、周波数解析できそう。
【VTI】MATLAB、Pythonで株価予測 その44【周波数解析⑧】
VTIチャートとIFFTの結果に対して考察。 5Hzではさほど何かを示しているデータには見えない。 試しに13Hzを中心として12Hz~14Hzを抽出。 こちらは細かい山と谷を捕まえて居そう。 期間が短いことから値動きも小さい。 今後の方針としては2022年も含めたVTIチャートで試してみる。
【VTI】MATLAB、Pythonで株価予測 その43【周波数解析⑦】
前回MATLABで作ったVTIチャートから5Hzを抽出するコードのPython版を作成。 振幅調整も同じ処理で対応。 MATLABと同じ結果が得られたことは確認。 問題は、これから何を分析できるかと言う点だが、そこは次回。
【VTI】MATLAB、Pythonで株価予測 その42【周波数解析⑥】
IFFT後の波形の振幅の増幅は最大値を比較して、その比率を使用して増幅係数を決定。 一応5Hzの抽出はできたが・・・。 ここらへんの考察はPythonコードを作成した後に実施予定。
【VTI】MATLAB、Pythonで株価予測 その41【周波数解析⑤】
VTIチャートの周波数特性から5[Hz]と抽出してみる方針に。 抽出した5[Hz]は元のVTIチャートの振幅と比べると遥かに小さい可能性が高い。 よって、グラフで比較する際はIFFT側の結果を増幅してあげた方が良い。
【VTI】MATLAB、Pythonで株価予測 その40【周波数解析④】
今回使用するVTIチャートの問題について考察。 あまりにもシンプル過ぎて、分析し易い特徴が捕まえられない可能性あり。 一応5[Hz]が若干飛び出ているが、特徴になり得るかは疑問。 とりえあえず、現状のチャートでやってみて、分析が難しいようであれば再度方針検討。
【VTI】MATLAB、Pythonで株価予測 その39【周波数解析③】
Python(Numpy)でVTIチャートにFFT、IFFTをブチかます。 MATLABと同一の結果が得られた。 これによりMATLABとPython(Numpy)の両方で同じレベルで実験が進められる。 Numpyにcsv読み込みの機能がある。 他にも手段はあるが、今回はNumpyで実施。
【VTI】MATLAB、Pythonで株価予測 その38【周波数解析②】
FFTの出力をローテーションしている都合、サンプリング数は偶数が望ましい。 頑張って調整すれば奇数でも行けるはずだがメンドイのでやらない。 無事、VTIチャートの周波数特性及びそこからのVTIチャートへの逆変換ができた。 しかし、VTIチャートの周波数特性自体に何かしら問題が・・・。
【VTI】MATLAB、Pythonで株価予測 その37【周波数解析①】
FFT,IFFTの使い方及び、特定周波数の抽出方法が分かったところで今後の方針を考える。 とりあえずVTIチャートにFFTかけて周波数特性見て見る。 後のことは見てから考える。 大雑把すぎる方針だが、ホントやってみないとなんもわからん。
【FFT】MATLAB、Pythonで株価予測 その36【IFFT⑮】
Python(Numpy)によるバンドパスフィルタのコード作成。 上記コードを実行して見た。 MTALABと同じ結果が得られることを確認。 よって、MATLAB、Python双方でFFT、IFFTによる特性周波数の抽出が可能と言える。
【FFT】MATLAB、Pythonで株価予測 その35【IFFT⑭】
Python(Numpy)による論理インデックス検索と線形インデックス検索が可能か確認。一応、可能そう。ただし、行列に対する線形インデックス検索はちゃんと行と列を指定する必要あり。MATLABと同様にするいはrehapeでベクトルに直す必要がある。あと、MATLABは1オリジン、Pythonは0オリジンな点も注意。
【FFT】MATLAB、Pythonで株価予測 その34【IFFT⑬】
MATLABのインデックス検索には線形インデックス検索と論理インデックス検索がある。 線形インデックス検索はC言語の配列の添え字の考え方と一緒だが、添え字に設定できる値がベクトルにできる。 C言語はスカラーのみ。 論理インデックス検索は渡すベクトルの1かtrueのところだけが参照できる。 それぞれ書き換えも可能。
【FFT】MATLAB、Pythonで株価予測 その33【IFFT⑫】
MATLABで超簡易バンドパスフィルタ実施。 コード開示&結果確認。 想定通り、3Hzだけ抽出で来た。 3[Hz]と-3[Hz]以外を0にしてる部分のコードが妙。 論理インデックス検索という手法を使っている。
【FFT】MATLAB、Pythonで株価予測 その32【IFFT⑪】
Python(Numpy)でFFT出力の周波数分布をローテーションするコードを作成。 上記の動作確認。 MATLABの結果と同じく、負の周波数側に複素共役を持ってくれた。 これで超簡易バンドパスフィルタの事前準備が整った。
【FFT】MATLAB、Pythonで株価予測 その31【IFFT⑩】
Python(Numpy)によるベクトルのローテーションをお試し。 無事ローテーション可能。 Pythonはベクトルに種類がある。 ベクトル。 転置等の行列由来の演算ができない。 行ベクトル。 列ベクトル。 行列演算を意識する際はベクトル以外の定義をする必要がある。 ※ 今回は「ベクトル」でOK。
【FFT】MATLAB、Pythonで株価予測 その30【IFFT⑨】
FFT出力の周波数分布をローテーションをMATLABで実施。 複素共役が0点を中心とした線対称になるように配置。 この配置の方が確認し易さ、処理のし易さが増す想定。 よって、配置が意識できていればやらなくてもOK。 効能は実際の処理をする際に確認。
【FFT】MATLAB、Pythonで株価予測 その29【IFFT⑧】
MATLABでベクトルローテーションをさせたい場合はcircshift関数を使えばOK。 ただし、次元指定の罠がある。 デフォルト次元が列方向なので、行ベクトルに対して行うとローテーションされない。 (実際には列方向にローテーションはされてると思う) [0,3]のように列行それぞれにローテーション数を指定する。
【FFT】MATLAB、Pythonで株価予測 その28【IFFT⑦】
IFFTにも活躍してもらうため簡易的なバンドパスフィルタを実施予定。 周波数分布関数の後半に複素共役が居るため、これも同等の処置が必要。 複素共役の位置を分かりやすくするため、マイナス側に持ってくる予定。 ベクトルに対するシフト、ローテーションで対応可能。なはず。
【FFT】MATLAB、Pythonで株価予測 その27【IFFT⑥】
複数の周波数のsin波を合成したもの大してFFT&IFFT実施のPython版。 当然ではあるが、同一の結果が得られた。 加えて、入力サンプリング期間を延ばしたものも実施。 これも当然、同一の結果が得られた。 FFT,IFFTの理屈は兎も角として使い方に関してはなんとなく慣れてきたところ。
【FFT】MATLAB、Pythonで株価予測 その26【IFFT⑤】
複数の周波数のsin波を合成したもの対してFFT&IFFT実施。 波形の合成は単純に足し算するだけ。 想定通りの周波数分布になった。 試しに入力サンプリング期間を2倍に伸ばしてみた 想定通り、周波数が2倍になる分布に変化。
【FFT】MATLAB、Pythonで株価予測 その25【IFFT④】
これまでMATLABで実験してきたので、Python版コードも作成。 結果は同一と見なせる。 MATLABとPython(Numpy)のFFT、IFFTは同一の数式を元にしている。 よって、互換性ありと見なしてOKそう。 演算誤差の方が異なるが無視してもOKなレベル。
【FFT】MATLAB、Pythonで株価予測 その24【IFFT③】
引き続きsin波をFFTに入れる実験継続。 今回は入力期間を2πから4πに増やしてみた。 これにより、結果的に期間内のsin(x)の振動は増える。 よって、FFTの結果としてのsin(x)の周波数は1Hzではなく2Hzとなる。 あくまで、入力サンプリングを1周期とした周波数である点に注意。 物理的な周波数とは異なる。
【FFT】MATLAB、Pythonで株価予測 その23【IFFT②】
sin波でFFT、IFFTを実施。 パッと見ちゃんと元に戻ってるのは確認。 FFTの出力である周波数の分布は前半と後半で意味が異なる。 後半が前半の複素共役に当たり、IFFT時に虚数部を相殺する役割を追っている。 特定周波数を取り出すばあは複素共役部分も一緒に取り出す必要がある。
【FFT】MATLAB、Pythonで株価予測 その22【IFFT①】
FFT、IFFTの入出力って実は良く分かってない。 よって、自明且つシンプルな波形を入れて評価して見た方が良い。 自明且つシンプルな波形はsin波とかそれらの合成波。 実験はMATLABで実施するが、Pythonコードを起こす予定。 ぶっちゃけメンドクサイとは思ってるけど頑張ってやる。
【ETF】MATLAB、Pythonで株価予測 その21【VTI⑥】
データ整形方針。 単純に平均値を出して、各要素から平均値を引く。 バイアス除去になり、周波数0[Hz]が無くなる。 MATLABのVersionによってはcvs読み込みに難点があるので、可能な限りシンプルなデータに整形しておく。 グラフ表示してみた。 ずっと右肩上がり。 本来であれば、一回投資したら放置が正解。
【ETF】MATLAB、Pythonで株価予測 その20【VTI⑤】
チャート取得範囲は2020年10月~2021年9月とする。 直近の米国事業年度。 VTIチャート各列を確認。 各列 Open(始値) High(最高値) Low(最安値) Close(終値) Adj Close(調整後終値) Volume(売買高) Close(終値)を元に分析、予測を実施する予定。
【ETF】MATLAB、Pythonで株価予測 その19【VTI④】
VTIチャートを取得する必要がある。 各証券会社だけでなくGoogle検索もでチャート自体はすぐ見れる。 分析する上でcsv形式でチャートが公開されてるとうれしい。 Yahooファイナンスの英語サイトでcvs形式で公開されている。 この手のURLは変わる可能性が高いので、探し方の一連の操作を確認。
【ETF】MATLAB、Pythonで株価予測 その18【VTI③】
シミュレーションを恐らくやると思うので、その前提条件を揃えるため手数料とか税金について調査。 SBI証券の情報をベースに調査。 手数料。 買付手数料\0 売却手数料0.45% 税金。 譲渡所得。 合計で約20% 所得税15%。 住民税5%。 NISA枠は一旦無視する。
【ETF】MATLAB、Pythonで株価予測 その17【VTI②】
VTIについて少し掘り下げを開始。 ベンチマークは「CRSP USトータル・マーケット・インデックス」。 米国株の4000銘柄の変動。 バンガード社は他の指標を元にした商品も出している。 VTIとよく比較されるのがVOO。 VOOはS&P500という米国株500銘柄と連動。
【ETF】MATLAB、Pythonで株価予測 その16【VTI①】
やっと株の話に突入 採用する商品はVTIという米国ETF 理由としては、「外乱を可能な限り減らし、分析難易度を下げたい。」 それでも外乱は0ではないが、コロナ禍、某戦争、円安、円高など比較的分かり易いものとなる。 個別銘柄だと、その市場や競合他社動向など調べるべきことが細かくなりすぎる。
【FFTへ】MATLAB、Pythonで株価予測 その15【至る道⑬】
バタフライ演算を図示した。 演算が交差している様が蝶々のようなのでバタフライ演算と呼ばれている。 入力サンプリングの入れ替えルールはビットリバースに準じている。 これら一連の流れを「CooleyTukey型FFTアルゴリズム」と呼ぶ。 このアルゴリズムは入力サンプリングが2のべき乗であることが前提。
【FFTへ】MATLAB、Pythonで株価予測 その14【至る道⑫】
Nの回転因子にN/2の回転因子を含めることが可能 複数段の行列に分解可能。 つまり、演算を分解できる。 最終的に残る値はかなり限られる。 これを利用してバタフライ演算を行うことになる。
【FFTへ】MATLAB、Pythonで株価予測 その13【至る道⑪】
回転因子を元に行列表現してみた。 回転位置による最適化が可能。 必ず実数になる点が存在することによる最適化が可能。 対角線による最適化が可能。 ここまででもかなり便利ではあるが、さらにバタフライ演算をするための最適化もある。
【FFTへ】MATLAB、Pythonで株価予測 その12【至る道⑩】
タイトル詐欺にならないようにMATLAB、Pythonを使って各回転因子を算出して見た。 1/√2のような計算結果にはならないので1/√2=0.7071を想定した見方になる。 前回の回転因子と同一の結果が得られた。 虚数表現はMATLABはi、Pythonはjとなっている。
【FFTへ】MATLAB、Pythonで株価予測 その11【至る道⑨】
FFT、IFFTの数式上のバリエーションはDFT、IDFTと一緒。 元にしている数式自体は同一。 FFT、IFFTはバタフライ変換による高速化を行ってる点で異なるのみ。 バタフライ変換を理解するためには回転因子のイメージが重要。 オイラーの公式のおかげで複素指数関数と三角関数が紐づく。
【FFTへ】MATLAB、Pythonで株価予測 その10【至る道⑧】
離散フーリエ変換、逆離散フーリエ変換のバリエーションについて。 フーリエ変換、逆フーリエ変換の時と同じく数式対称性によるバリエーション。 1/Nをどちらによせるか、折半するか。 よって、対になってる離散フーリエ変換、逆フーリエ変換を使用する必要がある。
【FFTへ】MATLAB、Pythonで株価予測 その9【至る道⑦】
大雑把に逆離散フーリエ変換と離散フーリエ変換の導出を説明。 サンプリング都合で積分範囲をプラス側へ。 逆変換を想定した逆行列都合でサンプリング数と係数の数を合わせて正方行列が作れる状態にしておく。 逆離散フーリエ変換の行列演算形式に対してエルミート転置を利用して逆変換を求める。 これが離散フーリエ変換になる。
G検定法律問題対策【個人情報保護法、著作権法、特許法、不正競争防止法】
その他のG検定関連情報はこちらはじめに割と対策が難しいG検定の法律問題。普通にやると「暗記で対策」になるが、それではちょっと非効率だし、その後に使える知識になるかは疑問。暗記した記憶か、構造的に把握した知識のどちらを得るべきかと考えるとやは
【FFTへ】MATLAB、Pythonで株価予測 その8【至る道⑥】
フーリエ変換とフーリエ逆変換のもう一つのバリエーションである、数式対称性について。 3パターンある。 1/2πをどちらが持つかって違い。 1/√2πのように折半するパターンもある。 バリエーションを認識していないと異なるバリエーションの変換/逆変換の組み合わせを使用してしまい、元の波形に戻らない事故が発生する。
【FFTへ】MATLAB、Pythonで株価予測 その7【至る道⑤】
フーリエ変換とフーリエ逆変換のバリエーション自体もバリエーションがある。 角周波数表現と周波数表現によるバリエーション。 数式対称性によるバリエーション。 角周波数表現は前回&今回再掲したもの。 周波数表現は角周波数を単純に周波数の式を代入したもの。 角周波数は角速度のスカラー量。
【FFTへ】MATLAB、Pythonで株価予測 その6【至る道④】
フーリエの積分公式は「とある関数を畳み込み積分を経ても同じ関数に戻せる」と証明されているもの。 複素フーリエ級数、複素フーリエ係数で証明可能だが、ここでは省略。 フーリエの積分公式の一部をフーリエ変換と定義した。 フーリエ変換の式をフーリエの積分公式に戻すことで逆フーリエ変換の式が完成。
【FFTへ】MATLAB、Pythonで株価予測 その5【至る道③】
フーリエ変換、逆フーリエ変換の元ネタがフーリエの積分公式。 f(t)とf(x)は同じものだが、複素指数関数との畳み込み積分を経由しても等しい状態を作れることを示している。 複素指数関数はオイラーの公式より三角関数に展開可能。 畳み込み積分は三角関数とf(t)の内積を示しており、同一角周波数のみが取り出せる理屈。
【FFTへ】MATLAB、Pythonで株価予測 その4【至る道②】
逆フーリエ変換が正しいのかフーリエ逆変換が正しいのか。 どっちも正しいと思っておいた方が良さそう。 英単語の並びを重視するか、逆変換という日本語としての意味を重視するか。 フーリエ変換/逆変換はバンドパスフィルタ利用が有名。 フーリエ変換、逆フーリエ変換にバリエーションがある点に注意。
【FFTへ】MATLAB、Pythonで株価予測 その3【至る道①】
フーリエ変換について簡単に説明。 実際には逆フーリエ変換も含めないと全体像は見えない。 フーリエ変換自体は実用されてるツールなので、数学者と言うよりエンジニア側の領域 逆フーリエ変換を知らずにフーリエ変換だけの性質を見ると不透明な感じがして恐怖感が芽生えている可能性が高い。
【FFT】MATLAB、Pythonで株価予測 その2【導入編②】
業務でFFTを使っていても、FFTそのものが何か知らない人も多い。 見るべき、比較すべきデータが揃っていると割と知らなくても平気。 これ自体は標準化、過去データ利用の結果なので褒められるべき事象。 FFTを知るには最低限以下の知識が必要。 フーリエ変換、DFT、FFTとそれらの逆変換。
【FFT】MATLAB、Pythonで株価予測 その1【導入編①】
FFTで振動解析を行うことが多い。 自動車だと静粛性評価などが代表的。 株価も振動っぽいからFFTで解析できるかも? 周波数成分を見れることは間違いない。 ただし、そこから予測に至れるかは別問題。 ここでの話を鵜呑みにして株売買をしてもそれは自己責任。
Modelicaによるプラント設計。 それをFMUにして他のプラットフォーム(Python等)での再利用。 さらに制御器との様々な接続方法(ASAM XCP等)の事例を紹介していく話。 Modelica用ツールとしてはOpenModelicaを使用する。
【MDF】最小構成のMBD事例 第2章 その317【仮想HILS⑦】
仮想HILSにMDF生成を組み込んだものの動作確認実施 リアルタイム波形は30秒の範囲なので、比較用といしてその範囲で計測してMDF生成 リアルタイム波形をMDFを比較。 AsamMdf付属Viewer、CANapeと比較したところOK。 一応、今回が本シリーズ最終回(たぶん)
【MDF】最小構成のMBD事例 第2章 その316【仮想HILS⑥】
仮想HILSの改修済みコードを開示。 XCP等の通信周りへの影響は無し。 GUIがちゃんと配置されてることだけ確認。 ボタンGUIを増やしたので、スケールの表示位置の微調整を入れた。
【MDF】最小構成のMBD事例 第2章 その315【仮想HILS⑤】
計測データの取得場所はFMU処理をしているFMU_handler内が妥当。 描画用のデータもここで取ってる。 計測データ対象はFMUの戻りのデータ。 仮想HILSが描画しているデータと合わせておくと評価し易い。 追加コードは描画用データのdequeとほぼ一緒。 リスト、dequeのメソッド名が共通化している恩恵。
【MDF】最小構成のMBD事例 第2章 その314【仮想HILS④】
ボタン押下時にやることを確認。 MDFインスタンス生成。 各種シグナル生成。 各種シグナルをリストにまとめる。 MDFインスタンスに統合 MDFを生成。 各種シグナルとMDFインスタンスを再初期化。 上記を元にコードを書いてみた。 実際には動かしてみないとわからないが流れはOK。
【MDF】最小構成のMBD事例 第2章 その313【仮想HILS③】
Pythonのリストの宣言の仕方について簡単に説明。 空っぽのリストも宣言できる。 データ保持用のストレージの候補を列挙。 上記に合わせて空っぽのリストを事前に宣言。 本来であれば一時ファイルの方が望ましので、必要であればファイルアクセスに差し替える必要がある。
【MDF】最小構成のMBD事例 第2章 その312【仮想HILS②】
MDF生成をするためのimportを説明。 以前のMDF生成実験の時と一緒。 ボタンGUI追加方法説明。 以前のチェックボックス、スケールの時と似たような感じ。 スケールの時と同じくイベントハンドラを設定可能。 ボタン押下時のイベントに紐づいて呼び出されるメソッドを設定可能。
【MDF】最小構成のMBD事例 第2章 その311【仮想HILS①】
仮想HILS改修計画として以下を提示。 仮想HILS側にAsamMdfを組み込んでMDF出力機能の追加を示している。 少なくとも仮想HILSのみの修正になる。 任意のタイミングでMDFを生成するためGUI側の修正も必要。 収録データは一時ファイルにした方が良いが今回はメモリ上に蓄える。
【Viewer】最小構成のMBD事例 第2章 その310【CANape⑥】
value range to textの物理変換をCANapeで確認。 値の設定上、value to textと同じ感じになる。 なんだかんだでCANapeの方がAsamMdf付属Viewerより高度なことができる。 自動レポート機能もあったり。 次回から仮想HILSへAsamMdfを組み込む作業となる。
【Viewer】最小構成のMBD事例 第2章 その309【CANape⑤】
value to textの物理変換をCANapeで確認。 value to textの表現がAsamMdf付属Viewerと異なることが発覚。 MDF仕様としてはファイルフォーマットの規定だけなので表現方法の標準仕様は存在しない。 欧州ではツールが先に存在し、それらの共通項をASAM仕様にまとめただけと推測される。
【Viewer】最小構成のMBD事例 第2章 その308【CANape④】
tabular with rangeの物理変換をCANapeで確認。 階段状に変換されているのに加え、指定範囲外の値はdefault値になっていることを確認。 文字列へ変換するタイプの物理変換用にグラフィックウィンドウでの文字列表示のやり方をレクチャー。 次回からの文字列変換タイプにはこれを実施する。
【Viewer】最小構成のMBD事例 第2章 その307【CANape③】
tabular without interpolationをCANapeで確認。 実はECUではあまり見かけないタイプの物理変換。 tabular with interpolationをCANapeで確認。 これもECUではあまり見かけないタイプの物理変換だが、センサ値に対して使われることは多い。
【Viewer】最小構成のMBD事例 第2章 その306【CANape②】
Linearの物理変換を確認。 想定通り、y=2x-0.5になっている。 algebraicの物理変換を確認。 あまり使わないパターンなのでなんか新鮮。 CANapeのグラフィックウィンドウにはオートスケール機能がある。 「最適に合わせる」を選ぶか「F」キーを押す。
【Viewer】最小構成のMBD事例 第2章 その305【CANape①】
MDFを異なるツールで読み込めるのは標準仕様の真骨頂と言える。 CANapeへMDF内の信号取り込み方法を説明。 MDFを開いた段階で選択する方法とエクスプローラの測定からのドラッグ&ドロップの方法がある。 物理値、生値の切り替え方法を説明。 グラフィックウィンドウの設定から可能。
【Viewer】最小構成のMBD事例 第2章 その304【AsamMdf⑤】
value range to textを抱えた信号をAsamMdf付属Viewerで確認。 この後はCANapeで同様に各信号を確認していく予定。 CANapeで確認したことが無い物理値変換もある。 AsamMdf付属ViewerとPyQT5のVersion不整合が発生。 Version落として整合。
【Viewer】最小構成のMBD事例 第2章 その303【AsamMdf④】
AsamMdf付属Viewerで各信号を確認。 value to text確認。 plotでは確認できないので、Tabular表示で確認。 tabular with range確認。 狙い通り階段上になっている。 さらに、範囲外はdefault指定した-1になっている。
【Viewer】最小構成のMBD事例 第2章 その302【AsamMdf③】
AsamMdf付属Viewerで信号確認再開。 tabular without interpolationを確認。 tabular with interpolationを確認。 補間処理はViewer側で行っているため浮動小数点の演算誤差問題が絡む場合がある。 実際は気にするレベルではない。
【Viewer】最小構成のMBD事例 第2章 その301【AsamMdf②】
「同一Channelの複数表示」と「Channelの生値表示」のやり方を説明。 基本触りながら覚えて行った方が良い。 その他plot周りの基本操作を説明。 波形の拡大縮小、移動、スケール変更などの基本的操作。 上記の操作方法が分かっていればそれほど困ることは無い。
【Viewer】最小構成のMBD事例 第2章 その300【AsamMdf①】
AsamMdf付属Viewerで作成したMDFを確認していく。 まずはMDFを開くところ。 それっぽく表示されるのは確認。 Linear変換を細かく確認。 指定通りの線形変換がされている。 同一のChannelを複数表示する方法に加えて片方だけ生値表示する方法がある。 次回説明予定。
【Python】最小構成のMBD事例 第2章 その299【AsamMdf⑲】
MDFの残りの物理値変換式をMDF validatorで確認 tabular with range。 Lower、Upper、valueで1セットになるよに情報が埋まっている。 value range to text。 tabular with rangeの文字列変換型。 文字列も情報として埋まっている。
【Python】最小構成のMBD事例 第2章 その298【AsamMdf⑱】
今回もMDF Validatorで物理変換式を確認。 tabular without interpolationとtabular with interpolationはcc_typeが違うだけで保持している情報は一緒。 value to textはtabularのようなテーブル情報と変換先の文字列を格納している。
【Python】最小構成のMBD事例 第2章 その297【AsamMdf⑰】
MDF validatorで作成したMDFの構造を確認。 DataGroup、ChannelGroupは想定通りの構成。 物理変換式もMDFに埋まっているので、同じく確認。 linear、algebraicを確認。 パラメータや式文字列が埋まっていることも確認。
【Python】最小構成のMBD事例 第2章 その296【AsamMdf⑯】
MDFの全体構造を作るにはMDFクラスのインスタンス(MDFモジュール)が必要。 MDFモジュールにDataGroupを登録することでMDFとしてのデータ構造が完成する。 データ構造が完成しているMDFモジュールのsaveメソッドを呼び出すことで保存可能。 上書きオプションがあるのでお好みで利用。
【Python】最小構成のMBD事例 第2章 その295【AsamMdf⑮】
前回までだとシグナルが存在しているだけでMDFのデータ構造にはなっていない。 今回はDataGroupに各種シグナルを登録することでMDFのデータ構造と同等の形となる。 DataGroupの下位にChannelGroupがあるが、AsamMdfとしてはSorted想定のため複数登録はできなそう。
【Python】最小構成のMBD事例 第2章 その294【AsamMdf⑭】
シグナル生成の10msサンプリングと100msサンプリングの部分のコード作成。 10msサンプリングの方に複雑さが寄ってる状態。 各種物理値変換式のパターンを入れ込んでいるため。 100msサンプリングはDataGroupを複数にするために入れている。
【Python】最小構成のMBD事例 第2章 その293【AsamMdf⑬】
MDFの各種物理変換仕様をやったので、折角なのでそれらもMDF生成実験に組み込む。 具体的には以下の変換パターンを構成に追加。 tabular。 tabular with interpolation。 value to text。 tabular with range。 value range to text。
【Python】最小構成のMBD事例 第2章 その292【AsamMdf⑫】
MDF conversion仕様 value range to textを説明。 value to textの入力側が範囲指定できる。 value to textとtabular with rangeを合わせたような仕様。 tabular with rangeの出力側のphys_がtext_になった感じ。
【Python】最小構成のMBD事例 第2章 その291【AsamMdf⑪】
MDF conversion仕様 tabular with rangeについて説明。tabular仕様とにているが、入力側をレンジ指定できる。tabular with range仕様ではdefault caseの値設定が必須。レンジ外の場合はこの値が採用される。この部分がtabular仕様の振る舞いとの大きな差。
【Python】最小構成のMBD事例 第2章 その290【AsamMdf⑩】
MDF conversion仕様 value to textについて説明。 利用シーンとしては状態名の表示。 シフトなどが代表的。 AsamMdfでのvalue to textの設定方法について説明。 辞書型に対してval_、text_のテーブルを設定。 指定外の数値だとdefault caseになる。
「ブログリーダー」を活用して、KEIさんをフォローしませんか?
ModelicaのDCモータモデルをちょっと掘り下げ。 以下が絡んでくる。 電気/電子領域。 古典力学領域。 幾何学(材料力学)領域。 物理モデリングは伝達経路、伝達関数、微分方程式解決、シミュレーションの4つの工程がある。 Modelicaは伝達関数、微分方程式解決をサボれるツール。
ModelicaのDCモータモデルのサンプルの位置をライブラリブラウザで確認。 DCモータモデルをとりあえずシミュレーション。 制御電圧、制御電流、角速度の結果を確認。 今回は電圧をランプ関数で制御したシンプルなもの。 ランプ関数は0を起点に徐々に上がっていく関数。
trapezoidの設定もせずにおもむろにシミュレーション。 矩形波的な出力になった。 変数ブラウザでtrapezoidの設定を編集。 台形波的な出力に変化。 このように、変数ブラウザからパラメータ変更が可能なソースブロックはそこそこある。 これらを知っているといろいろとサボれて楽できる。
trapezoidブロックとForceブロックを配置。ForceブロックはModelica→Mechanics→Translational→Sourcesにある。trapezoidブロックはModelica→Blocks→Sources→Trapezoidにある。本来はtrapezoidを修正する必要があるが今回は不要
ソースブロックによっては様々な信号を入力できる。 ソースブロックは信号を生成してくれるブロック。 信号を生成するソースブロックと物理量に変換するソースブロックがある。 今回はtrapezoidが信号生成、forceが物理量変換。 Modelicaライブラリは大量にあるがライブラリブラウザで検索ができるようになってる。
Modelicaコードに追加したパラメータが増えると管理が大変。 注釈が欲しい。 他のモデルもModelicaコードで書かれたものであるが変数ブラウザで注釈が確認できる。 つまり、注釈が入れられるはず。 変数の隣にダブルクォーテーションでくくった文字を入れれば注釈。 変数ブラウザでも確認可能。
Modelicaコードで変数追加後のOpenModelica Connecter Editor上の見え方確認。 まずは普通にシミュレーション。 変数ブラウザで変数を書き換えたあとに再シミュレーション。 モデルチェック、コンパイル無しで即シミュレーション結果が得られた。 ちょっとしたテクニックをしってるだけで効率化可能。
バックナンバーはこちら。はじめに前回、Modelicaコードにparameterキーワードを使って変数を追加してみた。ソースコード上のパラメータ編集が楽になるなどの効能は当然あるが、グラフィックエディタ上で即値を入れる労力と比較しても、ほぼ
Modelicaコードを弄ることでいろいろと効率化される可能性がある。 実際にparameterキーワードを使って変数を定義。そして、それをconstantForceに設定。 今のままでは動作は何も変わらない。 ソースコード上でパラメータ調整をし易くなったくらいの効能しかない。 即値で調整するのでは労力に差はさなそう。
OpenModelicaはローコード、ノーコードの性質がある。 しかし、コードの読み書きも出来ていた方が良い。 massモデルのソースコードを確認。 equationではconnectキーワードで接続と定義。 annotationキーワードでグラフィカルな情報が追記されソースコード内で情報が完結している。
他のシミュレーション結果のパラメータを確認 加速度に加えて、速度と移動距離。 OpenModelica Connection Editorのプロットの画面の変数ブラウザでチェックを入れるだけで確認可能。 それぞれのパラメータの関係性を確認。 加速度を積分して速度。 速度を積分して移動距離。
シミュレーションするモデルと前回の予測を再掲。 constantForce、massの組み合わせ。 1[m/s^2]の加速度。 シミュレーション開始方法。 OpenModelica Connection Editor上部の矢印アイコンをクリックするだけ。 シミュレーション結果確認。 予測通りの結果が得られた。
前回作成したモデルが何を示しているか確認。 massを引っ張り合ってるモデル。 グラフィックエディタだと分かりにくいがマイナス符号を付けないと逆向きの力にはならない。 シミュレーション結果を事前に予測してみる。 運動方程式を使用する。 質量と力が分かっているので、加速度が求められる。 加速度から速度、速度から距離。
使用するモデルはMassとconstantForce。 直線運動をふんわり知って置いた方が良い。 加速度、速度、距離、力、運動量、仕事、仕事率。 OpenModelica Connection Editorで各モデルを配置&接続 Modelica→Mechanics→Translationalに目的のモデルがある。
OpenModelicaのダウンロード。 Windows、Linux、Mac版がある。 32bit、64bit用に分かれている。 OpenModelicaのインストール。 基本はウィザードに従って「次」へ進んでいくだけ。 トータルで10Gbyteほどのサイズになるので、15Gbyteくらいの空き容量があった方が良い。
OpenModelica Python Interface (OMPython) Python自動化インターフェース OpenModelica Matlab Interface (OMMatlab) 上記のMATLAB版 Modelica Development Tooling (MDT) Eclipseインターフェース
OpenModelica Shell (OMShell)について説明。 その尚通りシェル。 MATLABのコマンドウィンドウに近い。 OpenModelica Notebook (OMNotebook)の説明。 コマンドの実行とその結果を含めてドキュメント化できる機能。 Jupyter Notebookに近い。
OpenModelica Compiler (OMC)はコンパイラ。 C言語を生成する。 インタプリタ用言語を生成してデバッグ動作を実現。 OpenModelica Connection Editor (OMEdit) グラフィックエディタ。 C++/Qtで作成されているためマルチプラットフォーム。
OpenModelicaの説明。 Wikiepdia英語ページから引用。 自動車、水処理、発電所の領域で使われている。 自動車業界でも開発フェーズだと相互運用性都合でプロプライエタリ品を使うことが多い。 複数のツールで構成されている。 コンパイラ、エディタ、インターフェス、プラグインなど。
Modelicaを扱えるツールは様々。 Amesim、Simplorer、Dymola、MapleSim、SimulationX、OpenModelica。 自動車業界ではMapleSim、SimulationXが多め。 HILS、Simulinkの相性の都合。 OpenModelicaはオープンソースなツール。
テーマは同じ趣味や興味を持つブロガーが共通のテーマに集まることで繋がりができるメンバー参加型のコミュニティーです。
テーマ一覧から参加したいテーマを選び、記事を投稿していただくことでテーマに参加できます。