MATLAB演習(線形システム) - Home |...

47
MATLAB演習(線形システム) 微分方程式の数値解法 1次遅れ系と時定数 1. ステップ応答の解析解 2. 数値計算 (オイラー法とRunge-Kutta法の精度比較) 3. 周波数応答とボード線図 2次振動系と共振 1. ステップ応答の解析解 2. 数値計算 3. 周波数応答とボード線図 レポート課題

Transcript of MATLAB演習(線形システム) - Home |...

Page 1: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

MATLAB演習(線形システム) • 微分方程式の数値解法 •  1次遅れ系と時定数

1.  ステップ応答の解析解  2.  数値計算   (オイラー法とRunge-Kutta法の精度比較) 3.  周波数応答とボード線図

•  2次振動系と共振 1.  ステップ応答の解析解 2.  数値計算 3.  周波数応答とボード線図

• レポート課題

Page 2: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

微分方程式

dxdt

= f x, t( ) 状態(場所)xでの速度ベクトル

微分方程式はベクトル場 を規定

次にどの方向にどれだけ進むか!

微分方程式の解法 =速度ベクトルを繋ぎ合 わせて(=積分)、時刻tの 場所xを計算する。

Page 3: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

オイラー法の導出

dx t( )dt

= limΔt→∞

x t + Δt( ) − x t( )Δt

微分の定義

離散化による近似

t = nΔt

n = 0,1,2,3,4,5,

Δt が十分小さい場合

xn+1 − xnΔt

= f xn,nΔt( )

xn = x nΔt( )

時間

として

dxdt

= f x, t( )

Page 4: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

オイラー法

xn+1 = xn + Δtf xn,nΔt( )2.更新則

1.初期値

xn = x0

n = 0 を与える

n = n +1を繰り返す

t = nΔt

ベクトルを単純に 足し合わせるだけ

Δt が十分小さくないと 近似精度が悪い

Page 5: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

2次のRunge-Kutta法

xn+1 = xn + Δtf x∗,t +Δt2

更新則

x∗ = xn +Δt2f xn ,t( )

ただし

t = nΔt

Page 6: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

配布プログラム

• オイラー法  Euler.m

•  2次のRunge-Kutta法 RK2.m

Page 7: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

オイラー法 Euler.m

function [t x] = Euler(func,tintv,init,dt,para)

t = tintv(1):dt:tintv(2); x0 = init; x = [];

for ti = tintv(1):dt:tintv(2) x = cat(2,x,x0); x1 = x0 + dt.*func(ti,x0,para); x0 = x1; end;

end

ベクトル場の 関数のポインタ

最初と最後 の時間

初期値

ベクトル場 のパラメータ

時間刻み

時間 解(軌道)

離散時間のセット

初期値セット

解を記憶する 行列をセット

オイラー法の更新則

縦ベクトルx0を行列xに付け加える

Page 8: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

function [t x] = RK2(func,tintv,init,dt,para)

t = tintv(1):dt:tintv(2); x0 = init; x = [];

for ti = tintv(1):dt:tintv(2) x = cat(2,x,x0); xas = x0 + 0.5.*dt.*func(ti,x0,para); x1 = x0 + dt.*func(ti+0.5.*dt,xas,para); x0 = x1; end;

end

ベクトル場の 関数のポインタ

最初と最後 の時間

初期値

ベクトル場 のパラメータ

時間刻み

離散時間のセット

初期値セット

解を記憶する 行列をセット

2次のRunge-Kutta法 RK2.m

2次のRunge-Kutta法の更新則

時間 解(軌道)

縦ベクトルx0を行列xに付け加える

Page 9: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

MATLAB演習(線形システム) • 微分方程式の数値解法(復習) •  1次遅れ系と時定数

1.  ステップ応答の解析解  2.  数値計算   (オイラー法とRunge-Kutta法の精度比較) 3.  周波数応答とボード線図

•  2次振動系と共振 1.  ステップ応答の解析解 2.  数値計算 3.  周波数応答とボード線図

