粗大メモ置き場

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

Myscriptで手書きのTex入力環境 in Android タブレット

Myscriptによる手書き数式のTex変換

Texの面倒な数式を回避する際にはマクロを使ったりなんやかんや工夫が求められているかと思います。

TexStudioにも手書き認識機能がありましたね。 ossyaritoori.hatenablog.com

以下のサイトが結構良さげなのでこれを用いて数式をメモするのが手段としてアリかも。 Myscript

試しに正規分布の式を書いてみました。ちょっとコツが必要

f:id:ossyaritoori:20180821215418j:plain

ちょっとおかしいのはご愛嬌ですがちょっとしたメモとしては成立するのではないでしょうか。 他にも行列はOKですが,太文字には対応していませんでした。

なお,以前はアプリ版が存在したらしいのですが今はなんか有料の劣化版アプリが出ていてあまり魅力的ではないです…

Webページへのショートカットをホームに追加

Chromeのアプリの機能で右上の︙マークから「ホーム画面に追加」という項を用いてホーム画面に追加できます。やったね。

作ったTex文を共有

あとはどうとでもなるのですがPCとの共有手段をこれから吟味します。 候補としては,

などのクラウドに一度上げてしまうのを考えています。

Study of か Study on か?

はじめに

「~~に関する研究」を英訳するときに「A Study on ~~」を使うか「A study of ~~ 」を使うか迷いますね。 私は前者でしたが後者もゴロが悪くないのでどっちがいいのかなぁと漠然と調べてみました。

日本語サイト

事例1:ON派

Yahoo 知恵袋のページより。

以下のような言い回しが言及されてます。

study in 〜における研究
study on 〜に関する研究
study of 〜の研究
study into はわかりません。

一番多く目にするのは、study onではないでしょうか。
学術「に関する」の意味では、前置詞onがふつう用いられます。

実際学術論文ではStudy onの方が多くHitするように思われます。

事例2:Of 派

一方で論文タイトルでない平文では文法的にofが多く用いられるようです。例文の出展

<例1> Acoustics is the study of sound and sound waves.
(音響学とは音と音波の研究のことである)

<例2> Ecology is the study of habitats and the living things that live in them.
(生態学とは生息地とその中の生物の研究のことである)

<例3> A study of atomic structure has proved that the nucleus of an atom
consists of protons and neutrons.
(ある原子構造の研究から、原子核は陽子と中性子から構成されることが分かった)

英語圏における議論

英語圏においても議論があり,ここにおける議論が非常に参考になります。

意見としては,

  • どちらも意味が通じるのでどっちでも良いがofが好き
  • 文法的にはofが正しいのでofを使うべき
  • Googleでの検索数が100:1でofの方が多い(これには反論が多かったです)

など,ofを推す声が多かったです。

ニュアンスの違い

先程のページの中で若干のニュアンスの違いについて言及されたコメントがあります。(ここの議論にもあります)

I would use "on" if talking about a formal study with carefully defined procedures and goals. I would use "of" in a less formal context.

I'm trying to organise funding for a long-term study on the factors causing ...

Our results will be meaningless without at least a brief study of the factors causing ...

Study onの後に続くのはよりキチンと定義されたFomalな内容であり,ofはより一般的な意味合いを持つということみたいです。 これは少し個人的な感覚にも合致します。

面白いのは他のいくつかの議論でも上記の発言が引用されてonが勧められている節が有り,Googleの検索結果が言論を作っているのではというのが気になりました。

他には,下記のサイトにて

“study of” vs. “study on”

(Oxfordの辞書の引用をした後に)

So "study on" is OK, as well as "study of". To my mind the difference is:
1. study of = studying smth. (somethingの略)
2. study on = studying on topic of

という話もあります。on のあとに続くのは明確に定義されたトピックであるということですね。

まとめ:自分の解釈

概してどちらでも文法的には咎められない(少なくとも決着がつかない)という前提で自分の解釈を書きます。

