検索エンジンから来た方は読みたい記事が表示されていない可能性があります。
その場合、左メニューのフォームでブログ内を検索すると見たい記事を見れると思います。
もしくは、カテゴリー名をクリックしていただくと各カテゴリーの記事のリストが見れます。
その場合、左メニューのフォームでブログ内を検索すると見たい記事を見れると思います。
もしくは、カテゴリー名をクリックしていただくと各カテゴリーの記事のリストが見れます。
Author:sach1o
しがない工学系大学院の学生です。
ホントに己に向けたMATLABのメモ。
学部生くらいにしか,多分あまり参考にならないと言っておく。王道のSimulinkも使いませんし。
ちなみに使ってるのは
『MATLAB2006b Windows ver.』と『MATLAB2007b Windows ver.』
while exitflag==10
...
if strcmpi(opt.Jacobian, 'on')
[fs, jac] = func(x,varargin{:});
x = x - rat*jac¥fs;
else
fs = func(x,varargin{:});
jac = jacobi_numeric_fast(func, x, hh, varargin{:});
x = x - rat*jac¥fs;
end;
...
if fs < minfs minx = x; end;
% 終了条件のチェック
if max(abs(fs)) < opt.TolFun
exitflag = 1;
end;
...
end;
x = newton_numeric(@fun,x0) … 初期値x0を用いて関数fun()で定義された非線形方程式を解き、解xを得る。
x = newton_numeric(@fun,x0,options) … 初期値x0を用い、オプションを構造体optionsで指定して関数fun()で定義された非線形方程式を解を解き、解xを得る。
x = newton_numeric(@fun,x0,options,fun()に渡すほかの引数...)
[x,fval,exitflag,output,jacobian] = newton_numeric(@fun,...)
x … 解
fval … 解xの時の最終的な関数funの値
exitflag … 計算アルゴリズムが停止した理由を示す整数(下記参照)
output … 最適化に関する情報を含む構造体(下記参照)
jacobian … 解xの時の関数funのヤコビ行列
| Display | 最小化あるいは計算する関数に関する情報の出力。(デフォルトは'final') |
| MaxFunEvals | 許可する関数計算の最大回数 |
| MaxIter | 許可する繰り返しの最大回数 |
| Jacobian | 'on'の場合は、ユーザ定義のヤコビ行列を用い,'off'なら有限差分からヤコビ行列を近似する。(デフォルトは'off') |
| TolFun | 関数値に関する終了許容範囲(maxFuncがTolFun以下なら解とみなす。) 注意!! |
| TolX | xの変化に関する終了許容範囲 注意!! |
| 1 | 関数が解 xに収束したことを示します。 |
| 2 | 解xの変化が指定した許容値より小さくなったことを示します。 |
| 3 | 関数の変化が指定した許容値より小さくなった(あまり変化しなくなった)ことを示します。 |
| 0 | 関数計算の回数、あるいは繰り返し回数が最大回数に達していることを示します。 |
| -1 | 解が発散もしくは振動していることを示します。 |
| iterations | 実行した繰り返し回数 |
| funcCount | 関数の評価回数 |
| message | 終了メッセージ |
| answer | 最終的な解x |
| Func | 目的関数の最終的な大きさ |
| maxFunc | 目的関数の要素のうち絶対が最大のものの大きさ |
| TolFun | 関数値に関する終了許容範囲(maxFuncがTolFun以下なら解とみなす。) |
| TolX | xの変化に関する終了許容範囲 |

>> [x,fs,exitflag, output, jacobian] = newton_numeric(@funcsj, ones(3,1))
Iteration F(x) Diff. Pre-step Norm of Step
6 3.99456e-025 -1.8e-006 2.9e-013
x =
0.7331
1.8608
1.3641
fs =
1.0e-012 *
0.5498
-0.2633
-0.1669
exitflag =
1
output =
funcCount: 7
iterations: 6
TolX: 1.0000e-006
TolFun: 1.0000e-006
Func: 3.9946e-025
maxFunc: 5.4978e-013
answer: [0.7331 1.8608 1.3641]
message: '解が,許容範囲内に収束しました。'
jacobian =
1.4662 3.7216 0
1.8608 0.7331 -1.0000
1.3641 0 0.7331
>> opt = optimset( 'Jacobian', 'on', 'Display', 'iter', 'TolX', 1e-12, 'TolFun', 1e-12);
>> [x,fs,exitflag, output, jacobian] = newton_numeric(@funcsj, ones(3,1), opt)
Iteration F(x) Diff. Pre-step Norm of Step
0 4 0 0
1 30 3.5 1.1
2 1.12809 -4.4 0.35
3 0.0157807 -0.94 0.056
4 8.02764e-006 -0.12 0.0013
5 3.13767e-012 -0.0028 8.3e-007
6 3.99456e-025 -1.8e-006 2.9e-013
x =
0.7331
1.8608
1.3641
fs =
1.0e-012 *
0.5498
-0.2633
-0.1669
exitflag =
1
output =
funcCount: 7
iterations: 6
TolX: 1.0000e-012
TolFun: 1.0000e-012
Func: 3.9946e-025
maxFunc: 5.4978e-013
answer: [0.7331 1.8608 1.3641]
message: '解が,許容範囲内に収束しました。'
jacobian =
1.4662 3.7216 0
1.8608 0.7331 -1.0000
1.3641 0 0.7331