• レポート課題

Page 10: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

1次遅れ系

τdx t( )dt

= −x t( ) + u t( )

伝達関数

G s( ) =X s( )U s( )

=1

1+ τs

初期値x(0)=0とする。

ラプラス変換

L x t( ){ } = X s( )

L u t( ){ } =U s( )入力 出力

Page 11: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ステップ応答 単位ステップ入力

U s( ) =1s

ステップ応答

X s( ) =1

1+ τs1s

=1s−

1s+1 τ

部分分数展開

逆ラプラス変換

x t( ) =1− exp − t τ( )

Page 12: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ステップ応答の解析解

時定数

Page 13: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

MATLAB演習(線形システム) • 微分方程式の数値解法(復習) •  1次遅れ系と時定数

1.  ステップ応答の解析解  2.  数値計算   (オイラー法とRunge-Kutta法の精度比較) 3.  周波数応答とボード線図

•  2次振動系と共振 1.  ステップ応答の解析解 2.  数値計算 3.  周波数応答とボード線図

• レポート課題

Page 14: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

配布プログラム

• オイラー法 Euler.m •  2次のRunge-Kutta法 RK2.m • ベクトル場 FOL.m • メイン部分 FOL_main.m 

Page 15: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

function x = FOL(t,y,para) x = (-y(1) + para(2))./para(1); end

ベクトル場の関数(FOL.m)

dx t( )dt

=−x t( ) + u t( )

τ

ステップ入力の大きさ 時定数

時間 状態ベクトル パラメータ 速度ベクトル

Page 16: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

メイン部分 FOL_main.m

function main

tau = 2; %時定数 In = 1; %ステップ入力の大きさ

dt = 0.3; % 時間刻み T = 10; %最終時間

xinit =[0]; %初期値セット  para = [tau,In]; %パラメータのセット %@FOLで関数のポインタの受け渡し [t1,x] = Euler(@FOL,[0,T],xinit,dt,para); %オイラー法 xe = x(1,:); xmin = min(xe)-0.1; xmax = max(xe)+0.1; %@FOLで関数のポインタの受け渡し [t2,x] = RK2(@FOL,[0,T],xinit,dt,para); %2次Runge-Kutta  xr2 = x(1,:);

t3 = 0:dt:T; %離散時間の設定(横ベクトル) xas = In.*(1-exp(-t3./tau)); %解析解の計算

plot(t3,xas,‘-’,t1,xe,‘-.’,t2,xr2,‘:’); %グラフの表示 axis([0 T xmin xmax]);

end

時定数を変えて、 収束時間の変化を 観察する

オイラー法とRunge-Kutta法の精度比較

Page 17: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

MATLAB演習(線形システム) • 微分方程式の数値解法(復習) •  1次遅れ系と時定数

1.  ステップ応答の解析解  2.  数値計算(オイラー法とRunge-Kutta法の精度比較)

3.  周波数応答とボード線図 •  2次振動系と共振

1.  ステップ応答の解析解 2.  数値計算 3.  周波数応答とボード線図

• レポート課題

Page 18: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

配布プログラム

•  2次のRunge-Kutta法 RK2.m • ベクトル場 FOL_FR.m • メイン部分 FOL_FR_main.m 

Page 19: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ベクトル場の関数(FOL_FR.m)

dx t( )dt

=−x t( ) + Asin ωt( )

τ

正弦波の振幅 角周波数

時間 状態ベクトル パラメータ 速度ベクトル

function x = FOL_FR(t,y,para) x = (-y(1) + para(2).*sin(para(3).*t))./para(1); end

時定数

Page 20: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

function main

tau = 1; %時定数 In = 1; %正弦波の振幅 omega = 10;角周波数

dt = 0.02; % 時間刻み T = 20; %最終時間

xinit =[0]; %初期値セット para = [tau,In,omega]; %パラメータのセット

