今回は複数の条件を指定してモンテカルロ解析を行う方法について解説しています。
モンテカルロ解析自体が”複数の部品に対して行う解析”なので、少し言葉がややこしいですね。
簡潔に解析していきます。
複数の条件を指定してモンテカルロ解析を行う
今回やりたいことは、複数の部品に対して複数の条件を指定してシミュレーションを行う、ということです。
頻繁に使用する受動部品にはコンデンサと抵抗がありますが、抵抗値の許容誤差±5%程度で、コンデンサの許容誤差は±20%であることが多く、許容範囲が大きくことなります。
今回はこれらの誤差範囲がことなる部品たちに対して同時に揺らしてシミュレーションをしたかったということです。
キャパシタと抵抗をそれぞれの条件で解析する
それでは実際に試していきたいと思います。
今回は以下の回路を用います。
一般的な1石トランジスタによる電流帰還バイアス回路です。
KosakaLabさんのKiCad Basicsを勉強中でしたので同じ回路を使用させていただきます。

上記の回路図では、C1とC2について任意の値を設定するような表示がされています。
C1とC2だけについてモンテカルロ解析するには一般的な記述で大丈夫ですが、ここでR1~R4についても同時にモンテカルロ解析することを考えます。
つまり、以下のように変更します。

変数が、x1、x2、x3、x4、c1、c2、の6つになりました。
これについて、抵抗値の許容誤差を±5%で、コンデンサの許容誤差を±20%にしてモンテカルロ解析を行う場合、以下のようにコマンドを記述します。

ここで注意点は2つです。
一つ目はくり返し動作をさせるための仮の変数であるnについてですが、同じものを異なる誤差を設定した素子に対して使いまわすとエラーが出るので、抵抗では ”n”、コンデンサでは ”n2” と定義しています。
二つ目は誤差を設定するための変数 "tol" ですが、抵抗では±5%、コンデンサでは±20%にしたので、それぞれ "tol"、 "tol2"と二つ定義しています。
異なる条件を同時に使用する際は、繰り返しの ”n” と誤差の ”tol” の名前を新しく変える!
以上を設定した上でシミュレーションを行うと以下のような波形が出力されます。

今回抵抗値について20回、コンデンサについて20回の解析を行うこととしていたので、20×20の計400回の計算結果(グラフ)が表示されています。
設定によっては計算時間が非常に長くなってしまうので注意した方がいいですね。
tol、nの名前を変えてもよいのか
一般的なモンテカルロ解析では繰り返しを”n”、誤差の量を”tol”で定義していますが、これ名前変えても大丈夫なの、ということだけ確かめておきました。
抵抗について、x1、x2、x3、x4のモンテカルロ解析を、以下の二つでやってみましたが同じ結果になりました。
n、tol の場合


n2、tol2 の場合


画像を拡大すればわかりますが、同じ結果になっています。
まとめ
今回は複数の素子に対して複数の条件を指定してシミュレーションを行う方法について解説してみました。
結論としてはnとtolは構文さえ合っていれば名前を変えても動作するので複数で指定できるということですね。
シミュレーション時間が増えすぎないようにシミュレーション回数を低めに抑えなければならない問題点はありますが、全体を通して検証できるので結構いいかもしれないです。
それでは。