なお,その後いくつかの議論を見ていくとofしか認めないという意見の方もいる(逆は居ない)ので場合によっては指摘されるのを覚悟したほうがいいかもしれません。


A Study on Xと書くのはこのStudyがXについての研究体系の1つに組み込まれるという印象を持ちます。 A Study on Humanと書けば「人間について行われた多くの研究」のうちの一つであるとタイトル的に暗示している雰囲気があります。

一方で,A Study of Xと書けばXについての研究であることを単純に主張する形になるかと思います。この研究は単にXについて調査したものであると感じられるので,従って先例がなかったり体系だっていないときは「A Study of チュパカブラ」のような表現が望ましいと思われます。

したがって学術論文のタイトルとしては先例と体系だった背景を感じさせる「on」を使う方が良さそうに思われます。

皆さんの意見をお聞かせください。

Androidタブレットでペーパーレスな暮らしのための環境構築

この記事の時点でAndroidタブレットに物理キーボードを繋いで書いています。 かなり快適でリモートデスクトップと合わせればPCを持ち歩かなくてよくなりそう。

今回は紙の書類を駆逐するため、手書きメモとPDF文献管理をメインに据えて紹介していきます。

自分の環境

Android8を積んだhuaweiタブレットを使っています。 iOSの人は話し半分に聞いてください。

ossyaritoori.hatenablog.com

現在の仕様状況

目的とそれに対応するアプリは以下のようになっています。(2018/7/14)

  • お絵かき:Autodesk
  • メモ:Squid,XODO
  • PDF編集:XODO
  • 文献管理:Mendeley
  • 外部ディスプレイ化:Spacedesk

手書きメモ用

デフォルトで入っている手書きメモアプリは手書き入力した文字をテキストに変換してくれる点で新しいですが、別にそんなに役に立つ場面は無さそうです。

Squid

Squidはノートの機能に特化したアプリです。

紙のメモのように書けます。

  • 筆圧検知とパームリジェクション(ペンのみを検知する機能)が使える
  • 写真も貼れてPDFなどにエクスポート可能
  • タッチですぐ消せる消しゴムが有能
  • 動作が軽快かつ広告が少ない

私の汚い手書き文字を見せましょう。

autodesk sketchbook

メモと言うよりお絵かき用ですがautodesk sketchbookというアプリが高機能です。

筆圧と傾きを両方検知してかつ、以下のような様々なかき分けが可能です。

もちろんもとはお絵描きソフトなのでレイヤーで管理することも容易でカラーリングも美麗です。

選外:ibis PaintX

筆圧検知などには対応していませんが似たようなアプリとしてibisがあります。

こちらは動作が軽快である点と、ユーザ登録が不要な点が勝っているように思います。 しかし機能やUIを見るとAutodeskを使ったほうが良いように思われます。

Metamoji Note

先の2つはレイヤーを分けて絵を書くことに優れていますが,もう少し手軽に書けるノートとしてMetamoji NoteやXodoがあります。 XODOは後ほど紹介するとして,Metamoji Noteについて紹介します。

主な利点は,

  • 手書き図形とテキストBOXをオブジェクト形式で記述可能
  • 書いた図形をあとから編集可能
  • ズームインして書く
  • 好きなフォーマットで出力可能

特にディテールウィンドウと呼ばれる特定の箇所を編集するための仕組みが秀逸です。

PDF 書き込み

PDFを読み書きするソフトについてです。講義ノートなどはPDFで配布されることが多いので使う機会もおおいでしょう。

当然mendeley等の文献管理ソフトはいれますが、タブレットの強みを生かして手書きで注釈等を残していきたいですね。 追記:XODOの項目を強化

AdobeReader

AdobeReaderは基本的なところを抑えているのでとりあえず入れておいてもよいでしょう。

  • 手書き、テキストの書き込みや下線、マーカーまで扱える
  • 書いた図形を編集可能
  • dropboxとの連携が容易

