目次
6.1 数値微分と数値積分
数値微分
- 微積分では、任意の関数 f(x) の点での導関数は極限によって定義されるため、差分商を使用して点での導関数を近似できます。
- 数値微分の実装
dx = diff(x) は、ベクトル x の前方差分 dx(i)=x(i+1)-x(i) を計算します。
dx = diff(x, n) は、ベクトル x の n 次前方差分を計算します。
dx = diff(A, n, dim) 行列の n 次の差分を計算します。dim=1 (デフォルト状態) の場合、列ごとに差分を計算し、dim=2 の場合、行ごとに差分を計算します。
数値積分
- 多くの場合、ニュートン-ライプニッツの式を使用して関数の積分を見つけたり、数値解法を使用して定積分の近似値を解いたりします. 基本的な考え方は、区間を n 個の部分区間に分解し、それらを合計することです.
- 数値積分の実現
[l, n] = quad(filename, a, b, tol, trace ) 適応シンプソン法に基づく
[l, n] = quadl(filename, a, b, tol, trace ) 適応シンプソン法に基づく
その中で、filename は被積分関数の名前です; a と b は定積分の上限と下限です (積分限界は有限でなければなりません)、tol は積分状況を制御するために使用され、デフォルトで取得されます, トレース制御0 でない場合、積分プロセスを表示するかどうか 0 に設定されている場合、表示されません (デフォルト)。戻りパラメーター I は定積分の値であり、n は関数の呼び出し回数です。被積分関数。
l = 積分 (ファイル名, a, b ) はグローバル適応積分法に基づく
その中で、filename は被積分関数の名前で、a と b は定積分の上限と下限 (積分の極限は無限大である可能性があります) であり、戻りパラメーター I は定積分の値です。
[l, err] = quadgk(filename, a, b) 適応ガウスクロンロッド法に基づく
このうち, err はおおよその誤差範囲を返します. 他のパラメータの意味と使い方は quad 関数と同じです. 積分の上限と下限は無限実数 (-Inf または Inf), または複素数にすることができます.積分の上限と下限は複素数で、quadgk 関数は複素平面にあります。 ポイントを見つけます。
l = trapz(x, y) 台形積分に基づく
その中で、ベクトル x, y は関数関係 y=f(x) を定義します。
- 多重定積分の数値解法
l = integral2(ファイル名、a、b、c、d)
l = quad2d(ファイル名、a、b、c、d)
l = dblquad(ファイル名、a、b、c、d、tol)
l = integral3(ファイル名、a、b、c、d、e、f)
l = triplequad(ファイル名、a、b、c、d、e、f、tol)
6.2 線形方程式を解く
直接法
- 左除算演算子を使用した直接解法
Ax=b なので x=A\b
右辺の項が n*m の行列の場合、x=A\b は同じスパース行列 A をもつ m 個の線形方程式の数値解 x を同時に得ることができ、x は n*m の行列です。つまり、 , x(:,j)= A\b(:,j),j=1,2,...,m
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
x=A\b
- 行列因数分解を使用した線形方程式系の解法
主に次の3つの分解方法に分けられます
- LU 分解 (これを例にとります)
- QR分解
- Cholesky分解
基本的な考え方は次のとおりです。
分解関数
[L, U]=lu(A) 上三角行列 U と変換された下三角行列 L を生成し、A=LU を満たすようにします. ここで行列 A は正方行列でなければならず、最終的に x=U\ (L\b)
[L,U,P]=lu(A) 上三角行列 U と下三角行列と順列行列 P を生成し、PA=LU を満たすようにし、最終的に x=U\(L\P*b)
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
[L,U]=lu(A);
x=U\(L\b)
反復法
- ヤコビ反復法
x が収束する場合、それが解決された値です。
function [y,n]=jacobi(A,b,x0,ep)
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
B=D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep
x0=y;
y=B*x0+f;
n=n+1;
end
x0 は初期値セット、n は反復回数、以下同じ
- ガウス・ザイデル反復法(高精度)
function [y,n]=gauseidel(A,b,x0,ep)
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
B=(D-L)\U;
f=(D-L)\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep
x0=y;
y=B*x0+f;
n=n+1;
end
6.3 非線形方程式の解法と関数極値の計算
非線形方程式の解法
x=fzero(filename,x0) ここで、filename は解く方程式の左辺の関数式、x0 は初期値です。
x=fsolve(filename,x0,option) オプションは、非線形方程式を解くことができる optimset('Display','off') に設定できる最適化パラメーターです。
f=@(x) [sin(x(1))+x(2)+x(3)^2*exp(x(1)),x(1)+x(2)+x(3),x(1)*x(2)*x(3)];
f([1,1,1])
x=fsolve(f,[1,1,1],optimset('Display','off'))
f(x)
関数極値計算
- 制約のない最適化問題
[xmin, fmin] = fminbnd(ファイル名, x1, x2, オプション)
[xmin, fmin] = fminsearch(ファイル名, x0, オプション)
[xmin, fmin] = fminunc(ファイル名, x0, オプション)
このうち、x1 と x2 は調査間隔の左右の境界であり、x0 は極値点を表す初期値です。
- 制約付き最適化問題
- 線形不等式制約
- 線形等式制約
- 非線形不等式制約
- 非線形等式制約
- x の上限と下限
[xmin, fmin] = fmincon(ファイル名, x0, A, b, Aep, bep, Lbnd, Ubnd, NonF, オプション)
このうち xmin, fmin, fiename, x0, option は最小値関数と同じ意味を持つ. 残りのパラメータは制約であり, 線形不等式制約, 線形等式制約, x の下限と上限, および非線形制約を定義します. 制約が存在しない場合, 空の行列で表されます.
6.4 常微分方程式の数値解法
一般的な概念
- y'=f(t, y) を満たす関数 y を見つけます
関数を解く
[t, y] = ソルバー(ファイル名, tspan, y0, オプション)
- このうち、t と y はそれぞれ時間ベクトルと対応する数値解を与える. solver は常微分帰過程の数値解を求める関数. filename は f(t, y) を定義する関数の名前であり,関数は列ベクトルを返す必要があります. tspan の形式は [t0, tf] で、これは解の区間を意味し、y0 は初期状態の列ベクトルで、option はオプションのパラメータで、解のプロパティを設定するために使用されます。
- ソルバー関数は命名方法が統一されており、odennxx.nn は左右のメソッドの順序を示し、ode45 が一般的に使用されます。
f=@(t,y) (y^2-t-2)/4/(t+1);
[t,y]=ode23(f,[0,10],2);
y1=sqrt(t+1)+1;
plot(t,y,'b:',t,y1,'r');
剛体問題
- ソリューションの一部のコンポーネントは急速に変化し、一部は非常にゆっくりと変化し、その違いは非常に大きく、いわゆる硬直的な問題 (スティッフ)
関数 ode15s を解き、上記と同じ方法を使用します