数学csapi関数を用いて双3次スプライン関数の生成と復元を行います。双スプラインとは2変数のスプライン関数のことです。言い換えれば平面の補間関数になります。peaksというMatlabのサンプル関数からいくつかを標本点を取り出して、双3次スプラインを行っています。peaksはこんな形をした関数です。x,y軸とも21分割したメッシュ上でのpeaks関数の値を得ることができます。y軸方向11分割したときのメッシュ上の点を使用することにします。lattice_Z);双3次スプライン関数を区分多項式pp形でcsapiから受け取けとります。fnplt(pp)で区分多項式を可視化すると、下図のようになります。元の関数よりもかなり滑らかになっていますが、概形はそこそこ似たものになっていることが分かりますね!補足ですが、csapiに入力する標本データ(上で言うlattice_Z)は以下のような形をしていなければなりません。[x;y])を実行することで得ることができます。標本点を以下のように荒くすると、スプライン補間も荒くなります。1:4:end));勾配を計算する必要があるなどで、双3次スプライン関数を陽な形で取り出しておく必要があるときは、ここから一工夫が必要です。双3次スプラインは区分多項式であるため、各格子領域ごとにそれぞれ関数が定まります。具体的には各格子領域について、スプライン関数は以下のような関数になっています。この画像のcoefsがその下のソースコードのcoefsに対応しています。@get_func;endハンドル関数を返す関数を書いています。y軸どちらかの格子区切りが3以下であるときは、このプログラムではスプライン関数を復元できません。その場合の対処法について分かり次第ここに追記いたします。matlabのcsapi関数ではde_Boorのアルゴリズムを用いて双3次スプラインを行っています。次回はそのde_Boorのアルゴリズムを自作してみようと思います。有理スプライン補間をMatlabで実装してみました。ビルトイン関数を表示するPythonユーザーのためのMatlab対応表はてなブログをはじめよう!inarizuuuushiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。