と、基本的な箇所はすべて押さえています。欠点は手書きの際の操作感がやや悪いところとAdobeでは編集できない(保護のかかった)PDFがあることです。 具体的にはMendeleyのフォルダに入ったPDFは編集できないことが多かったです。

xodo

xodoはAdobeReaderと似たような特徴を持つアプリで,PDFの手書き編集や新たなPDFを作成してノートの様に扱うことができます。

付属のペンと手をきちんと区別できるため,右手をつきながら紙に書くように手書きをすることができるのが非常に快適です。 書いた図形は自動でグループ化され手でタッチするか,ペンの上部のボタンを押しながらタッチすることで移動や削除が想いのままで単に消しゴムで消すよりも圧倒的に早く快適です。

Googleドライブと連携しているならドライブ上のPDFをそのまま編集するという事が可能で,非常に使い勝手が良いと感じます。

  • ペンと手を別で検知(パームリジェクション)
  • Adobeで変更できない文章を編集できる
  • XODOで変更した文章はAdobeでは読めるがMendeleyには反映されない。

PCとの連携,リモート環境

PCとの連携が魅力的で,外部キーボードを接続することでさながらPCのような操作感を実現可能です。

キーボードとしてはBluetoothのキーボードがこのケース一体型のキーボードなどがオススメに入ります。

純正の商品は日本で発売されていないですが,Aliexpressなどで個人輸入することができます。

Huawei 社 mediapad M5 キーボードケース M5 10.8 M5 プロ 10.8 インチ huawei 社 mediapad ため M6 10.8 キーボードケース|タブレット & 電子書籍ケース|パソコン & オフィス - AliExpress

リモート接続

GoogleのRemoteDesktopの動作を確認しました。 今の所の操作感はあまり良くないですがファイルを操作すると行ったこと程度はできるようです。

androidlover.net

セカンドスクリーン化

有線,または無線でAndroidタブレットをPCのサブモニタにできます。

  • Spacedesk:無料なのが良い。PCと同一のネットワーク上にある必要あり。

hinokiyo.hatenablog.com

  • TwoMonUSB:有料だが有線なので高速通信可能。

play.google.com

使用シーン次第ですが,例えばSpacedeskはPCのプレゼンの制御をタブレットから行うなどの用途で活躍します。

まぁタブレットから制御してもいいんですけどね。 Office Mobile - Office 365 サービス - 楽しもう Office

PC制御

PPTなどのスライドを制御したかったんですが,Androind用の制御アプリはなぜか消えました。

  • マウスとキーボード化

TelePadというアプリがBluetooth経由でもつなげる(多くのアプリはWifi経由)ので結構便利。

その他

タブレット上でBash的なコンソールを駆動するTermuxというアプリが面白いです。 aptが使えるのでPythonを入れてプログラミングが一応できます。 OpenCVなどには今の所対応していないらしく,タブレット内の画像を自前で編集なんていうのはちょっとハードルが高いみたいですが楽しそうですね。

linuxfan.info

Huawei MediaPad M5 Pro レビュー。iPadに対する利点は?

ねんがんのタブレットをてにいれたぞ!

テッテレー [asin:B07CRYPM44:detail]

ということでレビューします。

カタログスペック等に関して

スマートフォンとは別にタブレットを持つ目的としては

  • 端末として電池の持ちが良い
  • 画面が大きくオーディオやカメラ等が良い
  • ペンを用いた本格的手書き入力が可能

等がありますが,2018年春に発表された本モデルは

  • 電池容量:7500mAh = iPhoneSEの4.5倍くらい
  • 実行メモリ4GB,Kirin960 オクタコア (4x2.4GHz+4x1.8GHz)
  • 専用のM-Penとケースが付属

とかなり好条件です。価格も5万円弱と同社のスマホの最上位機種P20よりも安いです。

見た目はこんなかんじ。 f:id:ossyaritoori:20180624225950p:plain

競合となるiPadのスペック

競合として,タブレット界隈では2018年春モデル(第6世代)iPadがおすすめとされています。

