やろうとしていること
複素平面上でスプライン(閉)曲線を定義し、複素フーリエ級数展開を行おうとしています。
Mathematicaのバージョンは11.3で、raspberry pi 3B+上で動かしています。
取り組んだこと
手続き型であれば次のようになると思います。
- 制御点の定義(List)
- スプライン曲線を作成(BSplineFunction)
- 複素数に変換(Complex)
- 複素フーリエ級数展開(FourierSeries)
これを元に以下のようにコードを記述しました。
(* スプライン曲線を定義 *) pts = {{1,0},{0,1},{-1,0},{0,-1}}; f = BSplineFunction[pts, SplineClosed->True]; (* 確認のため曲線をプロット *) Manipulate[ Show[ ListPlot[{f[t]}, PlotMarkers->Automatic], ParametricPlot[f[t], {t,0,1}], PlotRange->{{-1,1},{-1,1}}, AspectRatio->1 ], {t,0,1} ] (* 複素数に変換 *) g[t_] := Complex @@ f[t] (* 正しいか確認 *) g[0] Trace[g[0]] (* フーリエ変換 *) Trace[FourierSeries[g[t],t,5]]
発生した問題
g[0]
では以下のようにf[0]
が先に評価されて正しく計算されました。
- g[0]
- Complex @@ f[0]
- Complex @@ List[0, 0.666667]
- Complex[0, 0.666667]
- 0.+0.666667i
しかしFourierSeries[g[t],t,5]
では以下のように@@
が先に評価されてしまい、エラーとなりました。
- g[t]
- Complex @@ f[t]
- Complex[t]
TL;DR
Mathematicaでスプライン曲線を複素フーリエ級数展開するにはどうすればいいですか?
あなたの回答
tips
プレビュー