粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

怠惰な学生がJASSOの第一種奨学金の取得のために準備するべきこと(気をつけるべきこと)

結論から言うと保証人が立たなかった関係で私は奨学金はやめました。

腹いせに,事務作業の苦手な学生を想定して注意点とかつらつら書いて置くことにします。
なお,学校によって必要書類が若干違うという噂も聞いているのでそこんところは臨機応変に。

Q:奨学金って私でも貰えるの?

A:一人暮らしの大学院生なら大体もらえます。

奨学金には本来所得制限があり,マジモンに困ってる人以外は受けられないのですが,
大学院生になると実家の所得状況に関わらず,一人暮らしの世帯の収入と支出で判断してもらうことが可能です。


従って,「実家はそこそこお金あるけど一人暮らしきついのでお金ください」という事が可能です。

奨学金の書類を受け取りに行こう

大学の事務に行って,奨学金の書類を受け取りましょう。話はそれからだ。
複数のキャンパスにまたがっている場合は中心的な1キャンパスでしか配ってないとか受け付けないとかザラです。
殺意が湧きますね。

後は,分厚い冊子をよく読んで必要書類を準備すればいいです(記事終了)。
このやる気を削ぐ書類を見るより身近な人に聞いたほうが良いです。


友達や頼れる先輩の居ない人のために
以下幾つかの注意点についてまとめてみました。

収入に関する証明書で親からハンコとサインをもらう

月々の親の仕送り額を親に書いてもらってハンコとサインを貰う必要があります。
この書類は大事な上,親元を離れて一人暮らししている君達には非常に面倒くさいと思うので最優先でやってもらいましょう。

なお,最低限名前とハンコだけ貰えば仕送り額は自分で書いても良いようです。
まぁうまく調整してください。

先生に推薦書をいただく

必要書類の中で早めにやったほうが良いものとして,推薦書があります。
この推薦書には先生のハンコとサインが必要なので締め切りギリギリにいきなり手に入る人は少ないでしょう。

早めに動くんだよ。(なお,うちの大学は事情を説明して待ってもらうことが可能。)

なお,推薦所見は基本的には自分で草案を書いて先生の負担を減らすのが普通です。
大学院生たるもの自分のアピールポイントくらい自分で用意できるようにしましょう。
奨学金申請のための推薦状/推薦文の例文

収入に関する証書はめんどくさいぞ!

もし貴方がバイトをしていたなら面倒な事が起きます。
貴方の前年度の収入と今年度の収入がどんなものになるのか,きちんと雇用主に証明して貰う必要があります。

それに加えて源泉徴収票もきちんと添えなければ行けません。捨てるなよ。
なくしたらバイトはしていなかったことにしとけ

通帳のコピーも要求される

収入の欄に貯金の取り崩しなどの項があり,それに当てはまる人は直近三ヶ月の通帳コピーも要求されます。
普段通帳に記帳しない諸君は銀行に行く必要があります。

また,通帳の1ページ目も要求されるので忘れずにコピーを。
ていうか通帳なんか複数持ってて当たり前だしこんなのみても何の意味もないぞ。

保証人を2人立てたか?

返済の仕方において,保証人を立てる方法と機関保証に頼る方法があります。
後者は他の機関に返済時の保証を頼む代わりに毎月奨学金のいくらかを天引きされるシステムになります。


つまり貰った額より多く返さなければいけないので,なるべく前者の方が良いです。

保証人の条件

保証人の条件はざっくりいうと「逃げない」かつ「十分返済能力のある」親族です。


そして,「父母」に加えてもう1人選出する必要があります。
おじやおばに頼るのがよくあるパティーンですが,親族が海外にいる場合は厄介です。(実際断られました。)
親族以外にもこれをお願いすることが出来ますが,収入の証明書や誓約書を出させるなんて,
今時儀父母くらいにしか頼めないのではないだろうか。(嫁はダメだそうな)