Apple iPad (Wi-Fi, 32GB) - スペースグレイ

Apple iPad (Wi-Fi, 32GB) - スペースグレイ

  • 発売日: 2018/03/28
  • メディア: Personal Computers

も相まって,5万強出せばペーパーレスの環境を構築できるというのが非常に研究者界隈で人気となっています。 iPadProの文献ですがこことかこことかですね。

iPad vs MediaPad Pro

カタログスペックの比較ですが,比較サイトによるとスペック自体はかなり差がないようにも思えます。 (ただし,2017年のiPadと比較しており公平でない)

iOSAndroidの違いにより使用感は変わってくるのですが,各サイトを巡った感じは iPad Pro > MediaPad > iPad というスペック差になっていそうです。[要文献] iPadとの差別化点として

1. OSの違い

Mac製品同士は非常に連携が取りやすいためMacbook等を使っているならiPadを使うべきでしょう。

Androidの利点はPCとの接続が容易であることです。

GooglePlayストアでアカウントを登録すれば,ChromeやDrive,Gmail等が同期されるため,Googleのサービスにどっぷり使っている人はAndroidの恩恵を受けやすいというのは手持ちのiPhoneと大きく異なる点です。

2. コスパ

OSにこだわらない場合,本製品のコスパが光ります。

iPadでの最安構成はiPad32GB+Apple pencileで51000円強ですが,本製品は容量64GBでペンとケースがついて52000円くらいです。

それでいて基礎スペックは勝っている(はず)のでコスパは良好です。なお,MicroSDを256GBまで認識するので容量の心配はしなくて良いでしょう。

3. 手書き等入力方法

入力方法ですが本タブレットはかなり手書きを推してきます。 つけて最初にでるWifiの登録画面で手書きを要求してくるあたりとても自信のある機能のようで実際精度は結構高いです。 でもパスワードとかはデフォルトはキーボードにしてほしい。

iOSと決定的に違う点として音声入力があり,試した感じSiriよりGoogleのほうがきちんと変換してくれます。 タブレットにおいてフリック入力はやや持ちづらい面があるので音声入力は想像以上に便利です。私も家などでは基本的に声で入力します。早いので。

総じてiOSAndroidの違いが際立っていて端末間の差異は小さいように思います。 ただ,ペンの性能はApplePencilのほうが高いと思うので本格的な用途ならiPadProに軍配が上がるでしょう。

使用感

上記スペックを踏まえて, ざっくりと良かった点・不満点を述べます。

良かった点
  • 手書きや音声入力の精度が良い。かなり捗る。
  • 画面が美麗かつ大きいため,画面分割しても十分に見れる。
  • 指紋認証が早い/カメラも良好
  • 電池の持ちが良い(購入2日目に入っても半分程度残っている)
不満な点
  • キーボード入力が少ししづらく感じる(iPhoneとの比較)
  • 音声,電源スイッチの箇所に少し違和感がある
  • イアホンジャックがない(USB-Cから変換する)
  • 初期設定のいくつかに不満(なれていない人は最初のセットアップに少しもたつくかもしれない)
注意点
  • 500gは結構重い。10インチは結構でかい。持ち歩きには注意。
  • デフォルトのケースの品質は高いがペンの置所に困る。なくさないといいけど。
  • ペンのボタンが陥没しました(三ヶ月使用後)

付属のペンのボタンがうっかり陥没してしまったのですが,結構間違って押してしまうことが多かったので却って使い勝手がよくなりました。 もちろん修理の対応も迅速です。(連絡だけして放置したマン)

アプリ

必携アプリについては別記事を参照ください。 ossyaritoori.hatenablog.com

以下は購入時に試行錯誤した結果です。 デフォルトの文字認識性能が高いため,手書き系アプリと相性が良いです。 - MetaMoji - OneNote - Squid (2018年9月現在メインで使用中)

あたりは結構使い勝手が良さそう。 お絵かきするなら - ibis PaintX