%@FOL_FRで関数のポインタの受け渡し [t,x] = RK2(@FOL_FR,[0,T],xinit,dt,para); %2次Runge-Kutta xr = x(1,:); xmin = min(xr)-0.1; xmax = max(xr)+0.1;

plot(t,xr); %グラフの表示 axis([0 T xmin xmax]);

メイン部分 FOL_FR_main.

m

角周波数を変えて、出力の振幅の変化を観察する

Page 21: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

周波数応答

dx t( )dt

=−x t( ) + sin ωt( )

τ

正弦波入力

時間が十分経つと

x t( ) = G jω( ) sin ωt + tan−1G jω( )( )

G jω( ) =1

1+ jτω

Page 22: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ボード線図

Page 23: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

配布プログラム

• 伝達関数 TF_FOL.m • メイン部分 FOL_boad_main.m 

Page 24: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

伝達関数 (TF_FOL.m)

function [ y ] = TF_FOL(s,para)

y = 1./(ones(size(s))+para(1).*s);

G s( ) =1

1+ τs

時定数

パラメータ 出力 複素数s

Matlabは複素数が扱える

sがベクトルの場合に対応

Page 25: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

メイン部分 FOL_boad_ma

in.m

function main

tau = 1; %時定数 j=sqrt(-1);%虚数の設定

para = [tau];%パラメータのセット

omega = 10.^(-2:0.1:2); %角周波数のセット G = TF_FOL(j.*omega,para);%周波数伝達関数の計算

gain = 20.*log10(abs(G)); %ゲインの計算 kaku = angle(G); %位相の計算

subplot(2,1,1); %2つのグラフを縦に並べて表示 semilogx(omega,gain); %x軸を対数にしてグラフ表示 xlabel(‘omega’); ylabel(‘dB’);%軸のラベル

subplot(2,1,2); %2つのグラフを縦に並べて表示 semilogx(omega,kaku); %x軸を対数にしてグラフ表示 xlabel(‘omega’); ylabel(‘rad’); %軸のラベル

end

時定数を変えて、 周波数応答の変化を 観察

Page 26: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

MATLAB演習(線形システム) • 微分方程式の数値解法(復習) •  1次遅れ系と時定数

1.  ステップ応答の解析解  2.  数値計算   (オイラー法とRunge-Kutta法の精度比較) 3.  周波数応答とボード線図

•  2次振動系と共振 1.  ステップ応答の解析解 2.  数値計算 3.  周波数応答とボード線図

• レポート課題

Page 27: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

2次振動系

d2x t( )dt 2

+ 2ζωn2 dx t( )dt

+ωn2x t( ) =ωn

2u t( )

伝達関数

G s( ) =X s( )U s( )

=ωn2

s2 + 2ζωns+ωn2

初期値x(0)=0、x’(0)=0とする。

ラプラス変換

L x t( ){ } = X s( )

L u t( ){ } =U s( )入力 出力

Page 28: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ステップ応答 単位ステップ入力

U s( ) =1s

ステップ応答

次の3つの場合に分ける

X s( ) =ωn2

s2 + 2ζωns+ωn21s

ζ <1

ζ =1

ζ >1

Page 29: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ζ <1 の場合

X s( ) =1s−ωn2

21

β β + jα( )1

s+α − jβ−ωn2

21

β β − jα( )1

s+α + jβ

部分分数展開

逆ラプラス変換

x t( ) =1− 11−ζ 2

exp −ωnζt( )sin 1−ζ 2ωnt + φ( )

φ = tan−1 1−ζ 2

ζ

β =ωn 1−ζ 2

α =ωnζ

ζ =1 の場合

X s( ) =1s−

1s+ωn

−ωn

s+ωn( )2

部分分数展開

逆ラプラス変換

x t( ) =1− 1+ωnt( )exp −ωnt( )

Page 30: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ζ >1 の場合 部分分数展開

X s( ) =1s

+s2

s1 − s21

s− s1+

s1s2 − s1

1s− s2

逆ラプラス変換

s1= −ζωn +ωn ζ 2 −1

s2= −ζωn −ωn ζ 2 −1