申請窓口には早く並べ

当然ですが申し込み当日にはたくさんの人々が奨学金を申請しに来ます。
窓口の狭いこと人の多いこと。早めに書類を仕上げて並んで提出するのが精神衛生上最も良いかと思われます。

そしてこういう手続は漏れがあるのが前提なので多少書類が足りなくてもとにかく期日までに行ってみること!

おわりに

お金周りはめんどくさい!

パワポのお洒落テンプレートを作ろう

ご無沙汰しております。

最近ずっと堅い内容についてばかり記事を書いてきたので
たまには女子力を発揮してお洒落なPPTのテンプレートを作ってみようかなと思います。

自作テンプレートの作り方

PPTのテンプレはネット上にたくさん落ちていますが,一手間かけることで自分だけの書式を作ることが可能です☆

具体的には「表示」タブの中の「スライドマスター」という項目からこれを編集できます。
support.office.com

スライドマスターの中で図や写真を挿入することによって,
f:id:ossyaritoori:20170309224545p:plain

このように全てのスライドに変更を適用できます。
f:id:ossyaritoori:20170309224657p:plain

こうやってテンプレートが出来るってわけ。


デザインセンス0でも出来る ♡ お洒落テンプレートの作り方

ぶっちゃけオシャレなスライドを作るにはセンスが必要です。
でもセンスが皆無な我々にもそれっぽいものを作ることは可能です。

その方法は…「お洒落な画像を使う」ことです。


お洒落は結局イケメン(良い素材)を選ぶところが大きいってことです。
残酷ですね!!!
f:id:ossyaritoori:20170309225330p:plain
それにしても誰だこんな画像作ったやつは。


つまりこういうことです。
f:id:ossyaritoori:20170309225736p:plain

おしゃれな画像探し

おしゃれな検索ワードで画像検索しましょう。
その際「壁紙」とつけることで良い画像にめぐり逢う確率が上がります。

何故なら,壁紙はその時点である程度デザイン性を考えられているものがほとんどだからです。
すでに厳選済みのイケメンをスカウトすることができるというわけです。


ただ,できるだけシンプルな画像をチョイスすることをおすすめします。
最重要キーワードは「シンプル」です。
f:id:ossyaritoori:20170309230009p:plain

スライドへの加工

加工もなるべく簡単にすべきです。
四角いオブジェクトを被せて透過するのが最も素材を活かせて簡単かと思います。

端っこのほうを少しだけ露出することで透過している感を出すテクとかは結構使えます。
f:id:ossyaritoori:20170309231621p:plain


最も難しいのはタイトルだと思っています。
正直全然うまく作れませんでしたが,お洒落画像+透過+影 くらいのシンプルさでそれなりに見れるものには仕上がりました。
f:id:ossyaritoori:20170309231723p:plain

まとめ

イケメンはシンプルに清潔な格好をするだけでお洒落。

中国に来た時の連絡手段をどうするか

現在中国に来ています。

中国に来た時に1番困るのは食べ物でも空気の悪さでもなく
SNSの類が使えないことです。

具体的には,

の類が使えないです。インスタもダメなんでないかな?
これは結構由々しき問題でして,他の方々と全く連絡が取れないなんてザラです。


使うサービス

Yahoo

Google検索も死ぬので,Yahooを使っています。
Yahooメールもきちんと動作する数少ないメールなので,出張などの際は持っておいて損はないでしょう。

Gmailからの自動転送機能を使用することによって緊急の案件をキャッチアップ出来るようにしています。

Wechat

中国語では微信と書きます。
LINEにいろいろ機能がついた用な感じです。

中国における最もPopularなSNSで(多分)実際使い勝手も普通に良いので
滞在中に連絡しあいたい場合は携帯にインストールしておくと良いです。

はてなブログの扱い

はてなブログの記事は更新できるようです。
はてなブログは記事を更新した時にSNSに投稿できます。この機能を使ってSNSへの投稿を試してみることにします。