というソフトがいい感じ。(追記:結局Autodeskが最も無難という感想に落ち着きました。) たとえば,

f:id:ossyaritoori:20180624225819j:plain

こんなかんじに書けます。物理ボタンの配置的に書きながらスクリーンショットが非常に難しい。

PDFの管理と加工は - XODO - Adobe PDF Reader の2つあれば基本的になんでもできます。

PDF Reader というアプリでは手書き入力と加工ができます。(ADOBE じゃないやつ)これは結構良さげ。 f:id:ossyaritoori:20180625004622j:plain

追加で買いたい物品集

この点に関してはiPadProに軍配が上がります。かの純正キーボードは電源を本体から供給されるのでとても軽いのです。

現時点でのまとめ

2018/6/23に買ったので気づきがあれば随時更新していきますが今の所はこんなとこでしょうか。 所感としては

  • Androidの強みを活かしたiPadと同性能に近いタブレット
  • お絵かきはアプリ次第だが,iPadProに及ばないながらも快適な手書き性能
  • Google系との連携が得意なのでChrome等に依存している人は是非

Ubuntuのプリンタの設定(OKI社プリンタ,Ubuntu16.04)

よく考えたらubuntuのプリントを設定してなかったのでやり方をメモ.

OKIの場合

以下のようにdebパッケージを配っているタイプの企業もあるがOKIはppdファイルしか配ってなさそう. arimasou16.com

そこで公式のやり方に合わせる.

やりかた其の1:/etc/printcapの編集

上記のファイルを編集した後にコマンドをポチポチするもの.

ただ,私の環境では以下のような文が書いてあった.

# This file was automatically generated by cupsd(8) from the
# /etc/cups/printers.conf file.  All changes to this file
# will be lost.

つまり,「外部のソフトウェアによって管理されており勝手に消えたりするぞ」ということでこの方法はやめた.

やりかた其の2:CUPS

http://localhost:631/adminをブラウザに入力してGUIで設定するというもの. CUPSはUNIX共通の印刷システムなんだとか.

OKIの公式によると次のような画面が出てくるらしく,このadd Printerから追加するらしい. ホーム画面

実際の画像はこんなの.いや,全然違いますやん. f:id:ossyaritoori:20180603010706p:plain

「プリンタの追加」を選択してすすめていく.

プリンタの形式選択

次の画面では次の項目からネットワークプリンタの分類?を選ぶ. 全然わからないが上記のOKIのドキュメントにsocketとあったのでAppSocket/HP JetDirect を選択した.

 Backend Error Handler 
 インターネット印刷プロトコル (https) 
 LPD/LPR ホストまたはプリンター 
 インターネット印刷プロトコル (ipps) 
 インターネット印刷プロトコル (http) 
 AppSocket/HP JetDirect 
 インターネット印刷プロトコル (ipp) 
 インターネット印刷プロトコル (ipp14) 

一応AppSocketというのが一般的かつもっとも高速なやつで,Internet Printing Protocol (IPP)とかいうのはネットワーク印刷にてよく使われるらしい.

そこんとこはヘルプを確認していただきたい.

IPアドレスの設定

プリンタのIPがわかっている前提で話す. ポート番号を指定しないなら

socket://<IPアドレス>

