| Programming and Data Types |
エラーとワーニング
多くの場合、種々のエラーが生じたときに、特別の反応を示すことが望まれます。たとえば、入力がもっと必要ならばユーザに入力するためのプロンプトが表示されたり、より詳しいエラーやワーニングメッセージが表示されたり、デフォルト値を使って計算を再度行ったりすることです。MATLABのエラーを取り扱う機能は、特別なエラー状況をアプリケーションにチェックさせ、その状況に従って適切なコードを実行します。
evalやlasterrを使ったエラーの取り扱い
MATLABの中でのエラーの取り扱いに関する基本的なツールは、
関数evalは、2つの引数を使った型でエラー取り扱い機能を与えます。
eval ('trystring','catchstring')
trystringにより設定される演算が適切に機能するなら、evalは単に結果を出力します。trystringがエラーを発生させると、関数はcatchstringを実行します。catchstringを使って、trystringにより発生するエラーを決め、適切に動作するような関数を設定します。
trystring/catchstring型のevalは、関数lasterrと共に使うと特に有効です。lasterrは、MATLABにより発生する最新のエラーメッセージを夫君が文字を出力します。 trystringにより発生するエラーを"捉える"ための関数catchstringの内部のlasterrを使います。
たとえば、この関数は、行列演算の間に生じる固有のエラーメッセージに対してチェックするためにlasterrを使います。エラーメッセージは、両オペランドの内側の大きさが異なるため行列計算が不可能であることを示しています。メッセージが生じたなら、コードは乗算を適切に行うため、行列の一方の大きさを整合性をもつように小さくします。
function C = catchfcn(A,B)
l = lasterr;
j = findstr(l,'Inner matrix dimensions')
if (~isempty(j))
[m,n] = size(A)
[p,q] = size(B)
if (n>p)
A(:,p+1:n) = []
elseif (n<p)
B(n+1:p,:) = []
end
C = A*B;
else
C = 0;
end
evalの2つの引数をもった型を関数
catchfcnと共に使います。
clear
A = [1 2 3; 6 7 2; 0 1 5];
B = [9 5 6; 0 4 9];
eval('A*B','catchfcn(A,B)')
A = 1:7;
B = randn(9,9);
eval('A*B','catchfcn(A,B)')
| 空行列 | エラーメッセージとワーニングメッセージの表示 |