diff --git a/Part0_ConceptReview.md b/Part0_ConceptReview.md
new file mode 100644
index 0000000..9053de0
--- /dev/null
+++ b/Part0_ConceptReview.md
@@ -0,0 +1,794 @@
+# 概要: ラプラス変換 (Laplace transforms) とLTIシステム (LTI systems)
+
+伝達関数(Transfer functions)は 、線形時不変(linear time-invariant, LTI)システムのラプラス変換を計算することで導出されます。このライブスクリプトでは、ラプラス変換とLTIシステムの基本を復習します。
+
+# ラプラス変換
+## 定義
+
+局所可積分関数 のラプラス変換は以下のように求めることができます。
+
+
+
+これに対応する逆ラプラス変換は以下の通りです。
+
+
+
+逆ラプラス変換(順ラプラス変換も同様)は、通常は変換表を参照することで見つけることができます。逆ラプラス変換の正式な定義はほとんど使われないので、ここでは説明しません。
+
+![image_0.png](Part0_ConceptReview_images/image_0.png)** 例題**
+
+**(a) ** のラプラス変換を手計算で求めましょう。 ただしはのヘビサイドステップ関数(Heaviside step function)とします。
+
+**(b) **[Symbolic Math Toolbox](https://www.mathworks.com/products/symbolic.html)を利用して、について解析的ラプラス変換を計算しましょう。
+
+**解**
+
+**(a)**
+
+
+
+**(b) **[`laplace`](https://jp.mathworks.com/help/symbolic/sym.laplace.html)関数を使うと、シンボリック表現fについての解析解を求めることができます。構文は以下の通りです:
+
+```matlab:Code(Display)
+Fs = laplace(f,var,transformVar)
+```
+
+1. はじめにシンボリック変数を定義します。
+
+```matlab:Code
+syms t s
+syms a positive
+```
+
+2. 次に関数fを定義します。Symbolic Math Toolbox に含まれる数学関数のリストについては[ドキュメント](https://www.mathworks.com/help/symbolic/mathematical-functions.html?s_tid=CRUX_lftnav)を参照してください。
+
+```matlab:Code
+f = heaviside(t-a)
+```
+
+f =
+
+
+
+3. 最後に、入力変数tと変換変数sを用いてラプラス変換を計算します。
+
+```matlab:Code
+Fs = laplace(f,t,s)
+```
+
+Fs =
+
+
+
+![image_1.png](Part0_ConceptReview_images/image_1.png)** 練習 **
+
+1. 以下の標準的な関数について、ラプラス変換を手計算で求めましょう。ただし、 は実数かつとします。
+
+
+
+
+
+**ヒント:** **a/b.** 代入 (substitution), **c. **部分積分 (integration by parts), **d. **ディラックのデルタ関数 (Dirac delta function) - シンボリック式の計算を行う場合は[`dirac`](https://www.mathworks.com/help/symbolic/sym.dirac.html)関数が利用できます, **e/g. **部分積分後に項を整理する, **f.** 多重積分の部分積分 (multiple integrations by parts),
+
+2. 下の空欄にシンボリック演算でラプラス変換を計算し、手計算で求めた答えと比較・確認しましょう。
+
+```matlab:Code
+% Symbolic variable declarations
+syms t s
+syms a positive
+
+% Compute Laplace transforms here
+
+```
+
+## ラプラス変換の可視化
+
+![image_2.png](Part0_ConceptReview_images/image_2.png) **やってみよう.** 下にあるコントロールスライダーを使ってラプラス変換を可視化しましょう。
+
+```matlab:Code
+syms t real
+syms a b positive
+```
+
+変数, , を定義します:
+
+```matlab:Code
+m = 1; % Positive integer
+anum = 1; % Positive constant
+bnum = 1; % Positive constant
+```
+
+関数 を選択します:
+
+```matlab:Code
+f = dirac(t-a);
+```
+
+軸の範囲を定義します:
+
+```matlab:Code
+trange = [-5, 5];
+srange = [-5, 5];
+
+generateSinglePlot(f,anum,bnum,trange,srange); % This local function generates the plots
+```
+
+![image_3.png](Part0_ConceptReview_images/image_3.png) **考えてみよう **
+
+ - ラプラス変換で最もよく見られる関数の族 (class of functions) は何ですか?
+ - ラプラス変換の極 (pole) は、関数の時間領域関数の振る舞いをどのように反映していますか?
+
+ラプラス変換と逆変換は、一般的に[このような表](https://en.wikipedia.org/wiki/List_of_Laplace_transforms#Table)を使って求めることができます。
+
+## ラプラス変換の特性
+
+ラプラス変換は、定義から導出されるいくつかの重要な性質を持ちます。以下、それらの性質について見ていきます。
+
+
+
+訳注:
+
+Time derivative: 時間微分
+
+Time integral: 時間積分
+
+Frequency shift: 位相シフト
+
+Time shift: 時間シフト
+
+Time scaling: 時間のスケーリング
+
+Time domain convolution: 時間空間の畳み込み処理
+
+
+
+例えば、時間微分のラプラス変換は、部分積分によって以下のように求められます:
+
+
+
+![image_4.png](Part0_ConceptReview_images/image_4.png) **やってみよう.** のシンボリック式による微分について、以下の構文を使って[シンボリック関数](https://jp.mathworks.com/help/symbolic/create-symbolic-functions.html)を宣言することで定義できます。
+
+```matlab:Code(Display)
+syms f(t)
+```
+
+微分は[`diff`](https://www.mathworks.com/help/matlab/ref/diff.html)関数を使って計算できます。
+
+```matlab:Code
+syms t f(t)
+dfdt = diff(f)
+```
+
+ [`laplace`](https://www.mathworks.com/help/symbolic/laplace.html)関数を使って、下にある`dfdt`のラプラス変換を計算しましょう。
+
+```matlab:Code
+Fs = laplace(dfdt)
+```
+
+![image_5.png](Part0_ConceptReview_images/image_5.png)** 練習問題. **
+
+** a. **二階時間微分 (second time derivative) を、部分積分を2回繰り返す手計算で求めましょう。
+
+** b.** 手計算で求めた答えについて、シンボリック演算を使ったラプラス変換を行い、答えを確認しましょう。
+
+![image_6.png](Part0_ConceptReview_images/image_6.png) **Pro-tip**: 二次導関数を計算するには、[`diff`](https://www.mathworks.com/help/matlab/ref/diff.html) を使って、`diff(f,n)`という構文(nを導関数の次数)が使えます。
+
+```matlab:Code
+syms t f(t) % Definitions of the symbolic variables
+% Perform your symbolic computations here
+d2fdt2 = diff(f,2)
+Fs = laplace(d2fdt2)
+```
+
+## ラプラス変換の特性を可視化する
+
+![image_7.png](Part0_ConceptReview_images/image_7.png) **やってみよう. **下にあるコントロールスライダーを使ってラプラス変換の要素を可視化してみましょう。
+
+```matlab:Code
+syms t real
+syms a real
+```
+
+定数, を定義します:
+
+```matlab:Code
+m = 1; % Positive integer
+anum = 1; % Constant
+```
+
+関数とプロパティを選択し、 を作成します。
+
+```matlab:Code
+f = sin(t);
+g = diff(f);
+```
+
+軸の範囲を定義します:
+
+```matlab:Code
+trange = [-5, 5];
+srange = [-5, 5];
+
+generateDoublePlot(f,g,anum,0,trange,srange) % This local function generates the plots
+```
+
+## ラプラス変換を用いた微分方程式の解法
+
+ラプラス変換を使うと、初期値問題を解析的に解くことができます。一般に、以下のステップによって解を求めることができます。
+
+ 1. ラプラス変換を行う
+ 1. ラプラス領域 () で解変数を解く
+ 1. ラプラス変換表を参照し、ラプラス逆変換を行う
+
+![image_8.png](Part0_ConceptReview_images/image_8.png)** 練習問題. **ラプラス変換を使用して、バネ-マス-ダンパーの力学を解きます。
+
+ - 一定の力 (constant forcing) N
+ - 物理パラメータ: kg, Ns/m, and N/m
+ \item{ 初期値はゼロ (zero initial conditions): and }
+
+ ![image_9.png](Part0_ConceptReview_images/image_9.png)
+
+**解答.**
+
+**1. 運動方程式を導出します.** 自由体図 (Free body diagram)を描き、ニュートンの第二法則を適用して運動方程式を導出できます。
+
+ ![image_10.png](Part0_ConceptReview_images/image_10.png)
+
+**2. 動的システムODEのラプラス変換を計算し、****を解きます。**ヒント: .
+
+ $$m[s^2 X-sx(0)-x^{\prime } (0)]+c[sX-x(0)]+kX=\frac{F}{s}$$
+
+ゼロ初期条件と物理パラメータの値を適用すると、以下のようになります。
+
+
+
+について解いてみます。
+
+
+
+**3. 部分分数分解によって、****の式を逆ラプラス変換の方法が分かっている項に分離していきます。**
+
+手計算で部分分数分解を行い、得られた結果を以下のシンボリック演算によって求められた解答と比較してください。
+
+```matlab:Code
+% Define X(s)
+syms s
+X = 10/(s^3 + 2*s^2 + 10*s)
+% Compute the partial fraction decomposition
+Xdecomp = partfrac(X,s)
+```
+
+**4. 逆ラプラス変換を行います。**
+
+[表](https://en.wikipedia.org/wiki/List_of_Laplace_transforms#Table)にある形で項の和としてを書き直すと、逆ラプラス変換を行うことができます。
+
+
+
+逆変換を行って解を求めます:
+
+
+
+別の方法として、シンボリック関数[`ilaplace`](https://www.mathworks.com/help/symbolic/sym.ilaplace.html)`を使って、`の逆ラプラス変換を求めることができます。
+
+```matlab:Code
+syms x
+x = ilaplace(X) % The inverse Laplace transform of X(s)
+```
+
+**5. 解をプロットする**
+
+チェックボックスをクリックして、解を表示しましょう。
+
+```matlab:Code
+plotSoln = false;
+
+% Create solution array
+t = linspace(0,5,150);
+x = 1-exp(-t).*(cos(3*t) + 1/3*sin(3*t));
+% This generates a plot (do not edit)
+if(plotSoln)
+ animateSingleMSD(t,x,0.5)
+end
+```
+
+![image_11.png](Part0_ConceptReview_images/image_11.png)** 練習問題.** この演習では、ラプラス変換によって単振り子 (simple pendulum) の力学の問題を解きます。
+
+ ![image_12.png](Part0_ConceptReview_images/image_12.png)
+
+**(a) **上に示した単振り子の自由体図を描き、長さ、重力定数9.8 m/sの振り子の運動方程式を導出してください。その方程式を 近傍で線形化して、次の式
+
+
+
+と等価であることを示してください。
+
+**(b) **ラプラス変換を使って、線形化された運動方程式を解いてください:
+
+
+
+ ただし以下の初期条件とします。 .
+
+求めた解答をシンボリック変数`t`を用いて変数`theta`に入れてください`。`チェックボックスをクリックすると、解答がプロットされます。
+
+```matlab:Code
+syms t
+% Replace NaN with your symbolic solution and run the section
+theta = NaN;
+
+plotSoln = false;
+% This generates a plot (do not edit)
+if(plotSoln)
+ plotPendulum(theta)
+end
+```
+
+# 線型時不変システム (Linear time-invariant systems)
+
+線型時不変システム(LTIシステム)は、名前が示す通りの2つの性質を持ちます: 線形性 (linearity)と時不変性 (time-invariance)です。
+
+![image_13.png](Part0_ConceptReview_images/image_13.png)
+
+> *Consider an operator ** that maps an input ** to an output **. *
+
+**1. 線型性**
+
+以下2つの性質を持っているならば、作用素 (operator) は線形である :
+
+ - 重ね合わせ (Superposition):
+ - 斉次性 (Homogeneity) :
+
+この2つの特性は、しばしば以下のように1つにまとめて表記されます。
+
+
+
+**2. 時不変性**
+
+時間のずれ (time shift) を持つ入力が、同じ量の時間のずれを持つ出力信号を出力するとき、作用素は時不変性を持つ:
+
+ -
+
+![image_14.png](Part0_ConceptReview_images/image_14.png)** 練習問題.** この練習問題では、複数の未知の作用子が線形で時不変であるかどうかについて、その出力を調べることによって確認していきます。
+
+**a. **入力値と出力値をグラフで示し、作用素 , , , が時不変性を持つかどうかを確認しましょう。
+
+ - 作用素を変更するために、ドロップダウンリストを使います。
+ - 入力の時間のずれを変化させるために、`tau`を調整します。
+
+```matlab:Code
+syms t
+operator = "g"; % Select an operator
+u = t^2/6; % Input function
+tau = 1;
+
+plotInputsOutputs(u,tau,1,operator)
+```
+
+**b.** 入力値と出力値をグラフで示し、作用素 , , , が斉次性の条件 () を満たすかどうかを確認しましょう。
+
+ - 作用素を変更するために、ドロップダウンリストを使います。
+ - 入力のスケーリングを変更するために、 `a`の値を調整しましょう。
+
+```matlab:Code
+operator = "g";
+syms t
+u = t^2/6; % Input function
+a = 2.5;
+
+plotInputsOutputs(u,0,a,operator)
+```
+
+**c.** 入力値と出力値をグラフで示し、作用素 , , , が重ね合わせの条件 ( ) を満たすかどうかを確認しましょう。
+
+ - 作用素を変更するために、ドロップダウンリストを使います。
+ - に について、異なる関数も試してみましょう。
+
+```matlab:Code
+operator = "g";
+syms t
+u1 = t^2/6; % Input function 1
+u2 = t^3/10; % Input function 2
+
+plotAddition(u1,u2,operator)
+```
+
+![image_15.png](Part0_ConceptReview_images/image_15.png) **考えよう. **上でグラフを生成するために使用した作用素は以下の通りです。どの作用素が線形ですか?どの作用素が時間不変ですか?あなたの答えは上のグラフで確認されたものと一致していますか?
+
+ \item{ : with }
+ - :
+ \item{ }
+ \item{ : }
+
+**Helper functions**
+
+**Plots**
+
+```matlab:Code
+function generateSinglePlot(f,anum,bnum,trange,srange)
+% This function plots a single transform pair
+ colors = lines(2);
+ figure("position",[0 0 1100 450])
+ plotLaplace(f,anum,bnum,trange,srange,colors(1,:),colors(2,:),0.05,0.55,0.85,0.7)
+end
+
+function generateDoublePlot(f,g,anum,bnum,trange,srange)
+% This function plots two transform pairs together
+ colors = lines(4);
+ figure("position",[0 0 1100 500])
+ plotLaplace(f,anum,bnum,trange,srange,colors(1,:),colors(2,:),0.05,0.55,0.85,0.63) % This local function generates the plots
+ plotLaplace(g,anum,bnum,trange,srange,colors(3,:),colors(4,:),0.05,0.55,0.74,0.63) % This local function generates the plots
+end
+
+function plotLaplace(func,anum,bnum,trange,srange,c1,c2,p1,p2,py,vpos)
+% This function plots a transform pair
+ fs = 14; % fontsize
+ funcName = inputname(1);
+
+ % Compute the Laplace transform and generate functions
+ syms s
+ syms t real
+ syms a b positive
+ Fs = laplace(sym(func),t,s);
+ Fs = collect(Fs);
+
+ % Generate functions for plotting
+ ffunc = matlabFunction(sym(func),"vars",[t a b]);
+ Fsfunc = matlabFunction(Fs,"vars",[s a b]);
+ fplotfunc = @(t)ffunc(t,anum,bnum);
+ Fplotfunc = @(s)Fsfunc(s,anum,bnum);
+
+ % Plot f(t) and label it with a latex function
+ subplot("position",[0.05 0.1 0.4 vpos])
+ hold on
+ if(func == dirac(t-a))
+ hold on
+ plot([1,1]*anum,[0,1],"color",c1,"linewidth",1.5)
+ plot(anum,1,"^","color",c1,"linewidth",1.5,"MarkerFaceColor",c1)
+ plot(trange,0*trange,"linewidth",1.5,"color",c1)
+ hold off
+ elseif(func == 1)
+ plot(trange,0*trange,"linewidth",1.5,"color",c1)
+ else
+ fplot(fplotfunc,trange,"linewidth",1.5,"color",c1)
+ end
+ hold off
+ xlabel("$t$","Interpreter","latex","fontsize",fs)
+ frange = get(gca,'ylim');
+ frange = [frange(1) - diff(frange)/4, frange(2) + diff(frange)/4 ];
+ axis([trange frange])
+ ylabel("$"+funcName+"$","Interpreter","latex","fontsize",fs)
+ textVal = "$$"+funcName+"(t) = "+latex(sym(func))+"$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c1,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[p1 py 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+
+ % Plot F(s) and label it with a latex function
+ subplot("position",[0.55 0.1 0.4 vpos])
+ hold on
+ if( Fs == 1 )
+ plot(srange,0*srange,"linewidth",1.5,"color",c2)
+ else
+ fplot(Fplotfunc,srange,"linewidth",1.5,"color",c2)
+ end
+ hold off
+ xlabel("$s$","Interpreter","latex","fontsize",fs)
+ ylabel("$"+upper(funcName)+"$","Interpreter","latex","fontsize",fs)
+ Frange = get(gca,'ylim');
+ Frange = [Frange(1) - diff(Frange)/4, Frange(2) + diff(Frange)/4];
+ axis([srange Frange])
+ textVal = "$$"+upper(funcName)+"(s) = "+latex(sym(Fs))+"$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c2,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[p2 py 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+
+end
+
+function plotInputsOutputs(u,tau,a,operator)
+% Plots operator input/output and annotates the plots with latex
+ figure("position",[0 0 900 350])
+ tlims = [-5 5];
+ ylims = [-10 10];
+ colors = lines(2);
+ c1 = colors(1,:);
+ c2 = colors(2,:);
+ p1 = 0.05;
+ p2 = 0.55;
+ py = 0.85;
+ vpos = 0.70;
+
+ fs = 12; % fontsize
+
+ % Apply operator and generate functions
+ syms t
+ u = a*subs(u,t,t-tau);
+ uFunc = matlabFunction(u,"var",t);
+ y = applyOperator(u,operator);
+ yFunc = matlabFunction(y,"var",t);
+
+ % Plot u(t) and label it with a latex function
+ subplot("position",[0.05 0.12 0.4 vpos])
+ fplot(uFunc,tlims,"linewidth",1.5,"color",c1)
+ xlabel("$t$","Interpreter","latex","fontsize",fs)
+ axis([tlims ylims])
+ ylabel("$u$","Interpreter","latex","fontsize",fs)
+ textVal = "$$"+latex(sym(u))+"$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c1,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[p1 py 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+
+ % Plot y(t) and label it with a latex function
+ subplot("position",[0.55 0.12 0.4 vpos])
+ fplot(yFunc,tlims,"linewidth",1.5,"color",c2)
+ xlabel("$t$","Interpreter","latex","fontsize",fs)
+ ylabel("$y$","Interpreter","latex","fontsize",fs)
+ axis([tlims ylims])
+ textVal = "$$y(t)$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c2,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[p2 py 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+end
+
+function plotAddition(u1,u2,operator)
+
+ figure("position",[0 0 1200 500])
+ tlims = [-5 5];
+ ylims = [-10 10];
+ colors = lines(5);
+ c1 = colors(1,:);
+ c2 = colors(2,:);
+ c3 = colors(3,:);
+ c4 = colors(4,:);
+ px1 = 0.05;
+ px2 = 0.375;
+ px3 = 0.7;
+ py1 = 0.85;
+ py2 = 0.75;
+ vpos = 0.60;
+
+ fs = 12; % fontsize
+
+ % Apply operator and generate functions
+ syms t
+ u = u1 + u2;
+ uFunc = matlabFunction(u,"var",t);
+ u1Func = matlabFunction(u1,"var",t);
+ u2Func = matlabFunction(u2,"var",t);
+
+ y = applyOperator(u,operator);
+ y1 = applyOperator(u1,operator);
+ y2 = applyOperator(u2,operator);
+ yFunc = matlabFunction(y,"var",t);
+ y12Func = matlabFunction(y1+y2,"var",t);
+
+ % Plot u(t) and label it with a latex function
+ subplot("position",[px1 0.12 0.25 vpos])
+ fplot(u1Func,tlims,"linewidth",1.5,"color",c1)
+ hold on
+ fplot(u2Func,tlims,"linewidth",1.5,"color",c2)
+ hold off
+ xlabel("$t$","Interpreter","latex","fontsize",fs)
+ axis([tlims ylims])
+ ylabel("$u$","Interpreter","latex","fontsize",fs)
+ textVal = "$$u_1 = "+latex(sym(u1))+"$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c1,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[px1 py1 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+ textVal = "$$u_2 = "+latex(sym(u2))+"$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c2,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[px1 py2 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+
+ % Plot y(t) and label it with a latex function
+ subplot("position",[px2 0.12 0.25 vpos])
+ fplot(y12Func,tlims,"linewidth",1.5,"color",c3)
+ xlabel("$t$","Interpreter","latex","fontsize",fs)
+ ylabel("$y$","Interpreter","latex","fontsize",fs)
+ axis([tlims ylims])
+ textVal = "$$y_1(t) + y_2(t)$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c3,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[px2 py2 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+
+ % Plot F(s) and label it with a latex function
+ subplot("position",[px3 0.12 0.25 vpos])
+ fplot(yFunc,tlims,"linewidth",1.5,"color",c4)
+ xlabel("$t$","Interpreter","latex","fontsize",fs)
+ ylabel("$y$","Interpreter","latex","fontsize",fs)
+ axis([tlims ylims])
+ textVal = "$$y(t)$$";
+ annotation("textbox","String",textVal,"Interpreter","latex","Color",c4,"VerticalAlignment","middle",...
+ "fontsize",fs,"Position",[px3 py2 0.1 0.1],"FitBoxToText","on","EdgeColor","none","BackgroundColor","white")
+
+end
+
+function y = applyOperator(u,operator)
+ syms t
+ if(operator == "g")
+ y = diff(u,1) + diff(u,2);
+ elseif(operator == "h")
+ y = 4*sin(u).^2;
+ elseif(operator == "i")
+ y = int(3*u,t,t-1,t+1);
+ else
+ y = t*diff(u,1);
+ end
+end
+
+function plotPendulum(thetaSym)
+ try
+ % This generates a plot (do not edit)
+ t = linspace(0,5,150);
+ thetaFunc = matlabFunction(thetaSym);
+ thetaArray = thetaFunc(t);
+ generatePendulumPlot(t,thetaArray,0.5)
+ catch ME
+ warning("Plotting failed with error: " + ME.message)
+ end
+end
+
+function generatePendulumPlot(t,theta,l)
+% Generates an animation of a single pendulum
+% t: time array
+% theta: angle array
+% l: length of pendulum
+
+ colors = lines(6);
+ ms = 8;
+ fs = 14;
+
+ f = figure("position",[0,0,1200,700]);
+ % Generate solution variables
+ tlim = [min(t),max(t)];
+ y = -l*cos(theta);
+ x = l*sin(theta);
+
+ % Setup the figure
+ buff = 1.2;
+ ymax = max([l/2,max(y)*buff]);
+ axisLim0 = [tlim(1),tlim(2),min(theta)*buff,max(theta)*buff];
+ axisLim1 = [tlim(1),tlim(2),-l*buff,ymax];
+ axisLim2 = [-l*buff,l*buff,-l*buff,ymax];
+
+ k = 1;
+ % Create plot
+ sp0 = subplot(2,2,1);
+ xlabel("$t$","Interpreter","latex","fontsize",fs)
+ ylabel("$\theta$","Interpreter","latex","fontsize",fs)
+ hold on
+ plot(t,theta,"color",colors(1,:),"linewidth",1.5);
+ b = plot(t(k),theta(k),"o","markerfacecolor",colors(2,:),"markersize",ms);
+ hold off
+ axis(axisLim0)
+ title("Angular displacement")
+ box off
+
+ sp1 = subplot(2,2,3);
+ set(gca, "Clipping","off","Color","none");
+ hold on
+ plot(t,y,"k-","color",colors(1,:),"linewidth",1.5)
+ e = plot([0, tlim(2)+(tlim(2)-tlim(1))*4], [y(k),y(k)],"-","color",[colors(4,:),0.5],"linewidth",1.5);
+ f = plot([t(k), t(k)], [-l*buff,ymax+(ymax+l*buff)*4],"-","color",[colors(4,:),0.5],"linewidth",1.5);
+ g = plot(t(k),y(k),"o","markerfacecolor",colors(2,:),"markersize",ms);
+ hold off
+ axis(axisLim1)
+ box off
+ xlabel("$t$ [s]","Interpreter","latex","FontSize",fs)
+ ylabel("$y$ [m]","Interpreter","latex","FontSize",fs)
+ title("Vertical position")
+
+ sp2 = subplot(2,2,4);
+ set(gca, "Clipping","off","Color","none");
+ hold on
+ d = plot([0,x(k)],[0,y(k)],"color",colors(1,:),"linewidth",1.5);
+ c = plot(x(k),y(k),"o","markerfacecolor",colors(2,:),"markersize",ms*1.5);
+ hold off
+ axis equal
+ axis(axisLim2)
+ box off
+ xlabel("$x$ [m]","Interpreter","latex","FontSize",fs)
+ ylabel("$y$ [m]","Interpreter","latex","FontSize",fs)
+ title("Position")
+
+ % Create animation
+ for k = 1:length(t)
+ b.XData = t(k);
+ b.YData = theta(k);
+ c.XData = x(k);
+ c.YData = y(k);
+ d.XData = [0,x(k)];
+ d.YData = [0,y(k)];
+ e.YData = [y(k),y(k)];
+ f.XData = [t(k),t(k)];
+ g.XData = t(k);
+ g.YData = y(k);
+ pause(0)
+ end
+ drawnow
+ close all
+end
+
+function animateSingleMSD(t,x,w)
+% Generates an animation of a single mass/spring/damper
+% t: time array
+% x: displacement array
+% w: width of the mass
+
+ colors = lines(6);
+ fs = 14;
+
+ % Create plot
+ k = 1;
+ f = figure("position",[0 0 1200 500]);
+
+ % Setup the figure
+ buffer = 1.2;
+ xrange = max(x) - min(x);
+ xmax = min(x) + xrange*buffer ;
+ xmin = max(x) - xrange*buffer - w*1.5;
+ tlim = [t(1) t(end)];
+ axisLim1 = [tlim(1),tlim(2),xmin,xmax];
+ axisLim2 = [-w*buffer,w*buffer,xmin,xmax];
+ xground = xmin;
+
+ sp1 = subplot(1,2,1);
+ set(gca, "Clipping","off","Color","none");
+ hold on
+ plot(t,x,"k-","color",colors(1,:),"linewidth",1.5);
+ a = plot([0, tlim(2)+(tlim(2)-tlim(1))*4], [x(k),x(k)],"-","color",[colors(4,:),0.5],"linewidth",1.5);
+ b = plot(t(k),x(k),"o","markerfacecolor",colors(2,:),"MarkerSize",8);
+ hold off
+ axis(axisLim1)
+ box off
+ xlabel("$t$ [s]","Interpreter","latex","FontSize",fs)
+ ylabel("$x$ [m]","Interpreter","latex","FontSize",fs)
+ title("displacement")
+
+ sp2 = subplot(1,2,2);
+ set(gca, "Clipping","off","Color","none");
+ hold on
+ plot([-w*buffer w*buffer],[xground xground],'k-',"linewidth",1.5);
+
+ % Plot mass
+ x1 = x(k) - w/2;
+ c = rectangle("Position",[-w/2 x1-w w w],"FaceColor",colors(1,:));
+
+ % Plot spring
+ xextension = x(k)-w;
+ xs = linspace(xground,xextension,12);
+ ys = w/6*(-1).^(1:numel(xs)) - w/4;
+ d = plot(ys,xs,"k","linewidth",1.5);
+ % Plot damper
+ ydamp = w/4;
+
+ xdamp1 = xground + (xextension-xground)/2 + w*0.1;
+ xdamp2 = xground + (xextension-xground)/2;
+ xdamp3 = xground + (xextension-xground)/2 + w*0.2;
+ e = plot([ydamp,ydamp,NaN,ydamp-w/10,ydamp+w/10],[xground,xdamp1,NaN,xdamp1,xdamp1],"k","linewidth",1.5);
+ f = plot([ydamp-w*0.15,ydamp-w*0.15,NaN,ydamp+w*0.15,ydamp+w*0.15,NaN,ydamp-w*0.15,ydamp+w*0.15,NaN,ydamp,ydamp],...
+ [xdamp2,xdamp3,NaN,xdamp2,xdamp3,NaN,xdamp3,xdamp3,NaN,xdamp3,xextension],"k","linewidth",1.5);
+
+ hold off
+ axis equal
+ axis(axisLim2)
+ ax = gca;
+ ax.XAxis.Visible = 'off';
+ title("diagram")
+
+ % Create animation
+ for k = 1:length(t)
+ % displacement
+ a.YData = [x(k),x(k)];
+ b.XData = t(k);
+ b.YData = x(k);
+ % mass
+ c.Position = [-w/2,x(k)-w,w,w];
+ xextension = x(k)-w;
+ % spring
+ d.YData = linspace(xground,xextension,12);
+ % damper
+ xdamp1 = xground + (xextension-xground)/2 + w*0.1;
+ xdamp2 = xground + (xextension-xground)/2;
+ xdamp3 = xground + (xextension-xground)/2 + w*0.2;
+ e.YData = [xground xdamp1 NaN xdamp1 xdamp1];
+ f.YData = [xdamp2 xdamp3 NaN xdamp2 xdamp3 NaN xdamp3 xdamp3 NaN xdamp3 xextension];
+ pause(0)
+ end
+ drawnow
+ close all
+
+end
+
+% Suppress unused suggestions
+%#ok<*NASGU>
+```
diff --git a/Part0_ConceptReview.mlx b/Part0_ConceptReview.mlx
new file mode 100644
index 0000000..2136143
Binary files /dev/null and b/Part0_ConceptReview.mlx differ
diff --git a/Part0_ConceptReviewSoln.mlx b/Part0_ConceptReviewSoln.mlx
new file mode 100644
index 0000000..45ff339
Binary files /dev/null and b/Part0_ConceptReviewSoln.mlx differ
diff --git a/Part0_ConceptReview_images/image_0.png b/Part0_ConceptReview_images/image_0.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part0_ConceptReview_images/image_0.png differ
diff --git a/Part0_ConceptReview_images/image_1.png b/Part0_ConceptReview_images/image_1.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part0_ConceptReview_images/image_1.png differ
diff --git a/Part0_ConceptReview_images/image_10.png b/Part0_ConceptReview_images/image_10.png
new file mode 100644
index 0000000..ca997b4
Binary files /dev/null and b/Part0_ConceptReview_images/image_10.png differ
diff --git a/Part0_ConceptReview_images/image_11.png b/Part0_ConceptReview_images/image_11.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part0_ConceptReview_images/image_11.png differ
diff --git a/Part0_ConceptReview_images/image_12.png b/Part0_ConceptReview_images/image_12.png
new file mode 100644
index 0000000..6adc68f
Binary files /dev/null and b/Part0_ConceptReview_images/image_12.png differ
diff --git a/Part0_ConceptReview_images/image_13.png b/Part0_ConceptReview_images/image_13.png
new file mode 100644
index 0000000..2021f93
Binary files /dev/null and b/Part0_ConceptReview_images/image_13.png differ
diff --git a/Part0_ConceptReview_images/image_14.png b/Part0_ConceptReview_images/image_14.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part0_ConceptReview_images/image_14.png differ
diff --git a/Part0_ConceptReview_images/image_15.png b/Part0_ConceptReview_images/image_15.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part0_ConceptReview_images/image_15.png differ
diff --git a/Part0_ConceptReview_images/image_2.png b/Part0_ConceptReview_images/image_2.png
new file mode 100644
index 0000000..5bfb1f8
Binary files /dev/null and b/Part0_ConceptReview_images/image_2.png differ
diff --git a/Part0_ConceptReview_images/image_3.png b/Part0_ConceptReview_images/image_3.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part0_ConceptReview_images/image_3.png differ
diff --git a/Part0_ConceptReview_images/image_4.png b/Part0_ConceptReview_images/image_4.png
new file mode 100644
index 0000000..5bfb1f8
Binary files /dev/null and b/Part0_ConceptReview_images/image_4.png differ
diff --git a/Part0_ConceptReview_images/image_5.png b/Part0_ConceptReview_images/image_5.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part0_ConceptReview_images/image_5.png differ
diff --git a/Part0_ConceptReview_images/image_6.png b/Part0_ConceptReview_images/image_6.png
new file mode 100644
index 0000000..ced1a7a
Binary files /dev/null and b/Part0_ConceptReview_images/image_6.png differ
diff --git a/Part0_ConceptReview_images/image_7.png b/Part0_ConceptReview_images/image_7.png
new file mode 100644
index 0000000..5bfb1f8
Binary files /dev/null and b/Part0_ConceptReview_images/image_7.png differ
diff --git a/Part0_ConceptReview_images/image_8.png b/Part0_ConceptReview_images/image_8.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part0_ConceptReview_images/image_8.png differ
diff --git a/Part0_ConceptReview_images/image_9.png b/Part0_ConceptReview_images/image_9.png
new file mode 100644
index 0000000..138a703
Binary files /dev/null and b/Part0_ConceptReview_images/image_9.png differ
diff --git a/Part1_TransferFunctionBasics.md b/Part1_TransferFunctionBasics.md
new file mode 100644
index 0000000..54f9eed
--- /dev/null
+++ b/Part1_TransferFunctionBasics.md
@@ -0,0 +1,682 @@
+# 電気自動車: the wave of the future?
+
+(訳者注: the wave of the futureは「最先端のもの」という意味があり、伝達関数の波とかけています)
+
+
+
+![image_0.png](Part1_TransferFunctionBasics_images/image_0.png)
+
+> *Essential components of an electric vehicle*
+
+電気自動車 (Electric vehicles, EV) は、環境に配慮した持続可能な移動手段の未来形かもしれません。しかし、ガソリン車よりも高効率を持ちながら、高速で加速・維持するのに十分なパワーをEVが備えているのはなぜでしょうか。その答えは、EVの効率的なパワーエレクトロニクスにあります。このモジュールでは、伝達関数について学び、これを活かして電気自動車の重要な要素のダイナミクスを解析してみます。
+
+# 伝達関数の基礎
+
+![image_1.png](Part1_TransferFunctionBasics_images/image_1.png) このライブスクリプトは、コードを見ながら実行する前提で作られています。「ビュー」タブを選択し、「インラインで出力」を選択してください。
+
+![image_2.png](Part1_TransferFunctionBasics_images/image_2.png)
+
+# 伝達関数の定義
+
+単一の入力関数と単一の出力関数を持つ力学系について考えてみます:
+
+ ![image_3.png](Part1_TransferFunctionBasics_images/image_3.png)
+
+これは**SISO** (Single Input Single Output, 一入力一出力) システムと呼ばれているものです。一般的に、システムは微分方程式によって定義されます: .
+
+**伝達関数** (transfer function) は以下のように定義され:
+
+ ,
+
+出力のラプラス変換と入力のラプラス変換.の比です。伝達関数は、入力を出力に写像します:
+
+ ![image_4.png](Part1_TransferFunctionBasics_images/image_4.png)
+
+![image_5.png](Part1_TransferFunctionBasics_images/image_5.png) ラプラス変換の復習が必要な方はこちらを参照ください: [Part0_ConceptReview.mlx](matlab: open Part0_ConceptReview.mlx). このリンクはPart0_ConceptReview.mlx が現在のフォルダまたは MATLAB Search Path にある場合のみ有効です。
+
+![image_6.png](Part1_TransferFunctionBasics_images/image_6.png)** 練習問題. **任意の関数で強制入力を受けるバネ-マス-ダンパーの伝達関数を求めよ。系は初期状態では静止している( and )とします。
+
+ ![image_7.png](Part1_TransferFunctionBasics_images/image_7.png)
+
+ *Mass-spring-damper diagram*
+
+**解答. **バネ-マス-ダンパーの方程式は
+
+
+
+微分に対するラプラス変換の性質を利用すると、ラプラス変換は
+
+
+
+ と を適用して:
+
+
+
+入力と出力の比を求めると、伝達関数が得られます:
+
+
+
+![image_8.png](Part1_TransferFunctionBasics_images/image_8.png)** 練習問題. **線形化された運動方程式を用いて、初期条件がゼロの単振り子の伝達関数を求めましょう。振り子が任意の強制関数(forcing function) で駆動されていると考えてください(強制関数の角度依存性があれば、にそれを加味します)。運動方程式は次のようになります:
+
+
+
+は重力による加速度、は振り子の長さです。あなたの解答を、シンボリック変数 `g`, `l`, `s`を用いて `pendulumTF` に記述してください。
+
+```matlab:Code
+syms g l s
+% Record your answer in pendulumTF
+pendulumTF = NaN;
+checkPendulumTF(pendulumTF) % Checks your answer
+```
+
+# 電気自動車の力学系
+
+ここでは、電気自動車(EV)の電気系と機械系の構成のダイナミクスについて、伝達関数を用いて調べます。EVシステムの主要な構成は下図のように表現されます。
+
+![image_9.png](Part1_TransferFunctionBasics_images/image_9.png)
+
+> *Simplified EV power system*
+
+この図において、電気的な領域と物理的な領域という2つの領域が表現されています。DCモーターは、電気エネルギーを機械エネルギーに変換することで、両領域を結合しています。電気的な領域では、2つの重要な変換が行われます。
+
+ - 交流電源(120/240V)を直流高圧電源(200〜800V)に変換し、バッテリーパックを充電します。
+ - バッテリーの高電圧DC(200-800V)は、低電圧システムで使用するために、降圧コンバータ (buck converter) によって低電圧(12Vまたは48V)に変換されます。
+
+この章では、EVで利用されている(もしくは実際に使われているものと同様のもの)典型的な構成部を調べてみます。
+
+# 単純な車両運動を伝達関数で表現してみる
+
+電気自動車のシステムにおいて、最も直感的に理解できる部分は、車両そのものの動きです。
+
+![image_10.png](Part1_TransferFunctionBasics_images/image_10.png)
+
+> *In this live script, you'll focus on modeling the motion of the vehicle.*
+
+単純なモデルについて考えると、牽引力(traction force)と摩擦力(frictional force)の2つの力が作用する単純な質量としてEVをモデル化できます。牽引力は、モーターが車輪にトルクを与えることで発生します
+
+![image_11.png](Part1_TransferFunctionBasics_images/image_11.png)
+
+> *A simple vehicle model*
+
+![image_12.png](Part1_TransferFunctionBasics_images/image_12.png)** 例題. (a) **単純な車両モデルの運動方程式を導出し、 (b) 牽引力を入力関数として、車体の変位 の伝達関数を求めましょう。
+
+**解答. **
+
+**(a) **車体の変位はです。問題をシンプルにするために、摩擦力は比例定数で速度 に比例すると仮定して:
+
+
+
+牽引力はモーターの出力によって変化するため(モデルに含まれない検討材料です)、任意の関数として扱っておきます:
+
+
+
+この2つの力についてニュートンの第二法則をあてはめます:
+
+
+
+**(b) **運動方程式のラプラス変換を計算すると
+
+
+
+ゼロ初期条件を適用してを解くと
+
+
+
+![image_13.png](Part1_TransferFunctionBasics_images/image_13.png) **注意.** この車両モデルは様々な部分で簡略化を行っています (特に摩擦力をモデル化する方法について)。このモデルは、実際の機械システムに存在する力を正確に説明するものではなく、伝達関数の本質的な概念を説明することを意図して作られています。
+
+![image_14.png](Part1_TransferFunctionBasics_images/image_14.png)** 練習問題. **位置ではなく、速度を解析したい場合もあるでしょう。運動方程式を
+
+
+
+速度について書き直し、伝達関数 : を解いてください。シンボリック変数 `s`, `m`, `k`を使い、解答を`Vtf`に格納し、コードを実行して結果を確認してみてください。
+
+```matlab:Code
+syms m s k % Symbolic variable declarations
+% Record your answer here
+Vtf = NaN;
+
+checkVTF(Vtf) % Checks your answer
+```
+
+# インパルス応答
+
+システムのインパルス応答 (impulse response) は、インパルス入力から生成される出力です。一般的には自然応答と呼ばれることもあります。
+
+ ![image_15.png](Part1_TransferFunctionBasics_images/image_15.png)
+
+* Response of a system to an impulse. While the response may be computed in the **-domain, it is shown in the time domain.*
+
+ここで、は次のような特性を持つディラックのデルタ関数 (Dirac delta function) です:
+
+ and
+
+単位インパルスは、時刻においてシステムに(非常に)素早い衝撃を与えるものだと考えてください。インパルス応答は、その衝撃に対してシステムがどのように応答するかを示します。
+
+![image_16.png](Part1_TransferFunctionBasics_images/image_16.png)** 考えてみよう.** 単純な車両運動モデルを考えてみます。入力関数は牽引力です.インパルス入力は、時刻の瞬間的な力に相当します。
+
+ ![image_17.png](Part1_TransferFunctionBasics_images/image_17.png)
+
+ - 位置伝達関数のインパルス応答を、時間領域でプロットしてみてください。
+ - 速度伝達関数のインパルス応答を、時間領域でプロットしてみてください。
+
+![image_18.png](Part1_TransferFunctionBasics_images/image_18.png)** 例題. **バネ-マス-ダンパーのインパルス応答を初期値ゼロ、パラメータ , , でプロットしてください。
+
+ ![image_19.png](Part1_TransferFunctionBasics_images/image_19.png)
+
+ *Mass-spring-damper diagram*
+
+バネ-マス-ダンパー系の伝達関数を思い出してみましょう:
+
+
+
+**解答.**
+
+MATLABで、[`tf`](https://www.mathworks.com/help/control/ref/tf.html)関数を使って伝達関数を定義し、その応答を[`impulse`](https://www.mathworks.com/help/control/ref/lti.impulse.html)関数で評価することで、インパルス応答を計算できます。
+
+`tf`関数の構文は
+
+ `tf(num,denom)`
+
+ここで `num` は分子の係数、`denom` は分母の係数を降順で表します。注意点としては、`tf` 関数で作成した伝達関数はシンボリック関数ではないので、Symbolic Math Toolbox で扱うことはできません。
+
+ の分子と分母は以下のように定義されます。
+
+```matlab:Code
+m = 1; % Default: 1
+c = 0.1; % Default: 0.1
+k = 0.4; % Default: 0.4
+num = [0 0 1];
+denom = [m c k];
+```
+
+`tf` を呼び出して伝達関数を作ります。
+
+```matlab:Code
+G = tf(num,denom)
+```
+
+インパルス応答をプロットするには、以下の構文で`impulse`関数を呼び出します:
+
+```matlab:Code(Display)
+impulse(H,tFinal)
+```
+
+`H` は伝達関数、`tFinal` はシミュレーションの継続時間です。
+
+```matlab:Code
+impulse(G,100)
+ylabel("x [m]")
+```
+
+![image_20.png](Part1_TransferFunctionBasics_images/image_20.png)** 考えてみよう.**
+
+ - 減衰 (damping) とバネの剛性(stiffness) は、インパルス応答にどのような影響を与えますか?
+ - を0.5まで増やすと、応答はどのように変化しますか?
+ - としてインパルス応答を再計算をしてみてください。
+ - としてインパルス応答を再計算してみてください。
+
+![image_21.png](Part1_TransferFunctionBasics_images/image_21.png)** 練習問題. **質量が1300kg、摩擦の比例定数 (frictional constant of proportionality) Ns/mである単純な車両について考えます。単純な車両の運動モデルについての伝達関数があることを思い出してください:
+
+
+
+MATLABのコマンドを使って、インパルス応答`G`の最初の100秒間をプロットしてください。以下の2点を満たすようにしてください。
+
+ 1. `tf` 関数を使って伝達関数を作成する
+ 1. `impulse`関数を使ってインパルス応答をプロットする
+
+```matlab:Code
+% Write your code here
+
+```
+
+![image_22.png](Part1_TransferFunctionBasics_images/image_22.png)** 考えてみよう.**
+
+ - プロットしたインパルス応答は、あなたが予想していたものと比較してどうでしょうか?
+ - 物理的には、インパルス応答の長期的な挙動は何を表現しているでしょうか?
+ \item{ 速度伝達関数を定義し、下の(コードを書く)ブロックでインパルス応答を計算しましょう。物理的には、限界動作 (limiting behavior) は何を表しますか? }
+
+```matlab:Code
+% Write your code here
+
+```
+
+# ステップ応答
+
+ステップ入力から生成される出力は、ステップ応答 (step respone) と呼ばれます。
+
+ ![image_23.png](Part1_TransferFunctionBasics_images/image_23.png)
+
+* Response of a system to a step input.*
+
+ステップ応答は時間領域でプロットされます。ステップ応答は、一定の強制力を持続させた場合におけるシステムの応答と考えられます。車両モデルにおいて、モーターを連続的に動作させた場合(一定の牽引力を出力するという仮定)にこのような応答が生じるはずです。
+
+![image_24.png](Part1_TransferFunctionBasics_images/image_24.png)** 考えてみよう.** 単純な車両運動モデルについて考えます。入力関数は牽引力です。
+
+ ![image_25.png](Part1_TransferFunctionBasics_images/image_25.png)
+
+ - 位置伝達関数のステップ応答について、時間領域でプロットしてみてください。
+ - 速度伝達関数のステップ応答について、時間領域でプロットしてみてください。
+
+![image_26.png](Part1_TransferFunctionBasics_images/image_26.png)** 練習問題. **質量が1300kg、摩擦の比例定数 Ns/mである単純な車両について考えます。単純な車両の運動モデルについての伝達関数があることを思い出してください:
+
+
+
+MATLABの`tf`関数を使って伝達関数 `G` を定義し、`step`関数を使ってステップ応答の最初の30秒間をプロットしてください。`step`関数は以下のような記法で使います
+
+` step(sys,Tfinal)`
+
+ただし`sys`は動的システム(ここでは、伝達関数の`G`)で、`Tfinal`はシミュレーションを停止する時間です。
+
+```matlab:Code
+% Write your code here
+
+```
+
+![image_27.png](Part1_TransferFunctionBasics_images/image_27.png)** 考えてみよう.**
+
+ - 求めたステップ応答は、あなたの予測と比べてどうですか?
+ - 初期の過渡的な挙動 (transient behavior) は、どのような物理的作用を反映しますか?
+ - ステップ応答の長期的な挙動は何を反映しますか?
+
+![image_28.png](Part1_TransferFunctionBasics_images/image_28.png)** 練習問題. **先ほど同様、質量が1300kg、摩擦の比例定数 Ns/mである単純な車両について考えます。今度は、位置にかわって速度 を解析します。速度の伝達関数は次のようにかけるのを思い出してください:
+
+
+
+速度の伝達関数についてステップ応答を計算し、これを用いて単位ステップの外力 (forcing) を受けた車両の最大速度を求めてください。
+
+```matlab:Code
+% Write your code here
+
+```
+
+![image_29.png](Part1_TransferFunctionBasics_images/image_29.png)** 考えてみよう.**
+
+ - 気づいているかもしれませんが、単位ステップの外力では、車両の最高速度はたったの0.01m/s(時速約0.022マイル)です。これは、単位ステップでの牽引力が1Nしかなく、1300kgの車体を動かすには到底足りません。
+ - より現実的な応答を作りだすためには、伝達関数に定数をかけることでシステムにゲインを追加し、ステップのレスポンスを再計算します。最大速度 50 m/s(または 112 mph)とするゲイン定数は値はいくらでしょうか?
+ \item{ `gain`は最大速度 50m/s を発生させるゲイン定数とした場合、ステップ応答\texttt{H*gain}を下のコードブロックで計算してください。 }
+ - どのくらいの時間で 0 から 60 mph (0 から 26.8m/s) まで車両は加速しますか?
+
+```matlab:Code
+% Write your code here
+
+```
+
+# インパルス応答とステップ応答の解析的計算
+
+ここまでで、「インパルス応答とステップ応答はどのように計算されるのか?」と思ったかもしれません。MATLABでは、それらの応答は数値的に推定されます。多くの一般的な場合、応答を解析的に導き出すことも可能です。実際の運用場面では解析的な応答を求めることは通常は不要ですが、さらに直感を養うための貴重な練習になります。
+
+インパルス応答またはステップ応答を解析的に解くためには、:
+
+ 1. 入力関数のラプラス変換をとる
+ 1. を解く
+ 1. を(ラプラス)逆変換しての時間領域の応答をとる
+
+1.を手計算で求めるのを避けたい場合、ラプラス変換表や`laplace`関数を利用できます。3.の手順は、変換表やSymbolic Math Toolbox の[`ilaplace`](https://www.mathworks.com/help/symbolic/ilaplace.html) 関数を使って実行できます。
+
+
+
+![image_30.png](Part1_TransferFunctionBasics_images/image_30.png) **例題. **
+
+**(a) **単純な車両モデルについて、位置伝達関数を用いて解析的なインパルス応答を計算しましょう。
+
+**(b)** , とします。解析的なインパルス応答の結果をプロットし、`impulse`関数を用いて求めた解と比較しましょう。
+
+**解答. **
+
+**(a) **単純な車両モデルの位置伝達関数を思い出しましょう:
+
+
+
+まず、入力である外力の関数のラプラス変換を計算します:
+
+
+
+つまり
+
+
+
+ここで、変換表を参照したり、`ilaplace`関数を使って逆ラプラス変換を計算できます。
+
+```matlab:Code
+syms m k positive
+syms s x
+X = 1/(m*s^2 + k*s)
+x = ilaplace(X)
+```
+
+**(b)** `tf`関数によって伝達関数を定義してから、インパルス応答を計算します。
+
+```matlab:Code
+m = 1300;
+k = 100;
+Xs = tf([0 0 1],[m k 0]);
+[x,t] = impulse(Xs);
+```
+
+今度は同じ区間について解析解を計算し、比較した結果をプロットしましょう。
+
+```matlab:Code
+xAnalytic = 1/k - exp(-k*t/m)/k;
+plot(t,x,t,xAnalytic,'--')
+legend("result of impulse", "analytic")
+xlabel("t [s]")
+ylabel("x [m]")
+title("Step response")
+```
+
+![figure_0.png](Part1_TransferFunctionBasics_images/figure_0.png)
+
+![image_31.png](Part1_TransferFunctionBasics_images/image_31.png) **練習問題. **
+
+**(a)** 車両の位置伝達関数の解析的**ステップ**応答を計算しましょう。この単純な車両モデルの位置伝達関数は以下のものであったことを思い出しましょう:
+
+
+
+あらかじめ定義されているシンボリック変数を使って、出力をシンボリック変数`x`に格納してください。
+
+```matlab:Code
+% Use these symbolic variables
+syms m k real
+syms s x
+
+% Compute the symbolic form of the step response and store it in x
+x = NaN
+checkAnalyticStep(x)
+```
+
+**(b)** , とします。(a)で計算した解析的なステップ応答の結果をプロットしてください。`step`関数で計算したステップ応答も同様にプロットしましょう。
+
+```matlab:Code
+% This computes the step response
+m = 1300;
+k = 100;
+Xs = tf([0 0 1],[m k 0]);
+[x,t] = step(Xs,20);
+```
+
+定数`k` と `m`を用いて、解析解を配列 `t`について計算しましょう。結果を`step`関数の出力と一緒にプロットしてください。
+
+```matlab:Code
+% Create your plot here
+
+```
+
+# 強制応答 (forced response)
+
+任意の入力関数 に対するシステムの応答を計算することもできます。
+
+ ![image_32.png](Part1_TransferFunctionBasics_images/image_32.png)
+
+ *Response of a system to a square wave.*
+
+解析的には、 の逆ラプラス変換を計算し、続けての逆ラプラス変換を求めることで、システムの応答を計算することができます。解析的に求められる式が存在しない場合は、 [`lsim`](https://www.mathworks.com/help/control/ref/lti.lsim.html) 関数を用いて数値的に応答を推定できます。
+
+![image_33.png](Part1_TransferFunctionBasics_images/image_33.png) **やってみよう.**
+
+ここでは、バネ-マス-ダンパー系の応答を解析していきます
+
+
+
+バネ-マス-ダンパー系は静止状態から始まり、入力関数で駆動されているとします。
+
+**その1.** ライブスクリプトの挙動に慣れましょう。
+
+ 1. ドロップダウンリストを使って入力関数 `u `を変えて、応答を観察します。
+ 1. バネ-マス-ダンパーのパラメーターと入力周波数を調整し、応答の変化を観察します。
+ 1. "animate"というボックスにチェックを入れると、バネ-マス-ダンパーのアニメーションが表示されるようになります。このアニメーションの表示のオンとオフの切り替えは、この後の作業においても自由に変更可能です。
+
+**その2. ** 共振周波数を求めましょう。
+
+ 1. システムが共振周波数で駆動されると不安定になる現象はよく知られています。`tfinal`を長くしてシミュレーション時間を長くしてみましょう。システムは共振周波数で駆動されていますか?
+ 1. 過渡応答 (transient response) は、駆動周波数とバネ-マス-ダンパーの固有周波数 (natural frequency) という2つの周波数で特徴付けられることに気づくと思います。オシレーターの固有振動数は、駆動(入力)周波数より大きいでしょうか、それとも小さいでしょうか?
+ 1. 入力周波数をバネ-マス-ダンパーの固有周波数と同じになるようにしてください。共振振動 (resonant pscillations) が見られますか?
+ 1. 減衰の値をゼロにしましょう。共振周波数に近い地点では、応答が無制限に大きくなることが観察されるはずです。
+ 1. 別の入力関数を使ってオシレーターを駆動してみてください。入力関数の選択は共振振動に影響を与えていますか?
+
+```matlab:Code
+m = 1; % Default: 1
+c = 0.1; % Default: 0.1
+k = 1; % Default: 1
+freq = 0.25; % Frequency in Hz. Default: 0.25
+tfinal = 30; % Simulation duration. Default: 30
+t = linspace(0,tfinal,500);
+u = sin(2*pi*freq*t).^2;
+animate = false;
+
+
+% Compute and plot the response
+G = tf([0 0 1],[m c k]); % The transfer function
+[x,t] = lsim(G,u,t); % Simulate the response using lsim
+if(~animate)
+ plotResponse(t,u,x) % regular plot
+else
+ animateSingleMSD(t,x,u,0.5,200) % animated response
+end
+```
+
+![image_34.png](Part1_TransferFunctionBasics_images/image_34.png) **練習問題. **この練習問題では、正弦波入力関数に対するバネ-マス-ダンパーの解析的応答を計算し、その結果を`lsim`を使って計算された値と比較します。ここでは、バネ-マス-ダンパーのパラメータを, , とします。伝達関数は次のようになります
+
+
+
+解析解を求める計算は、手計算で行うこともできますし、MATLABのSymbolic Math Toolboxを使用することもできます。シンボリック演算を行うときは、はじめにシンボリック変数を宣言してください。例えば:
+
+```matlab:Code(Display)
+syms f real % Real symbolic variable f
+syms t s % Symbolic variables t and s
+```
+
+**(a) **入力関数のラプラス変換を計算しましょう:
+
+
+
+ただし は定数 (Hz単位での周波数)とします。
+
+```matlab:Code
+% Write your code here
+
+```
+
+**(b)** ラプラス領域における応答の式を求めましょう。
+
+```matlab:Code
+% Write your code here
+
+```
+
+**(c) **の逆ラプラス変換を計算し、時間領域の応答を求めましょう。
+
+```matlab:Code
+% Write your code here
+
+```
+
+**(d)** の解析的応答を区間上で求め、結果をプロットしましょう。
+
+**ヒント**:MATLABのシンボリック演算で を計算した場合、自分で式を書き出して計算する代わりに、[`matlabFunction`](https://www.mathworks.com/help/symbolic/matlabfunction.html) で関数ハンドルに変換し、値を求めることができます。例えば:
+
+```matlab:Code(Display)
+xfunc = matlabFunction(x) % Create a function handle for a symbolic expression x
+xeval = xfunc(freq,t); % Evaluate the function handle based on its input arguments
+```
+
+```matlab:Code
+% Write your code here
+
+```
+
+**(e) **同じ応答について、今度は[`lsim`](https://www.mathworks.com/help/control/ref/lti.lsim.html)関数を使って計算し、解析的な応答と一緒にプロットしてください。
+
+```matlab:Code
+% Write your code here
+
+```
+
+\matlabheading{![image_35.png](Part1_TransferFunctionBasics_images/image_35.png)さらに学びたい人のために}
+
+ - MATLABでの伝達関数の使い方についての紹介ビデオ: [Transfer Functions in MATLAB](https://www.mathworks.com/videos/transfer-functions-in-matlab-100912.html).
+ - バネ-マス-ダンパーについてもっと深く学びたいですか? こちらをご覧ください [Mass-Spring-Damper Systems courseware](https://www.mathworks.com/academia/courseware/mass-spring-damper-systems.html)
+ - MATLAB Tech Talkでシステムの応答についてもっと学びましょう: [Control Systems in Practice, Part 9: The Step Response](https://www.mathworks.com/videos/control-systems-in-practice-part-9-the-step-response-1593067191882.html).
+ - 理論についてもう少し詳しく知りたいですか? Brian Douglasのビデオをどうぞ: [Control Systems Lectures - Transfer Functions](https://www.youtube.com/watch?v=RJleGwXorUk).
+
+**Helper functions**
+
+**Plots**
+
+```matlab:Code
+function plotResponse(t,u,x)
+% This function generates a response plot
+ figure("position",[0 0 1000 300])
+
+ subplot(1,2,1)
+ plot(t,u,"color",[0.7176 0.1922 0.1725],"linewidth",1.5)
+ xlabel("t")
+ ylabel("u(t)")
+ box off
+ axis([t(1),t(end),min(u)-0.2,max(u)+0.2])
+ title("Input function")
+
+ subplot(1,2,2)
+ plot(t,x,"linewidth",1.5,"color",[0 0.4470 0.7410])
+ xlabel("t")
+ ylabel("x(t)")
+ xlim([t(1) t(end)])
+ title("Response")
+ box off
+end
+
+function animateSingleMSD(tin,xin,uin,w,Npoints)
+% Generates an animation of a single mass/spring/damper
+% t: time array
+% x: displacement array
+% w: width of the mass
+
+ % Interpolate to Npoints
+ t = linspace(tin(1),tin(end),Npoints);
+ x = interp1(tin,xin,t);
+ u = interp1(tin,uin,t);
+
+ colors = lines(6);
+ fs = 14;
+
+ % Create plot
+ k = 1;
+ figure("position",[0 0 1500 400]);
+
+ % Setup the figure
+ buffer = 1.2;
+ xrange = max(x) - min(x);
+ xmax = min(x) + xrange*buffer ;
+ xmin = max(x) - xrange*buffer - w*1.5;
+ tlim = [t(1) t(end)];
+ axisLim1 = [tlim(1),tlim(2),xmin,xmax];
+ axisLim2 = [-w*buffer,w*buffer,xmin,xmax];
+ xground = xmin;
+
+ subplot(1,3,1);
+ plot(tin,uin,"color",[0.7176 0.1922 0.1725],"linewidth",1.5)
+ xlabel("$t$ [s]","Interpreter","latex","FontSize",fs)
+ ylabel("$u(t)$ [N]","Interpreter","latex","FontSize",fs)
+ box off
+ axis([t(1),t(end),min(u)-0.2,max(u)+0.2])
+ title("Input function")
+
+ subplot(1,3,2);
+ set(gca, "Clipping","off","Color","none");
+ hold on
+ plot(tin,xin,"k-","color",colors(1,:),"linewidth",1.5);
+ a = plot([0, tlim(2)+(tlim(2)-tlim(1))*4], [x(k),x(k)],"-","color",[colors(4,:),0.5],"linewidth",1.5);
+ b = plot(t(k),x(k),"o","markerfacecolor",colors(2,:),"MarkerSize",8);
+ hold off
+ axis(axisLim1)
+ box off
+ xlabel("$t$ [s]","Interpreter","latex","FontSize",fs)
+ ylabel("$x$ [m]","Interpreter","latex","FontSize",fs)
+ title("displacement response")
+
+ subplot(1,3,3);
+ set(gca, "Clipping","off","Color","none");
+ hold on
+ plot([-w*buffer w*buffer],[xground xground],'k-',"linewidth",1.5);
+ % Plot mass
+ x1 = x(k) - w/2;
+ c = rectangle("Position",[-w/2 x1-w w w],"FaceColor",colors(1,:));
+ % Plot spring
+ xextension = x(k)-w;
+ xs = linspace(xground,xextension,12);
+ ys = w/6*(-1).^(1:numel(xs)) - w/4;
+ d = plot(ys,xs,"k","linewidth",1.5);
+ % Plot damper
+ ydamp = w/4;
+ xdamp1 = xground + (xextension-xground)/2 + w*0.1;
+ xdamp2 = xground + (xextension-xground)/2;
+ xdamp3 = xground + (xextension-xground)/2 + w*0.2;
+ e = plot([ydamp,ydamp,NaN,ydamp-w/10,ydamp+w/10],[xground,xdamp1,NaN,xdamp1,xdamp1],"k","linewidth",1.5);
+ f = plot([ydamp-w*0.15,ydamp-w*0.15,NaN,ydamp+w*0.15,ydamp+w*0.15,NaN,ydamp-w*0.15,ydamp+w*0.15,NaN,ydamp,ydamp],...
+ [xdamp2,xdamp3,NaN,xdamp2,xdamp3,NaN,xdamp3,xdamp3,NaN,xdamp3,xextension],"k","linewidth",1.5);
+
+ hold off
+ axis equal
+ axis(axisLim2)
+ ax = gca;
+ ax.XAxis.Visible = 'off';
+ title("diagram")
+
+ % Create animation
+ for k = 1:length(t)
+ % displacement
+ a.YData = [x(k),x(k)];
+ b.XData = t(k);
+ b.YData = x(k);
+ % mass
+ c.Position = [-w/2,x(k)-w,w,w];
+ xextension = x(k)-w;
+ % spring
+ d.YData = linspace(xground,xextension,12);
+ % damper
+ xdamp1 = xground + (xextension-xground)/2 + w*0.1;
+ xdamp2 = xground + (xextension-xground)/2;
+ xdamp3 = xground + (xextension-xground)/2 + w*0.2;
+ e.YData = [xground xdamp1 NaN xdamp1 xdamp1];
+ f.YData = [xdamp2 xdamp3 NaN xdamp2 xdamp3 NaN xdamp3 xdamp3 NaN xdamp3 xextension];
+ pause(0)
+ end
+ drawnow
+ close all
+end
+```
+
+**Checks**
+
+```matlab:Code
+function correct = isEqualCheck(userSubmission,correctAnswer)
+% This function checks if two results are equal and displays feedback
+ correct = true;
+ if( isequal(userSubmission, correctAnswer) )
+ disp("Correct!")
+ else
+ warning("Your answer does not match the expected result.")
+ correct = false;
+ end
+end
+
+function checkPendulumTF(userSubmission)
+ syms s g l
+ pendulumTF = 1/(s^2 + g/l);
+ isEqualCheck(simplify(sym(userSubmission)),simplify(pendulumTF));
+end
+
+function checkVTF(userSubmission)
+ syms m s k
+ Vtf = 1/(m*s + k) ;
+ isEqualCheck(simplify(sym(userSubmission)),simplify(Vtf));
+end
+
+function checkAnalyticStep(userSubmission)
+ syms m k real
+ syms s x t
+ Us = laplace(heaviside(t));
+ X = 1/(m*s^2 + k*s )*Us;
+ x = ilaplace(X);
+ isEqualCheck(x,userSubmission);
+end
+```
diff --git a/Part1_TransferFunctionBasics.mlx b/Part1_TransferFunctionBasics.mlx
new file mode 100644
index 0000000..fb94229
Binary files /dev/null and b/Part1_TransferFunctionBasics.mlx differ
diff --git a/Part1_TransferFunctionBasicsSoln.mlx b/Part1_TransferFunctionBasicsSoln.mlx
new file mode 100644
index 0000000..6d2f38c
Binary files /dev/null and b/Part1_TransferFunctionBasicsSoln.mlx differ
diff --git a/Part1_TransferFunctionBasics_images/figure_0.png b/Part1_TransferFunctionBasics_images/figure_0.png
new file mode 100644
index 0000000..69175c6
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/figure_0.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_0.png b/Part1_TransferFunctionBasics_images/image_0.png
new file mode 100644
index 0000000..1740634
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_0.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_1.png b/Part1_TransferFunctionBasics_images/image_1.png
new file mode 100644
index 0000000..fcbf577
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_1.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_10.png b/Part1_TransferFunctionBasics_images/image_10.png
new file mode 100644
index 0000000..edbb867
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_10.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_11.png b/Part1_TransferFunctionBasics_images/image_11.png
new file mode 100644
index 0000000..e00cfa0
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_11.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_12.png b/Part1_TransferFunctionBasics_images/image_12.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_12.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_13.png b/Part1_TransferFunctionBasics_images/image_13.png
new file mode 100644
index 0000000..fcbf577
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_13.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_14.png b/Part1_TransferFunctionBasics_images/image_14.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_14.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_15.png b/Part1_TransferFunctionBasics_images/image_15.png
new file mode 100644
index 0000000..23f2282
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_15.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_16.png b/Part1_TransferFunctionBasics_images/image_16.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_16.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_17.png b/Part1_TransferFunctionBasics_images/image_17.png
new file mode 100644
index 0000000..e00cfa0
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_17.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_18.png b/Part1_TransferFunctionBasics_images/image_18.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_18.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_19.png b/Part1_TransferFunctionBasics_images/image_19.png
new file mode 100644
index 0000000..138a703
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_19.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_2.png b/Part1_TransferFunctionBasics_images/image_2.png
new file mode 100644
index 0000000..174c1c0
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_2.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_20.png b/Part1_TransferFunctionBasics_images/image_20.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_20.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_21.png b/Part1_TransferFunctionBasics_images/image_21.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_21.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_22.png b/Part1_TransferFunctionBasics_images/image_22.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_22.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_23.png b/Part1_TransferFunctionBasics_images/image_23.png
new file mode 100644
index 0000000..5bb0f30
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_23.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_24.png b/Part1_TransferFunctionBasics_images/image_24.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_24.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_25.png b/Part1_TransferFunctionBasics_images/image_25.png
new file mode 100644
index 0000000..e00cfa0
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_25.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_26.png b/Part1_TransferFunctionBasics_images/image_26.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_26.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_27.png b/Part1_TransferFunctionBasics_images/image_27.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_27.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_28.png b/Part1_TransferFunctionBasics_images/image_28.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_28.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_29.png b/Part1_TransferFunctionBasics_images/image_29.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_29.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_3.png b/Part1_TransferFunctionBasics_images/image_3.png
new file mode 100644
index 0000000..a8e5c49
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_3.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_30.png b/Part1_TransferFunctionBasics_images/image_30.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_30.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_31.png b/Part1_TransferFunctionBasics_images/image_31.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_31.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_32.png b/Part1_TransferFunctionBasics_images/image_32.png
new file mode 100644
index 0000000..aa866ba
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_32.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_33.png b/Part1_TransferFunctionBasics_images/image_33.png
new file mode 100644
index 0000000..5bfb1f8
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_33.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_34.png b/Part1_TransferFunctionBasics_images/image_34.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_34.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_35.png b/Part1_TransferFunctionBasics_images/image_35.png
new file mode 100644
index 0000000..987094e
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_35.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_4.png b/Part1_TransferFunctionBasics_images/image_4.png
new file mode 100644
index 0000000..c64df82
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_4.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_5.png b/Part1_TransferFunctionBasics_images/image_5.png
new file mode 100644
index 0000000..06241cf
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_5.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_6.png b/Part1_TransferFunctionBasics_images/image_6.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_6.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_7.png b/Part1_TransferFunctionBasics_images/image_7.png
new file mode 100644
index 0000000..138a703
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_7.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_8.png b/Part1_TransferFunctionBasics_images/image_8.png
new file mode 100644
index 0000000..2c150b1
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_8.png differ
diff --git a/Part1_TransferFunctionBasics_images/image_9.png b/Part1_TransferFunctionBasics_images/image_9.png
new file mode 100644
index 0000000..f4c4b6b
Binary files /dev/null and b/Part1_TransferFunctionBasics_images/image_9.png differ
diff --git a/Part2_PoleZeroAnalysis.mlx b/Part2_PoleZeroAnalysis.mlx
new file mode 100644
index 0000000..a054800
Binary files /dev/null and b/Part2_PoleZeroAnalysis.mlx differ
diff --git a/Part2_PoleZeroAnalysisSoln.mlx b/Part2_PoleZeroAnalysisSoln.mlx
new file mode 100644
index 0000000..cb47346
Binary files /dev/null and b/Part2_PoleZeroAnalysisSoln.mlx differ
diff --git a/Part3_FrequencyDomainAnalysis.mlx b/Part3_FrequencyDomainAnalysis.mlx
new file mode 100644
index 0000000..04f8ff1
Binary files /dev/null and b/Part3_FrequencyDomainAnalysis.mlx differ
diff --git a/Part3_FrequencyDomainAnalysisSoln.mlx b/Part3_FrequencyDomainAnalysisSoln.mlx
new file mode 100644
index 0000000..12dbdfc
Binary files /dev/null and b/Part3_FrequencyDomainAnalysisSoln.mlx differ
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..fb24d6e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,97 @@
+# 動的システムの伝達関数解析 (Transfer Function Analysis of Dynamic Systems) [![View Transfer Function Analysis of Dynamic Systems on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://www.mathworks.com/matlabcentral/fileexchange/94635-transfer-function-analysis-of-dynamic-systems)
+**Curriculum Module**
+_Created with R2020b. Compatible with R2020b and later releases._
+
+## 日本語訳について ##
+それぞれのファイルについて、MATLABコードがないファイルとMATLABコードを記述した解答ファイル(末尾にSolnとついているもの)があります。現在、日本語訳はMATLABコードがないファイルのみ翻訳しています(Solnファイルのテキスト部分は英語のままです。テキスト部分の内容は日本語化されたものと同一です)。
+
+## 概要 ##
+
+このカリキュラムモジュールには、動的システムについての伝達関数の解析を学ぶためのインタラクティブな[ライブスクリプト](https://www.mathworks.com/products/matlab/live-editor.html) と[MATLAB® アプリ](https://www.mathworks.com/products/matlab/app-designer.html) が含まれています。最初のスクリプトでは、学生はODEから伝達関数を導出し、インパルス応答、ステップ応答、強制応答を計算することを学びます.続くスクリプトでは、極-零点プロットと周波数領域の解析を行います.このモジュール全体を通して,生徒は伝達関数を応用して物理的および電気的システムの力学を解析します.最後のレッスンでは、降圧コンバータ内のLCフィルタの周波数領域解析を行います。また、ラプラス変換の復習も含まれているので、再確認することができます。これらのレッスンは、講義の一部として、あるいは教育現場での実習として、あるいは授業外のインタラクティブな課題として使用することができます。
+
+ライブスクリプト内の説明に沿って練習問題や課題を進めていくことができます。各ライブスクリプトを 1 セクションずつ実行することから始めてください。スクリプトまたはセクションの実行を途中で停止するには(たとえば、アニメーションの進行中など)、MATLABツールストリップのLive EditorタブのRUNセクションにあるStopボタンを使用します。
+
+## お勧めの事前演習 ##
+[MATLAB入門](https://www.mathworks.com/learn/tutorials/matlab-onramp.html) – MATLABの基礎について2時間で学べる無料のオンラインコース。
+[MATLAB によるシンボリック計算](https://www.mathworks.com/learn/tutorials/introduction-to-symbolic-math-with-matlab.html) – MATLABのシンボリック演算について学ぶための2時間の自学自習形式のコース。Online Training Suiteのライセンスをお持ちの方(大学の包括ライセンスなど、ご利用中のライセンスに含まれている場合があります)のみ利用可能です。
+
+## 詳細 ##
+**`Part0_ConceptReview.mlx, Part0_ConceptReviewSoln.mlx`**
+ラプラス変換について復習するインタラクティブな授業。
+
+
+
+**学習到達目標:**
+- 手計算とシンボリック演算でラプラス変換を計算する
+- ラプラス変換の性質を説明する
+- 初期値問題を解くためにラプラス変換を用いる
+- 線形時不変(LTI)作用素の定義を復習する
+
+## ##
+**`Part1_TransferFunctionBasics.mlx, Part1_TransferFunctionBasicsSoln.mlx`**
+伝達関数の導出と時間応答について、解析的に求めたりMATLABで計算する方法を学ぶインタラクティブな授業。
+
+
+
+**学習到達目標:**
+- 伝達関数を手計算で求める
+- シンボリック演算を使って伝達関数を求める
+- システムのインパルス応答、ステップ応答、強制応答を数値的に計算してプロットできる
+- システムのステップ応答と強制応答を解析的に求めることができる
+- 時間応答の物理的な意味づけを説明することができる
+
+## ##
+**`Part2_PoleZeroAnalysis.mlx, Part2_PoleZeroAnalysisSoln.mlx`**
+(未翻訳)極-零解析について学ぶ授業。
+
+## ##
+**`Part3_FrequencyDomainAnalysis.mlx, Part3_FrequencyDomainAnalysisSoln.mlx`**
+
+(未翻訳)
+伝達関数を使った周波数領域解析が学べるインタラクティブな授業。
+
+## ##
+**`polesApp.mlapp`**
+
+極とゼロをグラフィカルに配置することで伝達関数をつくることができるMATLABアプリです。インパルス応答とステップ応答を計算し、プロットすることもできます。
+
+## 利用製品 ##
+MATLAB, Symbolic Math Toolbox™, Control System Toolbox™
+
+## ライセンス ##
+このモジュールのライセンスについては、リポジトリの [LICENSE.TXT](license.txt) をご覧ください。
+
+## Educator Resources ##
+* [Featured Courseware](https://www.mathworks.com/academia/courseware/course-materials.html)
+* [Teach with MATLAB and Simulink](https://www.mathworks.com/academia/educators.html)
+* [MATLAB Grader](https://www.mathworks.com/products/matlab-grader.html)
+
+ご質問やご感想は MathWorks online teaching teamまでお願いいたします。日本語での対応をご希望の場合、カスタマーサクセスエンジニアまでご連絡ください。
+
+# #
+
+_Copyright 2022 The MathWorks, Inc._
diff --git a/README_en.md b/README_en.md
new file mode 100644
index 0000000..d810c5c
--- /dev/null
+++ b/README_en.md
@@ -0,0 +1,85 @@
+# Transfer Function Analysis of Dynamic Systems [![View Transfer Function Analysis of Dynamic Systems on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://www.mathworks.com/matlabcentral/fileexchange/94635-transfer-function-analysis-of-dynamic-systems)
+**Curriculum Module**
+_Created with R2020b. Compatible with R2020b and later releases._
+
+## Description ##
+This curriculum module contains interactive [live scripts](https://www.mathworks.com/products/matlab/live-editor.html) and a [MATLAB® app](https://www.mathworks.com/products/matlab/app-designer.html) that teach transfer function analysis of dynamic systems. In the first script, students learn to derive transfer functions from ODEs and compute impulse, step, and forced responses. In subsequent scripts, students perform pole-zero and frequency domain analyses. Throughout the module, students apply transfer functions to analyze the dynamics of physical and electrical systems. In the final lesson, students perform a frequency domain analysis of an LC filter in a buck converter. A review of Laplace transforms is also included for students seeking a refresher. These lessons can be used as part of a lecture, as activities in an instructional setting, or as interactive assignments to be completed outside of class.
+
+The instructions inside the live scripts will guide you through the exercises and activities. Get started with each live script by running it one section at a time. To stop running the script or a section midway (for example, when an animation is in progress), use the Stop button in the RUN section of the Live Editor tab in the MATLAB Toolstrip.
+
+## Suggested Prework ##
+[MATLAB Onramp](https://www.mathworks.com/learn/tutorials/matlab-onramp.html) – a free two-hour introductory tutorial that teaches the essentials of MATLAB.
+[Introduction to Symbolic Math with MATLAB](https://www.mathworks.com/learn/tutorials/introduction-to-symbolic-math-with-matlab.html) – a two-hour self-paced introductory course that teaches the basics of symbolic mathematics in MATLAB. Note that this course is only available to users with access to the Online Training Suite.
+
+## Details ##
+**`Part0_ConceptReview.mlx, Part0_ConceptReviewSoln.mlx`**
+An interactive lesson that reviews Laplace transforms.
+
+
+
+**Learning Goals:**
+- Compute Laplace transforms by hand and using symbolic math
+- Describe the properties of the Laplace transform
+- Apply Laplace transforms to solve initial value problems
+- Recall the definition of a linear time-invariant (LTI) operator
+
+## ##
+**`Part1_TransferFunctionBasics.mlx, Part1_TransferFunctionBasicsSoln.mlx`**
+An interactive lesson that teaches how to derive transfer functions and compute time responses analytically and in MATLAB.
+
+
+
+**Learning Goals:**
+- Derive transfer functions by hand
+- Derive transfer functions using symbolic math
+- Numerically evaluate and plot the impulse, step, and forced responses of a system
+- Analytically derive the step and forced responses of a system
+- Explain the physical significance of time responses
+
+## ##
+**`Part2_PoleZeroAnalysis.mlx, Part2_PoleZeroAnalysisSoln.mlx`**
+A live script lesson that teaches pole-zero analysis.
+
+
+
+**Learning Goals:**
+- Describe how the transfer function of a DC motor is derived
+- Identify the poles and zeros of a transfer function
+- Assess the stability of an LTI system based on the transfer function poles
+- Relate the position of poles in the s-plane to the damping and natural frequency of a system
+- Explain how poles of a second-order system relate to its dynamics
+- Examine how transfer function zeros affect the dynamics of a system
+
+## ##
+**`Part3_FrequencyDomainAnalysis.mlx, Part3_FrequencyDomainAnalysisSoln.mlx`**
+An interactive lesson that teaches frequency domain analysis using transfer functions.
+
+
+
+**Learning Goals:**
+- Explain how a Bode plot is generated
+- Use MATLAB to numerically calculate the frequency response of a transfer function
+- Discuss how features of the Bode plot relate to characteristics of physical systems
+- Describe how to derive a differential equation model for a buck converter with an LC filter
+- Apply the Bode plot to analyze an LC filter in a buck converter
+
+## ##
+**`polesApp.mlapp`**
+A MATLAB app that lets you construct a transfer function by graphically positioning the poles and zeros. You can also compute and plot the impulse and step responses.
+
+## Products ##
+MATLAB, Symbolic Math Toolbox™, Control System Toolbox™
+
+## License ##
+The license for this module is available in the [LICENSE.TXT](license.txt) file in this GitHub repository.
+
+## Educator Resources ##
+* [Featured Courseware](https://www.mathworks.com/academia/courseware/course-materials.html)
+* [Teach with MATLAB and Simulink](https://www.mathworks.com/academia/educators.html)
+* [MATLAB Grader](https://www.mathworks.com/products/matlab-grader.html)
+
+Have any questions or feedback? Contact the MathWorks online teaching team.
+
+# #
+
+_Copyright 2021 The MathWorks, Inc._
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..221952e
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,6 @@
+# Reporting Security Vulnerabilities
+
+If you believe you have discovered a security vulnerability, please report it to
+[security@mathworks.com](mailto:security@mathworks.com). Please see
+[MathWorks Vulnerability Disclosure Policy for Security Researchers](https://www.mathworks.com/company/aboutus/policies_statements/vulnerability-disclosure-policy.html)
+for additional information.
\ No newline at end of file
diff --git a/license.txt b/license.txt
new file mode 100644
index 0000000..aeba207
--- /dev/null
+++ b/license.txt
@@ -0,0 +1,7 @@
+Copyright (c) 2021, The MathWorks, Inc.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+3. In all cases, the software is, and all modifications and derivatives of the software shall be, licensed to you solely for use in conjunction with MathWorks products and service offerings.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/polesApp.mlapp b/polesApp.mlapp
new file mode 100644
index 0000000..bf00723
Binary files /dev/null and b/polesApp.mlapp differ