とうつのが正解のようだ.これはどういう記法なのか?それはまたヘルプを(ry

ppdファイルの選択

OKIの場合,ppdファイルというのが配ってある. これをローカルにダウンロードして次の画面で選択する.

デフォルトの設定の選択

Generalの項目で 2-Sided Printing:をLong-Sidedにする. 両面印刷長辺とじってことですね.

感想

Windowsだと何も考えずexeファイルぶん回すことが多いがUbuntuはこういう細かなところでググらびりてぃ(Google検索から適切な情報を抽出すること)が試されるのでギークっぽい人以外には勧めづらいなぁなどとぼんやりおもった.

Homography行列の分解 OpenCV Python

OpenCVは便利なんですが不十分な情報や古い情報,ニセの情報がネット上に多すぎます. 基本的に公式のサイトを見ような.公式っぽいけど違うみたいな奴多すぎ. これがまともだったので公式と信じる.

はじめに:Homography 行列の推定とか

findHomographyにぶち込みます. 昔書いたテンプレート抽出のコードを参考にどうぞ.

キャリブレーションはがんばりましょう.decomposeはエラーにめっちゃ敏感です. ROSを使えばかなり簡単にキャリブレーションできます。100枚程度あれば結構いいスコアを出せるので頑張って。

過去にもエピポーラ幾何でなんかやってますね,この時なキャリブレーションが甘かったので結果をやり直してみたい. ossyaritoori.hatenablog.com

cv2.decomposeHomographyMat

公式?によると使い方は以下の通り.

retval, rotations, translations, normals   =   cv.decomposeHomographyMat(  H, K[, rotations[, translations[, normals]]]    )

生で吐くとこんな値になります.

(4, [array([[ 0.99069192, -0.0745761 ,  0.1138768 ],
       [ 0.07708256,  0.99686649, -0.01776175],
       [-0.11219536,  0.02637434,  0.99333609]]), array([[ 0.99069192, -0.0745761 ,  0.1138768 ],
       [ 0.07708256,  0.99686649, -0.01776175],
       [-0.11219536,  0.02637434,  0.99333609]]), array([[ 0.8447263 ,  0.02653746,  0.53454021],
       [-0.1212945 ,  0.98227444,  0.14291458],
       [-0.52127259, -0.18556049,  0.8329719 ]]), array([[ 0.8447263 ,  0.02653746,  0.53454021],
       [-0.1212945 ,  0.98227444,  0.14291458],
       [-0.52127259, -0.18556049,  0.8329719 ]])], [array([[ 0.30840663],
       [-0.09586909],
       [-0.81377852]]), array([[-0.30840663],
       [ 0.09586909],
       [ 0.81377852]]), array([[ 0.67210665],
       [ 0.17138383],
       [-0.53426701]]), array([[-0.67210665],
       [-0.17138383],
       [ 0.53426701]])], [array([[ 0.92347388],
       [ 0.23136337],
       [-0.30605063]]), array([[-0.92347388],
       [-0.23136337],
       [ 0.30605063]]), array([[ 0.64092667],
       [-0.04427804],
       [-0.76632399]]), array([[-0.64092667],
       [ 0.04427804],
       [ 0.76632399]])])

そもそもSVDを使ったdecompositionでは4つの解が出ます. したがって4つずつあるこの回転Rと並進T, 法線ベクトルnのペアから一番まともなペアを選びます.

ネコと学ぶ...さんの超わかりやすいサイトより,以下の画像を拝借.

この場合(a)のパターンが正しいです.

これの解き方は一般にわかっている点群を投影して,すべての距離が正になるかで判断します.

全容を理解するのにはInriaの2008年の文献がわかりやすそうです.(ただし長い)

解を絞る条件

要約すると

  • カメラ平面から見て同じ側に有る:8点から4点へ(ここまではOpenCVがやる)
  • Reference Point Visibility:4点から2点へ
  • のこりは...?:normal vectorからなどでやる。

ということみたいで,事前情報なしで絞れるのはせいぜい2つまでで,それ以降は例えばテンプレートのnormalベクトルがどっちを向いているかなどの条件を使います。

例えば,どちらもこちら側にあるかというのは変換前とあとのnormalベクトルがどちらもカメラ側を向いているという条件をつけることで2つに絞れますし, テンプレートが真正面から撮ったものであればnormalベクトルは(0,0,1)になっているはずなのでそれとの内積を計算して大きさを評価するなどが挙げられます。

n_ref = np.float32([0,0,1]).reshape(3,1)
for n in normals:
    print(np.dot(n.T,n_ref))

こんなかんじでやればいいですね。

サンプルコード

Gistにnotebookを上げておきました。多分これで本番環境でも行ける。 キャリブレーションはしっかりしておきましょう。 gist.github.com

解の絞り方,その他の手法などについて

連続的なフレームからの抽出の場合動作に制約をつけて式を組み直したり<例>,その他のセンサとの情報統合からこれを解くなどのアプローチがあります。

極配置の実装:アッカーマン法,EigenvalueStructure法のMATLAB実装

序論・参考文献

制御工学の授業で一度は計算させられる極配置ですが MATLABにはplaceなる関数があって,実務を始めてからは全く手計算をしなくなります。

よくある疑問とエラー

授業では忘却の彼方にありますがB行列のrankより高い極配置はできないというエラーは誰しも見たことがあるかと思います。 以下のような現象です。

A = [1 2;3 4];
B = [1; -2];
pole = [-3,-3];
place(A,B,pole)

Bのランクは1ですので,このコマンドを実行すると以下のエラーを起こします。

エラー: place (line 78)
"place" コマンドは、rank(B) より大きい多重度を持つ極を配置できません。

そういえば中身どうなっているんだ?Cとかで実装するとどうなるんや?という疑問がありませんか。 MATLABのは論文読んでないのでまだ実装しませんが, 本稿で紹介するアルゴリズムを用いた場合はこの場合でも,ほぼ極配置ができます。

  -3.0000 + 0.0000i
  -3.0000 - 0.0000i

ひょっとしたらちょっと誤差があるのかもしれない。

アッカーマン法

SISO系限定ですがアッカーマン法であればこのような状況でも対応できます。 なお、MATLABではackerという関数名で実装されています。(昔はReferenceがあった気がするのですが。。。?)

アッカーマン(Ackermann)はこの人?某ヒロインが検索汚染してきます。

アッカーマン法の詳細な記述についてはなんとwikipediaが一番スッキリしていて見やすくなってます。(英語)

原著の論文はこれっぽいです。

J. Ackermann. Der Entwurf linearer Regelungssysteme im Zustandsraum.
Regelungstechnik und Prozessdatenverarbeitung, 7:297–300,
1972.

参考資料

どこかの授業スライドですがこれが具体例込でわかりやすいです。 また,参考になりそうなスライドがありました。(要DL,MIMOや不可制御系の時にどうする的なのが丁寧に書いてあったスライド。わかりやすい5-10分で読める。)

Outline

  • Step1. 求めたい極を展開して特性方程式にする
  • Step2. 可制御性行列を求める
  • Step3. 以下の通りに計算する(雑)

f:id:ossyaritoori:20180516102843p:plain 添付は小林H23スライドより拝借。

MATLABコード

多項式展開が思ったより実装が面倒そうだったので一般化してないですが例えば2次元の場合は次の通り。

function F = placeAckermann2d(A,B,pole)
p = - pole;
d1 = p(1)+p(2);
d0 = p(1)*p(2);
X = A^2 + d1*A + d0*eye(2);

Uc = [B A*B];

F = [0 1]/Uc*X;
end

これで冒頭の結果を得ることができます。Bのrankが落ちていても重根極配置できるので試してみてください。 この程度の計算であれば行列と逆行列計算ライブラリさえあればCやPythonでも実装余裕ですね。

MIMOの場合:EigenvalueStructure法

アッカーマン法ではMIMOの時に行列のサイズがおかしくなります。 そこでこの手法です。1981年のこの文献が元

原理としては以下のような感じです。 f:id:ossyaritoori:20180516131828p:plain

Nullspaceの推定にsvgを使うので計算量には不安があるが,見事に動作します。 この場合自由度の足りない重根極配置をするとVの正則性が失われるので最初に出たようなエラーが出るということのようです。

function F = placeMIMO2D(A,B,pole)
[u1 w1 v1] = svd([pole(1)*eye(2)-A B])
[u2 w2 v2] = svd([pole(2)*eye(2)-A B])
en = size(w1,2)
VV = [v1(:,3:en) v2(:,3:en)];
F = VV(3:en,:)/VV(1:2,:)
end