2017/02/21追記:やはり無理でした~w

TexStudioの機能集/Extention

先日TexStudioを布教したものです。
布教活動の一環として便利機能を幾つか紹介したいと思います。

TexStudio入れてない方は以下のページ等参考にどうぞ。
ossyaritoori.hatenablog.com

ドラッグアンドドロップによる図の貼り付け

TexStudioニキはドラッグアンドドロップD&D)で図を張れます。
実際にエクスプローラーからD&Dすると次のような画面が出ます。

何もいじらないでも図は出せますが,黄色マーカを引いたサイズの指定と
Captionの設定,後は論文の場合はtopに配置するように記述するようにしましょう。
f:id:ossyaritoori:20170211181625p:plain:w300

今気づいたのですが左下で設定を保存できますね。

  • 良いところ:ファイルを全て相対pathの形で貼るため何処からでも貼れる。
  • 注意点:ディレクトリ名が日本語だとghostscriptが場所を読めない時がある。

基本的には使い得な機能です。

簡単行列or表作成

[ウィザード]→[簡単行列作成]で簡単に行列を作れます。
意外とbegin{array}と&書くの面倒ですからね。

f:id:ossyaritoori:20170211185933p:plain:w450
これも重宝している機能の1つです。

英文スペルチェック

英語で文章を書く際にリアルタイムでスペルチェックを行ってくれるのはとても便利な機能です。
専門用語等は教える必要がありますが…

「エディタ」で以下のインラインチェックという箇所を「有効」にします。
f:id:ossyaritoori:20170211185310p:plain:w450
なお,日本語文書ではスペルチェックが超うるさくなるので適宜ここを開いてON/OFFしてください。

次に,「言語チェック」あるいは「Language Checking」を参照して使用する辞書の言語を設定します。
デフォルトではde_DE(ドイツ語)ですので変えないと悲惨なことになります。
f:id:ossyaritoori:20170211185547p:plain:w450

追加の辞書の入手

なお,デフォルトでも辞書は入っているようですが上手く動かない場合もあります。
英語版の辞書ファイルはオンラインで入手可能です。以下のoxtファイルをダウンロード後解凍します。
US English Spell Checking Dictionary | Apache OpenOffice Extensions
解凍して出来たフォルダをtexstudio\dictionary以下に移動してその位置を「スペルチェック辞書のディレクトリ」へとコピーします。

最終的な見た目はこんな感じ。
f:id:ossyaritoori:20170507151101p:plain
文法も見てくれるらしいですがどの程度かは不明です。

赤線で表示されない時

「構文の強調表示」の「言語の確認」において,「スペル間違い」で赤下線を引くように設定しないと何も起こりません。
一度ハマったのでメモとして残しておきます。

なお参考:
TeXstudioでの(英語辞書のインストール方法) - #include"blog.h"

簡単?数式作成(ネタ)

数式補助のところを押すとこんなのも出ます。
f:id:ossyaritoori:20170211182517p:plain:w300

お絵かきで数式を書けるのは初心者に優しいですね。
ペンタブがある環境などでは比較的活躍の余地があるかもしれません。

ちょっと使い慣れない感じの記号を入れてもきちんと出来るようです。
f:id:ossyaritoori:20170211182839p:plain:w300
案外有能な機能な気がしてきた。
こんな形式でコードを生成してくれるようです。

