MATLAB つかいませんか (File-3)
--- MATLAB を使うための ABC --- 応用3 (回路応答を symbolic に求める) |
---|
目次
|
数字の取り扱い
以上示したように,MATLAB の数値計算は,様々な精度で行えます。 ただし,桁数の増加は計算時間も増加します。 素早く計算させたいなら,標準の計算をしましょう。 シンボリックな変数>> syms x y 最初にこのように宣言すると,x と y は文字のまま式で使えます。 >> f=(x-y)*(x+y)*(x^2-y^2) f = (x+y)*(x-y)*(x^2-y^2) >> g=f-y^4 g = (x+y)*(x-y)*(x^2+y^2)+y^4 >> h=simplify(g) h = x^4-2*x^2*y^2 >> pretty(h) 4 2 2 x - 2 x y以上のように,関数 f, g, h は x, y を含んだ文字式です。 なお,simplify は約分等を行う関数となり, pretty は数学の常識的な形式の出力関数です。 なお,simplify のような数式を別の表現に変換する関数には, collect, expand, horner, factor, simple などもあります。 それでは,こうして得られた関数に具体的な数値を代入しよう。 >> u=subs(h,x,2) u = 16-8*y^2 >> v=subs(h,y,2) v = x^4-8*x^2 >> subs(u,y,2) ans = -16 >> subs(h, {x,y}, {1,2} ) ans = -7 >> subs(g,y,x) ans = -x^4 以上のように,関数 subs により変数の値を代入して式を計算できます。 一度に多数の変数へ代入することもできます。 また,数値だけでなく,別の変数を代入することもできます。 微積分も可能です。なお,積分では区間を区切った計算も行えます。 >> diff(h,x) ans = 4*x^3-4*x*y^2 >> int(h,x) ans = 1/5*x^5-2/3*x^3*y^2 >> int(h,x,0,1) ans = 1/5-2/3*y^2 |
Solve 関数Solve 関数を使うと,方程式を解くことができます。 連立方程式も可能です。 ただし,数式内で使う変数は,シンボリックであることを宣言することが必要です。例 >> syms x >> kai=solve('0.5=x^2','x') kai = [ -.70710678118654752440084436210485] [ .70710678118654752440084436210485] 回路理論への応用上記の回路について,ib と i2 を,方程式を立てて解いて見ましょう。 ただし,トランジスタは右図の通りとします。 なお,βについては B という変数で代用しました。 (Bは他に「ベース端子」という意味で図にありますが,混同しないように) >> clear >> syms i2 ib B r1 r2 re vcc vbe >> S=solve('vcc=r1*(i2+ib)+r2*i2','vcc=r1*(i2+ib)+vbe+re*(1+B)*ib','ib','i2') S = i2: [1x1 sym] ib: [1x1 sym] >> S.i2, S.ib ans = (r1*vbe+re*B*vcc+re*vcc)/(r1*r2+re*r1+re*r2+re*B*r1+re*B*r2) ans = -(r1*vbe+r2*vbe-vcc*r2)/(r1*r2+re*r1+re*r2+re*B*r1+re*B*r2) >> pretty(S.i2), pretty(S.ib) r1 vbe + re B vcc + re vcc ----------------------------------------- r1 r2 + re r1 + re r2 + re B r1 + re B r2 r1 vbe + r2 vbe - vcc r2 - ----------------------------------------- r1 r2 + re r1 + re r2 + re B r1 + re B r2こうして得られた解 (S.i2 と S.ib) について,具体的な値を求めたいなら, 各変数に値を代入することです。 次に「代入」の操作法を示します。 なお,ここでは抵抗は kΩ,電流は mA を単位として計算しましょう。 >> subs(S.i2,{B,r1,r2,re,vcc,vbe},{200,20,3.5,1,12,0.7}) ans = 0.5061 >> subs(S.ib,{B,r1,r2,re,vcc,vbe},{200,20,3.5,1,12,0.7}) ans = 0.0053 |