サブロウ丸

主にプログラミングと数学

deBoorの公式

上の記事で紹介したMATLABのcsapiはdeBoorの公式を用いて双3次スプラインを行っています。 この記事ではそのdeBoorの公式を自作してみたいと思います。 アルゴリズム さて、ここでどのようにfxやfyを計算するかというと、 この記事の方法を用います。スプラ…

【Matlab】双3次スプライン(csapi)

csapi関数を用いて双3次スプライン関数の生成と復元を行います。 双スプラインとは2変数のスプライン関数のことです。 言い換えれば平面の補間関数になります。 まずはソースコードから。 peaksというMatlabのサンプル関数からいくつかを標本点を取り出して…

有限差分法による勾配の計算

問題設定 一次近似 二次近似 三次近似 この三次近似について、幾何的にどうとらえられるかを考えてみました。 (面積で議論することもできると思います) 四次近似については’Runge-Kutta法’という方法が知られています。 それについては、こちらをどうぞ ルン…

【Matlab】 有理スプライン補間

有理スプライン補間をMatlabで実装してみました。 有理スプライン補間とは3次スプライン補間の3次の項を双曲線関数に置き換えたものです。 有理スプラインはパラーメータをうまく調節することで、 3次スプライン補間(参考: 3 次スプライン データ内挿 - MATL…

【Mac】Cbcソルバー 並列処理

Cbcとはオープンソースの混合整数線形計画(mixed integer liner program)ソルバーです。 混合整数線形計画問題とは読んで字のごとく、 線形計画問題の中に連続変数と、整数変数が混合している問題のことになります。 そのCbcソルバーで並列処理を行えるよう…

【Matlab】 ビルトイン関数を表示する

Matlabでビルトイン関数(標準関数)は edit 関数名 で表示できます。 こんな感じ。

Newtonの差分商補間(後編)

これの後編です。 実際に簡単な関数でいくつか補間による近似を行なってみたいと思います。 fが近似したい関数、gがデータ点(0, 0) (1, 1) (2, 2)から構成した差分商補間になります。 fは2次式でかつ、前編の最後の定理「剰余なしのn項からなるNewtonの差分…

Newtonの差分商補間(前編)

Newtonの差分商補間の理論についてです。内容は高校レベルでしょうか。 最後の定理は強力ですね。 補間といえば、他にはLagrange補間が有名ですが、 Lagrange補間よりも計算量が少ないことが特徴です。 一番最後の証明は、「n点を補間するn-1次の多項式はLag…

PythonユーザーのためのMatlab対応表

PythonユーザーのためのMatlab対応表を作っていこうと思います。 Matlabのドキュメントは初心者殺しっぽいところがありますよね… 徐々に増やしていく予定です。 list 宣言・要素の追加 python a = [1, 2] a.append(3) # a = [1, 2, 3] a.append(4) # a = [1,…

線形計画問題における、とある条件を持つバイナリ変数の表現方法について - その2

この記事の続きです。 inarizuuuushi.hatenablog.com この記事の中で2通りの方法を載せていますが、どちらの方が良いか調べてみたのでその報告です。 上の問題を解きます。 それぞれ制約の入れ方は 以前の記事では、2つ目のパターンでは分数の形で記述してい…

brewでpython3をupgradeするとpip3が使えなくなった件

件名がルー大柴みたいになってしまいました。 python3.6.2にupgradeすると、なぜかpip3が使えなくなってしまいました。 $ pip3 -bash: pip3: command not found 一旦brew uninstall --ignore-dependencies python3 でpython3をアンインストールした後で もう…

opencv3.3.0 インストール エラー

brewにてopencv3のupgradeがあったのですが homebrew/science/opencv3 3.3.0_1 ==> Upgrading homebrew/science/opencv3 --with-python3 ==> Downloading https://github.com/opencv/opencv/archive/3.3.0.tar.gz Already downloaded: /Users/tateiwanariaki…

python pulp 変数和

pulpです。 変数の和を表現するときにsumよりもlpSumを使った方が高速にプログラムが動くという話です。 この簡単な最小化問題を例に。aは定数、bは実変数です。 import pulp from random import randint # A new Lp problem prob = pulp.LpProblem('sample'…

線形計画問題における、とある条件を持つバイナリ変数の表現方法について

最近、線形計画問題に取り組んでいまして、以下のようなバイナリ変数xを定義する必要が出てきました。 バイナリ変数とは0と1の2値のみをとり得る変数のことです。 これがなかなか難しくて、いろいろ調べてみて、 2通りの定式化を行いました。 1つ目は以下の…

【Mac】パスワード付きzipファイルの作成

パスワード付きのzipファイルをコマンドライン上(ターミナル)で作成する方法です。 文法は zip -e (圧縮後ファイル名) (圧縮対象のファイルパス) あとは指示に従うだけです。 $ zip -e sample.zip sample.txt Enter password: (パスワードを入力) Verify pas…

【Matlab】【Python】ディレクトリ内のファイルに対し反復処理を行う

python from glob import glob files = glob('パス名'); for file_name in files: pass file_nameにはファイルパスが代入されます。 matlab files = dir('パス名’) numfiles = length(files); for i =1:numfiles file = files(i); file_name = file.name; fo…

Hornerの公式

Hornerの公式という多項式の計算を高速に行う方法があります。 と言っても仕組みは簡単で以下のような式変形を行うだけです。 単純に項ごとを足し合わせるよりも、掛け算の回数が減っていることが分かりますね。 計算量はそれぞれ となっています。 実験 # P…

homebrew でインストールできるモジュール

typespeed タイピングゲームが楽しめます tldr (too long, don’t read)の略で manコマンドを簡潔にしたコマンドです。 man は長すぎるので「tldr」

最短路問題を線形計画法で解く2

グラフの最短路問題はダイクストラ法等で解くのが普通ですが、 今回も線形計画法で解いてみたいと思います。(あえてね) ↓その1です。 inarizuuuushi.hatenablog.com が定式化となります。(とするとが続いているところは無視してください) 路の制約として、フ…

最短路問題を線形計画法で解く (Python)

グラフの最短路問題はダイクストラ法等で解くのが普通ですが、 今回は線形計画法で解いてみたいと思います。(あえてね) 定式化は こうなります。 最短路を解く問題なのに目的関数が最大化になっているところが面白いですね。 ad(j)については、jの隣接ノード…

AppleScript で Excelでグラフ描写と保存を自動化

どーしても、Excelでグラフを大量に作成したいときには AppleScriptで書かせましょう。 (サンプルコード) tell application "Finder" --theListにファイルパスのリストを代入 set theList to {"ファイルパス,ファイルパス,....."} --for文 repeat with file_…

最短路計算における、楕円を用いたグラフの枝刈り

上記のグラフのstartからgoalまでの最短路を求めたいとします。 (グラフの枝の重みは枝の長さ) 直感的には、startとgoalから離れた点や枝を考える必要はない(i.e.最短路にそれらの点や枝が含まれることがない)ように思えますが、 それをどう厳密に表現するか…

Mac MobileBackups

Mac book air のストレージ容量が溜まってきたなーと思ったので、 sudo du -sh /* で、ルート下のディレクトリについてその容量を計算させてみると (オプション-sは「ファイルやディレクトリの総計を表示する」、-hは「容量を適当な単位で表示する」という意…

brew cleanup

brew cleanup homebrewでインストールしたパッケージの古いバージョンのキャッシュの削除を行います。 容量整理に

【Python】 newton法(非線形計画)

newton法とは、目的関数の最小化元(或いは最大化元)を求める問題に対する反復法と呼ばれる解法の一つです。 関数fと勾配、初期点を問題に合わせて入力する必要があります。

【Python】 最急降下法(非線形計画)

最急降下法とは、目的関数の最小化元(或いは最大化元)を求める問題に対する反復法と呼ばれる解法の一つです。 目的関数fと勾配、初期点を問題に合わせて入力する必要があります。

Java charのインクリメント

アルファベットが1文字ずつ入った配列の作り方です。 class Sample{ public static void main(String []args){ char []alphabet = new char[26]; char c = 'a'; for (int i = 0; i < 26; i++){ alphabet[i] = c++; } } } charクラスのオブジェクトにもインク…

Pulp Overwriting previously set objective エラー

Pythonの線形計画法ソルバーライブラリであるpulpを使っていると、突然以下のエラーが。 warnings.warn("Overwriting previously set objective.") 目的関数を上書きしているぞ、との警告のようですが身に覚えがなかったので、調べていくと、 a = [変数 for …

三角形の合同条件と、それに対応する面積公式

ある二つの三角形について、その形と大きさが等しいとき、それらは「合同である」と言います。 この合同についてみなさん、中学校で以下の三つの合同条件を習ったと思います。 ・三辺相等 ・二辺狭角相等 ・二角狭辺相等 例えば三辺相等について、 三角形の…

対称グラフの完全マッチング数について

完全マッチングについて面白い定理を見つけたので、ご紹介します。 まず、完全マッチングについて、 グラフ理論においてマッチングとは、グラフ中の枝集合で、互いに端点を共有しないもののこと。特に、これ以上枝を追加できないもののことを極大マッチング…