x t( ) =1+s2

s1 − s2exp s1t( ) +

s1s2 − s1

exp s2t( )

Page 31: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ステップ応答の解析解

Page 32: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

MATLAB演習(線形システム) • 微分方程式の数値解法(復習) •  1次遅れ系と時定数

1.  ステップ応答の解析解  2.  数値計算   (オイラー法とRunge-Kutta法の精度比較) 3.  周波数応答とボード線図

•  2次振動系と共振 1.  ステップ応答の解析解 2.  数値計算 3.  周波数応答とボード線図

• レポート課題

Page 33: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

2次振動系の状態空間表現

d2x t( )dt 2

+ 2ζωn2 dx t( )dt

+ωn2x t( ) =ωn

2u t( )

dx t( )dt

= y t( ) とおくと

d2x t( )dt 2

=dy t( )dt

= −2ζωn2y t( ) −ωn

2x t( ) +ωn2u t( )

よって、以下の状態空間表現が得られる

ddt

xy

=

0 1−ωn

2 −2ζωn2

xy

+

0ωn2

u t( )

x = 1 0[ ]xy

Page 34: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

配布プログラム

•  2次のRunge-Kutta法 RK2.m • ベクトル場 SOE.m • メイン部分 SOE_main.m 

Page 35: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ベクトル場の関数(SOE.m)

function xy = SOE(t,y,para) xy = [y(2);-para(2).^2.*y(1)-2.*para(1).*para(2).*y(2)+para(2).^2.*para(3)]; end

ddt

xy

=

縦ベクトル

ステップ入力の大きさ

y−ωn

2x − 2ζωn2y +ωn

2u t( )

時間 状態ベクトル パラメータ 速度ベクトル

Page 36: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

function main

xi = 0.2; %減衰係数 wn = 2; %固有振動数 In = 1;%ステップ入力の大きさ dt = 0.1;%時間刻み T = 15;%最終時間

xinit =[0;0];%初期値セット para = [xi,wn,In];%パラメータセット %@SOEで関数のポインタの受け渡し [t1,xy] = RK2(@SOE,[0,T],xinit,dt,para); %2次Runge-Kutta x = xy(1,:); xmin = min(x)-0.1; xmax = max(x)+0.1; y = xy(2,:); ymin = min(y)-0.1; ymax = max(y)+0.1;

subplot(2,1,1); %2つのグラフを縦に並べて表示 plot(t1,x);%ステップ応答の時間発展をプロット axis([0 T xmin xmax]); xlabel('t'); ylabel('x');

subplot(2,1,2); %2つのグラフを縦に並べて表示 plot(x,y);%状態空間プロット axis([xmin xmax ymin ymax]); xlabel('x'); ylabel('dx/dt'); end

メイン部分 SOE_main.m

減衰係数を変えて、 ステップ応答の変化を 観察

Page 37: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

MATLAB演習(線形システム) • 微分方程式の数値解法(復習) •  1次遅れ系と時定数

1.  ステップ応答の解析解  2.  数値計算   (オイラー法とRunge-Kutta法の精度比較) 3.  周波数応答とボード線図

•  2次振動系と共振 1.  ステップ応答の解析解 2.  数値計算 3.  周波数応答とボード線図

• レポート課題

Page 38: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

配布プログラム

•  2次のRunge-Kutta法 RK2.m • ベクトル場 SOE_FR.m • メイン部分 SOE_FR_main.m 

Page 39: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ベクトル場の関数(SOE.m)

ddt

xy

=

縦ベクトル

正弦波の振幅

y−ωn

2x − 2ζωn2y +ωn

2Asin ωt( )

時間 状態ベクトル パラメータ 速度ベクトル

function xy = SOE(t,y,para) xy = [y(2);… %改行する場合、… -para(2).^2.*y(1)-2.*para(1).*para(2).*y(2)+para(2).^2.*para(3).*sin(para(4).*t)]; end

Page 40: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

メイン部分 SOE_FR_mai

n.m

