【MATLAB】何が起こっているか分からないが致命的っぽいエラーの処置方法
何かがおかしい・・そんな時には
- 意味の分からないエラーが・・
- プロット表示がなんか変 or 表示されない・・
- 根本原因はどうでもいいから何とかしてくれ。もう再インストールしてやる!
エラー文もよくわからんし、どう考えても自分の書いた部分が原因じゃないだろう・・。
MATLAB 使っていると、たまに? こんなことありますよね。
そんな時、怒りに任せて再インストールをしちゃう前に気軽に試せる2つの関数とその背景を紹介します。
- パス初期化:restoredefaultpath
- 設定ファイル初期化:prefdir
restoredefaultpath % パスの初期化
savepath % 初期化されたパス設定を保存
prefdir % で表示されるフォルダの削除(バックアップは適宜)
これだけ!
特に「設定ファイル」は再インストールだけでは初期化されない場合があるので、
再インストールが無駄に終わることもあり要注意です。
参考:MATLAB 環境を初期化するにはどうすればよいですか?
もちろんこの2つですべての問題が解決するわけではないのですが、
どうしようもないときに試せるもの、という感じでどうぞ。
それぞれ紹介していきます。
パス初期化:restoredefaultpath
restoredefaultpath % パスの初期化
savepath % 初期化されたパス設定を保存
なにが原因かはさておき、MATLAB インストール直後にパスの設定が問題を引き起こすケースはよく聞きます。あとはうっかりパスをいじってしまったときなどですね。
そんな時は「えい!」っと restoredefaultpath
でパス設定を初期化して、問題が解決されるかを確認しましょう。解決したようであれば savepath
で初期化したパス設定を保存します。
restoredefaultpath
の実行だけだと、パス初期化は一時的なものなので、MATLAB を再起動すると元の状態に戻りますので、気軽に試してくれて大丈夫。
パス初期化で解決する問題ってどんなもの?
いろいろですが、とりあえず自分で書いたコードが原因じゃなさそうな雰囲気は共通しています。
以下にエラー例を MATLAB Answers から引用します。
- 関数 'workspacefunc'(タイプ'struct'の入力引数)が未定義です
- 警告: matlabrc で設定を初期化できませんでした。
- readonly Error: Unexpected MATLAB expression. workspacefunc 287
- double から struct に変換できません。
- 'matlab.internal.getSettingsRoot' が未定義
いろいろですね。
他にもこんな問題がパスの初期化で解決したよ!というものがあればコメントください。
設定ファイル初期化:prefdir
MATLABの再インストールでさえも解決できない?
そんな恐ろしい現象の背景にあるのがこちら prefdir
です。
>> prefdir
ans =
'C:\Users\eigs\AppData\Roaming\MathWorks\MATLAB\R2019a'
と大体こんなところに MATLAB のバージョン別に保存されているのが、各種設定ファイル。
コマンド履歴やショートカット・レイアウト・言語設定などが保存されています。
うっかり設定しちゃったことが原因でおかしくなった、ただ何かは覚えていない。いや、俺は何もしていない(大体やってます・・)、そんな状態のときには、このフォルダをごそっと消してしまって、MATLAB を再起動すればOKです。再起動すると設定ファイルが再生成されます。
慎重な方はフォルダ名を変更(例: R2019a_bk)してバックアップを取っておいてもいいですね。あとで R2019a に戻せば元通り。
**アンインストールで削除されてなかった場合は、インストールし直した MATLAB が再びこのフォルダを参照するため、元の問題が再現されてしまいます。**怖いですね。
もちろん、他の PC で同じ設定を再現したい、そんな時にはこのフォルダの中身をコピーすればOKですね。
参考:How do I save my editor preferences when I copy MATLAB to a new machine?
設定ファイルの初期化で解決する問題ってどんなもの?
こちらも多岐にわたります。パッと思い出せるものだと
- Live Editor 上にプロットが表示されなくなる
- アプリが起動しない
- 起動に時間が掛かり、かつ、Javaエラーが発生
などなど。
もはやユーザーがいじれる設定なんて関係なさそう・・というところがミソですね。
まとめ
何かがおかしい・・そんな時にまず試す価値がある2つのコマンドを紹介しました。
直接の原因は有耶無耶になりますが、わけのわからないエラーにイライラする前に是非。
restoredefaultpath % パスの初期化
savepath % 初期化されたパス設定を保存
prefdir % で表示されるフォルダの削除(バックアップは適宜)
Discussion