$\left\{\begin{array}{c}\stackrel{.}{x}=Ax+Bu\\ y=Cx+Du\end{array}\right\$

すごーい!

lとかiとかの識別は苦手っぽいです。

背景色変更

TexStudioの欠点として背景色で暗い色を選べないという問題があります。
これは目に悪い…

tex.stackexchange.com
ここの記述を参考にして以下の
1.darktheme.txprofileというファイルを
AppData/Roaming/texstudio以下に作る。

2.中身はこんなん

3.Texstudioのオプションから上記ファイルを選択し,再起動

MatlabでLevenberg-Marquardt法

過去記事が地味に反応あったので調子乗って続きをば。
ossyaritoori.hatenablog.com

前回のGauss-Newton法に引き続き,
Levenberg-Marquardt法についてです。

フィッティングの手法としてはGauss-Newtonより多用される王道中の王道ですね。

概要

前回のGauss-Newton法を前提にしているのでそっちを先に参照してくださいな。
matlabはstudentバージョンで2015aで動作します。
symbolic math Toolboxを使っております。

アルゴリズムについて私的見解

以下の記述は私の持ってるイメージですのであしからず。
間違ってたらコメントにて教えてください,

Gauss-Newton法は2次収束するNewton法において,ヘッセ行列をヤコビ行列の二乗で近似した手法ですが,
勢いが良すぎてぶっ飛んでしまうことがあります。
そこで,適切なダンピングファクターλを下のように導入します。

\Delta v =  - (J^TJ+\lambda I)^{-1}J^T \  r

適度にダンピングをかけることで吹っ飛ぶのを回避できるってわけ。


なお,ダンピング項のIは最も簡単には単位行列,もう少し賢く行くにはヤコビアンの二乗の対角項を使うようです。
減衰最小二乗法とも言うようですね。

\Delta v =  - (J^TJ+\lambda diag(J^TJ))^{-1}J^T \  r
matlabで書くならダンピング項はこんな感じか,簡単すな。

I = diag(diag(J.'*J))

知恵袋の秀逸な解答

なお,以下の知恵袋の解答も秀逸です。
Levenberg-Marquardt法(LM法)は非線形最小二乗問題を解く有力な... - Yahoo!知恵袋

最急降下法とGaussNewton法の組み合わせ」という言はたしかにしっくり来ます。

以下の式は数学的には超間違い!!ですが,
感覚としてこんな感じってことなのはなんとなくわかります。
\Delta v =  - (J^TJ)^{-1}J^T \  r - \lambda^{-1} J^T \  r

この式は怖い人がなんか言ってきたら消します()

問題設定

前回のと同じ,wikipediaの例題です。
ガウス・ニュートン法 - Wikipedia

関数:
 y = \dfrac{ax}{x+b}

Gauss-Newton法との比較

λをいじった場合どのように収束速度が変わるかを示す図が以下の通り。
f:id:ossyaritoori:20170201221137p:plain

Legendが適当なのはごめんなさい。ダンピングと言う通り,λを大きくすると収束速度は鈍ります。

補足:パラメータ空間でのアルゴリズムの様子

変更するパラメータa,bを0~1の範囲で変えて残差の二乗和の関数の様子を見ました。

残差の二乗和:  S = \sum_{i=1}^n (r_i)^2

f:id:ossyaritoori:20170201224437p:plain
なるほど今回の例では傾きの急な所から1方向にガツンと降りていくだけなのでそれほど差がないのも頷けます。
向かい側にも山があるお椀型の場合,GN法だと行ったり来たりする時がある印象です。

f:id:ossyaritoori:20170201225553p:plain
降りた時の軌跡はこんな感じ。我ながら結構わかりやすくなって満足。


Levenberg-Marquardt法:コード

基本的な解説はGaussNewton法の所を読んで下さい。
ダンピング項を加えただけです。

%%  https://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%E3%83%BB%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95
% http://org-technology.com/posts/gauss-newton-method.html

%% get data
clear all;
% data for fitting
xhat = [0.038, 0.194, 0.425, 0.626, 1.253, 2.500, 3.740].';
yhat = [0.050, 0.127, 0.094, 0.2122, 0.2729, 0.2665, 0.3317].';

%% making evaluate funciton
syms a b x y

% evaluate fuction
func = a*x/(x+b);
R = y - func;
S = R^2;

% partial derivative
Ra = diff(R,a);
Rb = diff(R,b);

% make jacobian matrix
Ja = subs(Ra,{x,y},{xhat,yhat});
% subs(fa,[x,y],[xhat,yhat]); ではダメ
Jb = subs(Rb,{x,y},{xhat,yhat});

Jacob = [Ja,Jb]; % jacobian


%% initial value
vinit = [0.9;0.2];
v = vinit;
iteration = 10;

% lambda
lambda = 1;
I = eye(size(Jacob,2));
% evaluate function
SumOfError = zeros(iteration,1);
SEF = subs(S,{x,y},{xhat,yhat});


%% iterative optimization
% error function
r = subs(R,{x,y},{xhat,yhat});

for i = 1:iteration
   J = double(subs(Jacob,[a,b],v'));
   df = double(subs(r,[a,b],v'));
   delta = - ( J.' * J  + lambda * I)\J.' *  df;
   v = v + delta;

   SOE = double(subs(SEF,[a,b],v'));
   SumOfError(i) = SOE.' * SOE;
end

%% showing
fit = subs(func,x,xhat);
yfit = double( subs(fit,[a,b],v') );

figure(3);
plot(xhat,yhat,'+',xhat,yfit);
xlabel('x');
ylabel('y');
legend('data','fitted value','Location','Best');
grid on;

figure(4);
plot(SumOfError);
xlabel('iteration');
ylabel('Sum Of Squared Error');
legend('Squared Error value')
grid on;

マッピングのコード

ndgridを初めて有効に使った気がします。
及第点。

%% mapping
Ms = 20;
Map = zeros(Ms);
% evaluate function
SEF = subs(S,{x,y},{xhat,yhat});
A = ndgrid(1:Ms,1:Ms)/Ms;
B = A.';


for i = 1:Ms
    for j = 1:Ms
        v = [i/Ms;j/Ms];
       SOE = double(subs(SEF,[a,b],v'));
       Map(i,j) = SOE.' * SOE;
    end
end

%% showing
figure(5);
mesh(A,B,Map);
xlabel('a');
ylabel('b');
grid on;

MATLABで非線形最小二乗フィッティングする手順メモ

多数のデータ群から関数フィッティングを行う場合に非線形最小二乗法を用います。

MATLABにはOptimization Toolboxなどがあり,それを用いると簡単にフィッティングできます。
以下のブログなんかに解説がありますね。
MATLABで非線形最小二乗問題を解く - Py


このようなToolboxなしでも,
地道にこれを解く手順がありますので勘所をメモしておきます。
なお,数式とアルゴリズムの基礎がわかっている前提で書きます。

ダンピングを入れたVerはこちら。
ossyaritoori.hatenablog.com


アウトライン

matlabのバージョンは生協で買ったStudent version(2015a準拠)です。
本記事ではsymbolic math Toolboxを使って「偏微分」と「変数代入」を行います。
(頑張ればここは手作業でいけます。しないけど。)

ヤコビアンを求めて,Gauss-Newton法の枠組みでこれを計算します。

こんな風にフィッティング出来ます。
f:id:ossyaritoori:20170131220211p:plain

なお,Gauss-Newton法は案外簡単に発散するのでその場合は以下のLevenberg-Marquardt法を試してみてください。
ossyaritoori.hatenablog.com


問題設定

例題としてwikipedeiaの問題を考えます。
ガウス・ニュートン法 - Wikipedia


Fitting対象の関数は以下のようになります。

 y = \dfrac{ax}{x+b}

フィッティングするのはaとbの2つの変数です。

フィッティングするデータは次の様に表せます。

% data for fitting
xhat = [0.038, 0.194, 0.425, 0.626, 1.253, 2.500, 3.740].';
yhat = [0.050, 0.127, 0.094, 0.2122, 0.2729, 0.2665, 0.3317].';

通常こういう値のベクトルは縦向きですので後ろで転置してます。
今回は7×1のベクトル,すなわち7個のデータセットですね。

問題の定式化

残差と最小二乗和を以下の様に定義します。iはデータ群の各成分ってこと。

残差:  r_i = y_i - \dfrac{ax_i}{x_i+b}

残差の二乗和:  S = \sum_{i=1}^n (r_i)^2

Symbolic math Toolboxを使ってこれは次の様にかけます。

%% making evaluate funciton
syms a b x y

% evaluate fuction
func = a*x/(x+b);
R = y - func;
S = R^2;

ヤコビ行列の作成

ヤコビ行列を求めます。偏微分はシンボリックの微分diffで簡単に作成できます。
(もっと簡単に作成する手法は一番下を参照)

実装上工夫する点は,

  • 代入できる値は早めに代入して,計算コストを減らす,(シンボリック計算は重い)


% partial derivative
Ra = diff(R,a);
Rb = diff(R,b);

% make jacobian matrix
Ja = subs(Ra,{x,y},{xhat,yhat});
Jb = subs(Rb,{x,y},{xhat,yhat});

Jacob = [Ja,Jb]; % jacobian

Ja,Jbの計算では,ヤコビ行列に先にフィッティングデータの値を代入して後の計算を楽にします。

補足:ヤコビ行列のサイズ

フィッティング係数がm個,データがn個あるとします。

この際,ヤコビ行列はn×mになることに注意。
f:id:ossyaritoori:20170131214013p:plain:w200

注意:subsを用いた複数の配列の代入

subs関数を用いてシンボリックに配列を代入する時の書き方ですが,ややコツがいるかも?
公式を読んでいると以下のように代入しがちですがアウトです。

% 失敗例
subs(fa,[x,y],[xhat,yhat]); 

セル配列として受け渡すのが正解です。

% 成功例
subs(fa,{x,y},{xhat,yhat}); 

セル配列誰かに教わりたい。

反復計算による求解

ヤコビ行列が求まれば,その時々のパラメータの推定値 a_n,b_nをヤコビ行列Jと残差Rに代入して更新量がわかります。
パラメータをまとめてvとし,残差への代入値をrとすると,

更新式:  v_{new} = v + \Delta v
に対して

 \Delta v =  - (J^TJ)^{-1}J^T \  r

が求める計算です。
これまたsubsでの代入に注意。

% 残差に事前にフィッティングするデータを代入。
r = subs(R,{x,y},{xhat,yhat});

%ヤコビ行列にデータvを代入
J = double(subs(Jacob,[a,b],v'));
% 残差にも代入
df = double(subs(r,[a,b],v'));

% 更新量Δを計算して更新
delta = - ( J.' * J )\J.' *  df;
v = v + delta;

symsだと計算した値がシンボリックのままになるので,
doubleで一度数値に直しています。

補足:行列のサイズ

フィッティング係数がm個,データがn個あるとします。
この例題では,m=2,n=7ですね。

図解すると次のとおりになります。
f:id:ossyaritoori:20170131215154p:plain



計算結果

今回は固定ステップ itaration=10 でやりました。
一般的には,「誤差が閾値を下回るまで」という条件付けをします。
正確さを気にしなければ誤差の微分見て鈍くなった所で止めてもいいかと。

フィッティングの結果を図示します。
f:id:ossyaritoori:20170131220211p:plain


各ステップ毎の誤差の二乗和Sは次のようになっています。
f:id:ossyaritoori:20170131220401p:plain

順調に減って居ますが途中から鈍くなってますね。今回最適化した結果は

a = 0.3618
b = 0.5563

です。wikiの値とほぼ同じですね。

まとめと今後

simbolicでGauss-newton法のフィッティングを行いました。
今後やるとしたら以下についてまとめる予定です。

サンプルコード

終了条件が誤差の大きさではなく,反復回数になっているので気に食わない方は変更してね。

%% get data
clear all;
% data for fitting
xhat = [0.038, 0.194, 0.425, 0.626, 1.253, 2.500, 3.740].';
yhat = [0.050, 0.127, 0.094, 0.2122, 0.2729, 0.2665, 0.3317].';

%% making evaluate funciton
syms a b x y

% evaluate fuction
func = a*x/(x+b);
R = y - func;
S = R^2;

% partial derivative
Ra = diff(R,a);
Rb = diff(R,b);

% make jacobian matrix
Ja = subs(Ra,{x,y},{xhat,yhat});
% subs(fa,[x,y],[xhat,yhat]); ではダメ
Jb = subs(Rb,{x,y},{xhat,yhat});

Jacob = [Ja,Jb]; % jacobian


%% initial value
vinit = [0.9;0.2];
v = vinit;
iteration = 10;

% evaluate function
SumOfError = zeros(iteration,1);
SEF = subs(S,{x,y},{xhat,yhat});

%% iterative optimization
% error function
r = subs(R,{x,y},{xhat,yhat});

for i = 1:iteration
   J = double(subs(Jacob,[a,b],v'));
   df = double(subs(r,[a,b],v'));
   delta = - ( J.' * J )\J.' *  df;
   v = v + delta;

   SOE = double(subs(SEF,[a,b],v'));
   SumOfError(i) = SOE.' * SOE;
end

%% showing
fit = subs(func,x,xhat);
yfit = double( subs(fit,[a,b],v') );

figure(1);
plot(xhat,yhat,'+',xhat,yfit);
xlabel('x');
ylabel('y');
legend('data','fitted value','Location','Best');
grid on;

figure(2);
plot(SumOfError);
xlabel('iteration');
ylabel('Sum Of Squared Error');
legend('Squared Error value')
grid on;

参考資料

基本的には教科書を読もう。

ガウス・ニュートン法 - Wikipedia

Python NumPy サンプルコード: Gauss-Newton 法で非線形最小二乗問題を解く | org-技術

jacobian 関数の使用 :2017/3/7 更新

「ヤコビ行列はシンボリックの微分diffで簡単に作成できます。」
matlabにはjacobian関数が存在し,ヤコビ行列を一発で作成してくれます。

% partial derivative
Jacob = jacobian(R,[a b]);

Referenceをちゃんと読もうな。

初歩過ぎてあまり説明を見ないベクトル・行列の微分の公式

行列で偏微分をしなきゃいけない時にとっさに忘れて非常に困ったので自分用にメモを残します。

ベクトルでの微分

Aとxはベクトル(行列)とします。


1.  \dfrac{\partial A^T x}{\partial x} = A

2.  \dfrac{\partial x^T A}{\partial x} = A

手計算してチェックしてもいいですが,パっと思いだすのにはやっぱ書いておくべきでしょう。
もちろん,適当に成分を仮定して計算することも出来ます。


3.  \dfrac{\partial x^T A x}{\partial x} = (A+A^T) x

4. \frac{ \partial }{ \partial x }
\left(Ax - b \right)^T C
\left(Ax - b \right)
 = A^T \left(C+C^T\right)\left( A x - b \right)



3の練習用の証明)
 \dfrac{\partial x^T A x}{\partial x} = \dfrac{\partial (x^T A) x}{\partial x}+\dfrac{\partial x^T (A x)}{\partial x}


積の微分法。表記にはすこぶる自信がない。それぞれ1と2を適用して下のようになる。

  = (x^T A)^T + A x

ここで,  (AB)^T = B^TA^Tなので,

  = A^Tx + A x

とまぁこんな感じか。


4も地道に展開すれば証明できます。

行列での微分


 \begin{equation}
\dfrac{\partial}{\partial X} a^\top X b = ab^\top
\end{equation}

メモ

  • 2ノルムの計算はそのまま行列の掛け算で分解するよりも内積の形に変更して分配・交換を駆使した方がきれいになる。