減衰係数を変えて、 応答の振幅変化を観察

xi = 0.5; %減衰係数 wn = 1; %固有振動数 In = 1; %正弦波の振幅 omega = 1.5; %正弦波の角周波数 dt = 0.01; %時間刻み T = 60; %最終時間

xinit =[0;0]; %初期値セット para = [xi,wn,In,omega]; %パラメータセット %@SOE_FRで関数のポインタの受け渡し [t1,xy] = RK2(@SOE_FR,[0,T],xinit,dt,para); %2次Runge-Kutta x = xy(1,:); xmin = min(x)-0.1; xmax = max(x)+0.1; y = xy(2,:); ymin = min(y)-0.1; ymax = max(y)+0.1;

subplot(2,1,1); %2つのグラフを縦に並べて表示 plot(t1,x); %正弦波に対する応答の時間発展をプロット axis([0 T xmin xmax]); xlabel('t'); ylabel('x');

subplot(2,1,2); %2つのグラフを縦に並べて表示 plot(x,y); %状態空間プロット axis([xmin xmax ymin ymax]); xlabel('x'); ylabel('dx/dt');

Page 41: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

周波数応答 正弦波入力

時間が十分経つと

x t( ) = G jω( ) sin ωt + tan−1G jω( )( )

G jω( ) =ωn2

−ω 2 + 2 jζωnω +ωn2

d2x t( )dt 2

+ 2ζωn2 dx t( )dt

+ωn2x t( ) =ωn

2 sin ωt( )

=1

−ω 2 ωn2 + 2 jζω ωn +1

Page 42: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

ボード線図

ωωn

Page 43: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

配布プログラム

• 伝達関数 TF_SOE.m • メイン部分 FOL_boad_main.m 

Page 44: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

function [ y ] = TF_SOE(s,para)

y = para(2).^2./(s.^2 + 2.*para(1).*para(2).*s +… para(2).^2.*ones(size(s)));

end

伝達関数 (TF_SOE.m) パラメータ 出力 複素数s

Matlabは複素数が扱える

sがベクトルの場合に対応

G s( ) =ωn2

s2 + 2ζωns+ωn2

Page 45: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

メイン部分SOE_boad_ma

in.m

減衰係数を変えて、 周波数応答の変化を 観察

function main

xi = 0.05;%減衰係数 wn = 1;%固有振動数 j=sqrt(-1);%虚数の設定

para = [xi,wn]; %パラメータのセット

omega = 10.^(-1:0.05:1); %角周波数のセット G = TF_SOE(j.*omega,para); %周波数伝達関数の計算

gain = 20.*log10(abs(G)); %ゲインの計算 kaku = angle(G); %位相の計算

subplot(2,1,1); %2つのグラフを縦に並べて表示 semilogx(omega,gain); %x軸を対数にしてグラフ表示 xlabel('omega'); ylabel('dB'); %軸のラベル

subplot(2,1,2); %2つのグラフを縦に並べて表示 semilogx(omega,kaku); %x軸を対数にしてグラフ表示 xlabel('omega'); ylabel('rad'); %軸のラベル

end

Page 46: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

レポート

•  関数RK2.mを改造し、4次のRunge-Kutta法による数値積分を実行する関数を作成せよ。

•  作成した4次のRunge-Kutta法の関数を用いて、2次振動系のステップ応答を数値計算し、グラフを描け。

Page 47: MATLAB演習(線形システム) - Home | Gravlmj.nagaokaut.ac.jp/~lu/edu/env_math/lec5.pdfMATLAB演習(線形システム) • 微分方程式の数値解法 • 1次遅れ系と時定数

4次のRunge-Kutta法

xn+1 = xn +Δt6

F1 + 2F2 + 2F3 + F4[ ]

更新則

F1 = f xn,t( )ただし

t = nΔt

F2 = f xn +Δt2F1,t +

Δt2

F3 = f xn +Δt2F2,t +

Δt2

F4 = f xn + ΔtF3,t + Δt( )