Scilabで化学反応

私の練習のためにScilabで微分方程式による物理現象のモデル化(PDF)の問題を順番に解いてきました。最早、基本的な常微分方程式ならその物理的な背景を理解していなくてもルーチンワークでプログラムを書くだけで計算できてしまいます。

今回は、可逆反応と非可逆反応の反応が進む様子をシミュレーションします。

001_20130802112714a35.jpg

Fig.1: 化学反応は反応物質の数に依存して反応速度が異なる。また、可逆反応と非可逆反応では反応速度を表す微分方程式の形が異なる。画像は(c)GLOBALHAWK90



非可逆反応


非可逆な化学反応とは、反応する化学物質
非可逆反応の微分方程式とその解析解をプロットするScilabプログラムを作成します。

常微分方程式:
\frac{\mathrm{d}x}{\mathrm{d}t} = k(a-x)(b-x)

解析解:
x(t) = \begin{cases}ab\frac{\exp(gt) -\exp(-gt)}{a\exp(gt)-b\exp(-gt)} & (a > b) \\a - \frac{1}kt-\frac{1}{a}} & (a = b)\end{cases}

プログラムはunreversible_sce.txtです。

002_201308021127143ec.png

Fig.2: 非可逆反応の計算結果。


clear;

// ************************************
//
// 共通部分
//
// ************************************
// *** 入力パラメータ ***
a = 1;
k1 = input("k1 = ");
k2 = input("k2 = ");
// 時間ベクトル
T = linspace(0,10);

// ************************************
//
// 数値解
//
// ************************************
// 解くべき微分方程式
function dx = unreversible(t,x)
dx = k1 * (a - x) ^ 2 - k2 * x;
endfunction
// 初期値
x0 = 0;
// 微分方程式の数値解
X = ode(x0,0,T,unreversible);

// ************************************
//
// 解析解
//
// ************************************
b1 = (2 * a + k2 / k1 + sqrt(4 * a * k2 / k1 + (k2 / k1) ^ 2)) / 2;
b2 = (2 * a + k2 / k1 - sqrt(4 * a * k2 / k1 + (k2 / k1) ^ 2)) / 2;
d = sqrt(4 * a * k2 / k1 + (k2 / k1) ^ 2);
Xa = b2 * (exp(k1 * d * T) - 1) ./ (exp(k1 * d * T) - b2 / b1);

// ************************************
//
// プロット
//
// ************************************
plot(T,X,'or');
plot(T,Xa,'-g');
xtitle(strcat(["Chemical Reaction: ","a = ",string(a),", k1 = ",string(k1),", k2 = ",string(k2)]));
xlabel("$t [s]$");
ylabel("$N_x$");
legend(["Numerical","Analytical"],4);


可逆反応


可逆反応の微分方程式と解析解をプロットするScilabプログラムを作成します。

常微分方程式:
\frac{\mathrm{d}x}{\mathrm{d}t} = k_1 (a-x)^2 - k_2 x

解析解:
x(t) = b_2 \frac{\exp(k_1 \Delta b t)-1}{\exp(k_1 \Delta b t) - \frac{b_2}{b_1}}

ただし
b_1 = \frac{2a+\frac{k_2}{k_1} + \sqrt{4a\frac{k_2}{k_1}+\left(\frac{k_2}{k_1} \right)^2}}{2}

b_2 = \frac{2a+\frac{k_2}{k_1} - \sqrt{4a\frac{k_2}{k_1}+\left(\frac{k_2}{k_1} \right)^2}}{2}

\Delta b = b1 - b2 = \sqrt{4a\frac{k_2}{k_1}+\left(\frac{k_2}{k_1} \right)^2}


プログラムはbalanced_sce.txtです。

003_20130802112714957.png

Fig.3: 可逆反応の計算結果。


clear;

// ************************************
//
// 共通部分
//
// ************************************
// *** 入力パラメータ ***
a = 1;
b = input("b = ");
k = input("k = ");
// 時間ベクトル
T = linspace(0,10);

// ************************************
//
// 数値解
//
// ************************************
// 解くべき微分方程式
function dx = balanced(t,x)
dx = k * (a - x) * (b - x);
endfunction
// 初期値
x0 = 0;
// 微分方程式の数値解
X = ode(x0,0,T,balanced);

// ************************************
//
// 解析解
//
// ************************************
g = (a - b) / 2 * k;
if a == b then
Xa = a - 1 ./ (k .* T + 1 / a);
else
Xa = a * b * (exp(g * T) - exp(- g * T)) ./ (a * exp(g * T) - b * exp(- g * T));
end

// ************************************
//
// プロット
//
// ************************************
plot(T,X,'or');
plot(T,Xa,'-g');
xtitle(strcat(["Chemical Reaction: ","a = ",string(a),", b = ",string(b),", k = ",string(k)]));
xlabel("$t [s]$");
ylabel("$N_c$");
legend(["Numerical","Analytical"],4);


常微分方程式の数値解法


以下の通り、これまで微分方程式による物理現象のモデル化(PDF)に倣って、Scilabで常微分方程式の数値解法を扱ってきました。



2013年の更新はこれにて終了です。特にひねりは無いですが、来年は量子力学の問題から行こうと思います。
ただし、量子力学以降は単純な常微分方程式ではありません。常微分方程式は(ある意味何も考えずに)常微分方程式ソルバodeを使うだけで計算できてしまいますが、偏微分方程式は全自動で解いてくれるソルバが存在しないので少し考える必要があります。

元PDFには、(遍微分方程式ではない)普通の常微分方程式の問題として電子回路関係が残っていますが、LTspiceを使えば極めて簡単に計算できる回路をわざわざプログラム書きたくないという思いがあり、やる気がおきないです。

それでは、良いお年を。(と、予約投稿なので、書いている今はまだ7月なのですが。)

参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode 化学反応 

Scilabで荷電粒子の三次元運動

微分方程式による物理現象のモデル化(PDF)の直交電磁界中の荷電粒子のプログラムをScilabで再現します。
元PDFでも指摘されている通り、計算そのものよりも三次元的にプロットするほうが本題だと思います。

001_20130729175916.png

Fig.1: 荷電粒子の三次元運動。三次元プロットしたものとx-y平面にプロットしたもの。x-y平面にプロットしても実際の運動の様子はいまいち良く分からない。


また、元PDFではz方向の磁界とy方向の電界をパラメータとするプログラムを書いていますが、それ以外の方向にも書けるようにしておきます。


解くべき微分方程式は以下のように示されます。

\frac{\mathrm{d}\vec{v}}{\mathrm{d}t} = \frac{q}{m} \vec{E} + \frac{q}{m} \vec{v}\times\vec{B}

Scilabのode関数で解くためには dX/dt = ...の形にします。要素が増えると分かり辛くなるので、ベクトルの中での順番が分かりやすいように要素を書き下します。

3200cfe9f5356627aee923664d453908_90_black.png

次に微分方程式もベクトルの要素を書き出します。

\frac{\mathrm{d}}{\mathrm{d}t}\begin{pmatrix}v_x \\v_y \\v_z\end{pmatrix}&=\frac{q}{m}\begin{pmatrix}E_x \\E_y \\E_z\end{pmatrix}+\frac{q}{m}\begin{pmatrix}v_x \\v_y \\v_z\end{pmatrix}\times\begin{pmatrix}B_x \\B_y \\B_z\end{pmatrix}\\&=\frac{q}{m}\begin{pmatrix}E_x \\E_y \\E_z\end{pmatrix}+\frac{q}{m}\begin{pmatrix}v_y B_z - v_z B_y \\v_z B_z - v_x B_z \\v_x B_y - v_y B_x\end{pmatrix}

これを踏まえたScilabのプログラムがemdrift_sce.txtです。
Scilabでカオスアトラクタではplot3d3を使いましたが、これは三次元曲面を描く命令で、三次元空間に曲線を引くのはparam3dで行うのが良いようです。

clear;

// *** 入力パラメータ ***
m = 1.0; // 粒子の質量
q = 1.0; // 粒子の電荷
// 一様磁界
bx = 0;
by = 0;
bz = 3.0;
// 一様電解
ex = 0;
ey = 1.5;
ez = 0;

// *** 解くべき常微分方程式の定義 ***
function dx = em(t,x)
// dx/dt = vx
dx(1) = x(2);
// dy/dt = vy
dx(3) = x(4);
// dz/dt = vz
dx(5) = x(6);
// dvx/dt = (q/m) * Ex + (q/m) * (vy*Bz-vz*By)
dx(2) = q * ex / m + q * (x(4) * bz - x(6) * by) / m;
// dvy/dt = (q/m) * Ey + (q/m) * (vz*Bx-vx*Bz)
dx(4) = q * ey / m + q * (x(6) * bx - x(2) * bz) / m;
// dvz/dt = (q/m) * Ez + (q/m) * (vx*By-vz*Bx)
dx(6) = q * ez / m + q * (x(2) * by - x(4) * bx) / m;
endfunction

// 時間ベクトル
T = linspace(0,20,201);

// 初期条件
x0 = 0;
vx0 = - 1;
y0 = 0;
vy0 = 0;
z0 = 0;
vz0 = 0.5;
X0 = [x0; vx0; y0; vy0; z0; vz0];

// 常微分方程式ソルバ
X = ode(X0,0,T,em);

// グラフのプロット
param3d(X(1,:),X(3,:),X(5,:),,flag=[5,4],ebox=[-5,5,-5,5,0,10]);
param3d(X(1,:),X(3,:),zeros(X(5,:)),flag=[5,4],ebox=[-5,5,-5,5,0,10]);
xlabel("x");
ylabel("y");
zlabel("z");



関連エントリ




参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode 三次元 

Scilabでおもりの吊り下げ

順番に行くならば、微分方程式による物理現象のモデル化(PDF)の次の問題は3個の質点の吊り下げ問題です。

001_20130729204658.png
図35 3個のおもりの吊り下げ


図35に示したように,3個のおもりが,4本のいとでつながれ,天井からつり下げられている.この時の,4本の糸にかかる張力と糸が水平面となす角度Ti(i=1,2,3,4)を求めなさい.


これは、いままでのような常微分方程式を解くものではなく、非線形連立方程式の数値解を求める問題です。
微分方程式による物理現象のモデル化(PDF)では自分で非線形方程式ソルバのプログラムをしていますが、ScilabやOctaveには非線形連立方程式の数値解を求めるための命令fsolveが実装されているので、実は簡単に数値解を求めることが出来ます。

著者の方もこのことに気づいたようでOctaveの精義では、ほとんど同じ問題がfsolveで計算されています。
したがって、今回はOctaveの精義のほうに倣ってfsolveで解くことにします。

今回は、この問題をScilabのfsolveを利用して解く事を考えます。
さらに、おもりの数が増えたり減ったりしたときも計算できるようにn個のおもりをつるしたときの計算が出来るようにします。


非線形連立方程式


解くべき方程式は力のつりあい、x方向とy方向の距離から以下連立方程式が得られます。

T_i \cos\theta_i - T_{i+1} \cos\theta_{i+1} = 0

T_i \sin\theta_i - T_{i+1} \sin\theta_{i+1} - W_i = 0

\sum_{i=1}^n L_i \cos\theta_i - L = 0

\sum_{i=1}^n L_i \sin\theta_i = 0

おもりの数がn個のとき、方程式は2n+2個、求める変数も張力Tiがn+1個と角度θiがn+1個でやはり計2n+2個になります。

プログラムを書く上では「2種類の変数がn+1個ずつ(つまりn+1個の要素を持つベクトル2つ)」というよりも「2n+2個の要素を持つベクトル1つ」のほうが都合が良いのでθiとTiをまとめて実数ベクトルZで以下のようにあらわすことにします。

\theta_i = Z_i

T_i = Z_{(n+1)+i}

行列の形に書き下すと

Z = \begin{pmatrix}Z_1 \\Z_2 \\\vdots \\Z_{n+1} \\Z_{n+2} \\Z_{n+3} \\\vdots \\Z_{2n+2}\end{pmatrix}=\begin{pmatrix}\theta_1 \\\theta_2 \\\vdots \\\theta_{n+1} \\T_{1} \\T_{2} \\\vdots \\T_{n+1}\end{pmatrix}

プログラムを書くときにミスしがちなので、解くべき方程式も丁寧に置き換えて書き直します。

Z_{(n+1)+i}\cos Z_i - Z_{(n+1)+(i+1)}\cos Z_{i+1} = 0

Z_{(n+1)+i}\sin Z_i - Z_{(n+1)+(i+1)}\sin Z_{i+1} - W_i = 0

\sum_{i=1}^{n}L_i\cos Z_i - L = 0

\sum_{i=1}^{n}L_i\sin Z_i = 0

数値計算


以上を踏まえて作成したプログラムがmass_sce.txtです。

002_20130729204658.png

Fig.2: 計算結果。糸の長さはL1=L2=L3=1,L4=3,L=4。おもりの重さはW1=W2=1, W2=2


clear;

// *** 入力パラメータ ***
// おもりの数
n = 3;

// おもりの重さ
for i = 1:n do
W(i) = input(strcat(["W",string(i)," = "]));
end
// 水平方向の距離
l = input("L = ");
// 糸の長さ
for i = 1:(n + 1) do
L(i) = input(strcat(["L",string(i)," = "]));
end

// *** 解くべき連立方程式 ***
function R = f(Z)
R(1:n) = Z(n+2:2*n+1) .* cos(Z(1:n)) - Z(n+3:2*n+2) .* cos(Z(2:n+1));
R(n+1:2*n) = Z(n+2:2*n+1) .* sin(Z(1:n)) - Z(n+3:2*n+2) .* sin(Z(2:n+1)) - W(1:n);
R(2*n+1) = sum(L .* cos(Z(1:(n+1)))) - l;
R(2*n+2) = sum(L .* sin(Z(1:(n+1))));
endfunction
// 初期値
Q0 = ones(2*n+2,1);
Q0(n+1) = -1;
// 非線形方程式ソルバ
Q = fsolve(Q0,f);

// *** おもりの位置の計算とプロット ***
DX = L .* cos(Q(1:n+1));
DY= - L .* sin(Q(1:n+1));
X(1) = DX(1);
Y(1) = DY(1);
for i = 2:n do
X(i) = X(i-1) + DX(i);
Y(i) = Y(i-1) + DY(i);
end
// 縦横比を等しくする
h = scf(); // ウィンドウを作成
ha = h.children(1); // Axes(座標軸)オブジェクトへのハンドルを取得
ha.isoview = "on"; // 座標軸の縦横比を等しくする
ha.data_bounds = [0,-1 * ceil(max([abs(Y);l])); ceil(max([abs(Y);l])),0]; // 座標軸表示範囲の設定
// データのプロット
plot([0;X;l],[0;Y;0]);
plot(X,Y,'or','markersize',10);

180*(Q(1:n+1))/%pi


関連エントリ




参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 非線形方程式ソルバ 

Scilabでラザフォード散乱

微分方程式による物理現象のモデル化(PDF)に従ってラザフォード散乱のプログラムをScilabで書き直します。

001_20130729024531.png

Fig.1: ラザフォード散乱のシミュレーション結果の中心部分を拡大したもの。



点電荷によるα粒子の散乱


前期量子力学の重要な結論の一つに、原子はほとんど「すかすか」で質量と正の電荷は原子の中心の極めて狭い領域に集中しているというラザフォードの原子模型があります。このことを明らかにした実験がラザフォード散乱です。原子の構造に関しては九州大学のインターネット・セミナーミクロの世界」 - その1 - (原子の世界の謎) 第2部: 原子の構造が分かりやすいです。以下のトムソンの原子模型とラザフォードの原子模型の図も上記サイトから引用しました。このインターネットセミナーは書籍にもなっているようです(わかりやすい量子力学入門―原子の世界の謎を解く)。

Atom.png


金の原子核が金原子の大きさとくらべて充分小さく大きさが無視できると仮定すると、金原子はZAuの正の電荷を持つ点電荷であると考えることが出来ます。この金原子に5.3MeVのエネルギーを持つα粒子に作用するクーロン力は、金の原子核を局座標の原点に置くと、以下のようにあらわされます。

f = \frac{Z_{\alpha}Z_{\mathrm{Au}}e^2}{4 \pi \epsilon_0}\frac{1}{r^2}

たいそうな形をしていますが、r以外は全て定数です。つまり、クーロン力は金の原子核の距離だけで決まり、その大きさは距離の二乗に反比例します。

002_20130729024531.png

Fig.2: クーロン力


クーロン力のx成分とy成分はそれぞれ以下のようにあらわせます。

f_x = f \cos\theta = f\frac{x}{r}

f_y = f \sin\theta = f\frac{y}{r}

これらを運動方程式へ代入し、両辺をα粒子の質量mαで割ると

\frac{\mathrm{d}^2x}{\mathrm{d}t^2} = \frac{Z_{\alpha}Z_{\mathrm{Au}}e^2}{4 \pi \epsilon_0 m_{\alpha}}\frac{x}{r^3}

\frac{\mathrm{d}^2y}{\mathrm{d}t^2} = \frac{Z_{\alpha}Z_{\mathrm{Au}}e^2}{4 \pi \epsilon_0 m_{\alpha}}\frac{y}{r^3}

x,y,r以外は定数なので適切な単位系を設定すると

\frac{Z_{\alpha}Z_{\mathrm{Au}}e^2}{4 \pi \epsilon_0 m_{\alpha}} = 0.0614

となります。なお、微分方程式による物理現象のモデル化(PDF)には数値が書かれていませんが、α粒子の質量は陽子2つと中性子2つでmα=3756[MeV/c2]です。

プログラム


以上を踏まえたプログラムを以下に示します。
これによって描かれた図がFig1およびFig.3です。

003_20130729024530.png

Fig.3: ラザフォード散乱


clear;
// 表示領域のサイズ
//xymax = 2000; // 表示領域を2000*2000に設定
xymax = 400; // 表示領域を400*400に設定
// グラフの縦横比を等しくする
h = scf(); // ウィンドウを作成
ha = h.children(1); // Axes(座標軸)オブジェクトへのハンドルを取得
ha.isoview = "on"; // 座標軸の縦横比を等しくする
ha.data_bounds = [- xymax,- xymax; xymax, xymax]; // 座標軸表示範囲の設定

// *** 解くべき常微分方程式 ***
function dx = ruther(t,x)
r = sqrt(x(1) ^ 2 + x(3) ^ 2);
dx(1) = x(2);
dx(2) = 0.0614 * x(1) / r ^ 3;
dx(3) = x(4);
dx(4) = 0.0614 * x(3) / r ^ 3;
endfunction

// *** 時間ベクトル ***
T = linspace(0,100000,1000);

// *** α粒子の初速度 ***
v0 = 0.053;
vx0 = v0;
vy0 = 0;

// *** α線源の位置 ***
// x座標
x0 = - 2000;

// y座標を変えながらα粒子の運動を計算
for y0 = -95:10:95
X0 = [x0; vx0; y0; vy0];
X = ode(X0,0,T,ruther);
plot(X(1,:),X(3,:),'-r');
end

// 描画範囲の設定
zoom_rect([- xymax,- xymax, xymax, xymax]);


クーロン力のベクトル表示


α粒子が受けるクーロン力は単純に位置のみに依存するので、その力の向きと方向を矢印であらわして見ます。
矢印を表示するScilabのコマンドはchampで、champのためのベクトルを用意するのに便利なのがndgridです。

ベクトル表示を加えたプログラムがrutherford_sce.txtです。

004_20130729024530.png

Fig.4: ラザフォード散乱の結果にクーロン力のベクトルを追加したもの。


矢印の長さが、その点にあるα粒子が受けるクーロン力の大きさを表しています。数式を見るとクーロン力は距離の2乗に反比例することが分かりますが、グラフにしてみても強いクーロン力を受けるのは金原子核のごく近傍だけです。

さて微分方程式による物理現象のモデル化(PDF)の問題28は、つまるところトムソンの原子模型を採用すると散乱はどうなるのかということです。(例題でなく問題という割には答えも書いてありますが)。
これはトムソン模型の原子内部と外部でクーロン力の関数が以下のように場合分けされると考えれば簡単に考察できます。

f( \vec{r} ) = \begin{cases}<br />\frac{Z_{\alpha}Z_{\mathrm{Au}}e^2}{4 \pi \epsilon_0 m_{\alpha} R^3} \vec{r} & (r \leq R) \\<br />\frac{Z_{\alpha}Z_{\mathrm{Au}}e^2}{4 \pi \epsilon_0 m_{\alpha} r^3} \vec{r} & (r > R)<br />\end{cases}

r > Rでは、これまでに考えてきたラザフォード模型と同じ結果を示しますが、r≦Rではr=Rのときと同じ力しか受けません。したがってトムソン模型では飛んできたα粒子を大きな角度へ押し返すような散乱は起こりません。

なお、元PDFの数式は、またしても質量mαで割り算するのを忘れているようです。

参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode 量子力学 クーロン散乱 

Scilabでvan der Pol方程式

微分方程式による物理現象のモデル化(PDF)に従ってvan der Pol方程式の計算をします。

\frac{\mathrm{d}^2 x}{\mathrm{d} t^2} - \mu (1-x^2)\frac{\mathrm{d}x}{\mathrm{d}t}+x=0

(μ>0)

VanDerPol.png

Fig.1: van der Pol方程式。μ=1.0 (x0,v0)=(0,1)



作成したプログラムはVanDerPol_sce.txtです。

clear;

// *** 微分方程式の定義 ***
function dx = vanderpol(t,x)
mu = 1.0;
dx(1) = x(2);
dx(2) = mu * (1 - x(1) ^ 2) * x(2) - x(1);
endfunction

// *** 時間ベクトル ***
T = linspace(0,40,800);

// *** 微分方程式ソルバ ***
X0 = [0.0; 1.0]; // 初期条件
X = ode(X0,0,T,vanderpol);

// *** グラフのプロット ***
xsetech([0,0,1,0.45]);
plot(X(1,:),X(2,:));
xlabel("x");
ylabel("v");
xsetech([0,0.5,1,0.45]);
plot(T,X(1,:));
xlabel("t");
ylabel("x");


外力がある場合


外力がある場合の式は以下のように表されます。

\frac{\mathrm{d}^2 x}{\mathrm{d} t^2} - \mu (1-x^2)\frac{\mathrm{d}x}{\mathrm{d}t}+kx=f\cos\omega t

(μ>0)

プログラムはVanDerPol2_sce.txtです。

clear;

// *** 微分方程式の定義 ***
function dx = vanderpol(t,x)
mu = 1.0;
k = 1.0;
f = 2.0;
w = 2 * %pi;
dx(1) = x(2);
dx(2) = mu * (1 - x(1) ^ 2) * x(2) - k * x(1) + f * cos(w * t);
endfunction

// *** 時間ベクトル ***
T = linspace(0,40,800);

// *** 微分方程式ソルバ ***
x0 = 0.0;
v0 = -3.0;
X0 = [x0; v0]; // 初期条件
X = ode(X0,0,T,vanderpol);

// *** グラフのプロット ***
xsetech([0,0,1,0.45]);
plot(X(1,:),X(2,:));
xlabel("x");
ylabel("v");
xsetech([0,0.5,1,0.45]);
plot(T,X(1,:));
xlabel("t");
ylabel("x");


VanDerPol2.png

Fig.2: 外力のある場合。μ=1.0, k=1.0, f=2.0, ω=2π (x0,v0)=(0,-3)


関連エントリ




参考URL




付録


このエントリで使用したLTspiceのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode カオス 

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRScilabmachikaneyamaKKRPSoCOPアンプPICCPA強磁性モンテカルロ解析常微分方程式トランジスタode状態密度インターフェースDOSPDS5022ecaljスイッチング回路定電流半導体シェルスクリプトレベルシフト乱数HP6632A温度解析ブレッドボードI2CR6452A分散関係トランジスタ技術可変抵抗確率論数値積分反強磁性セミナー非線形方程式ソルバ絶縁バンドギャップ熱設計偏微分方程式バンド構造GW近似カオス三端子レギュレータLEDフォトカプラシュミットトリガISO-I2CA/DコンバータLM358USBカレントミラーTL431マフィンティン半径PC817C数値微分アナログスイッチ発振回路サーボ直流動作点解析74HC40532ちゃんねる標準ロジックチョッパアンプLDAアセンブラFFTbzqltyイジング模型ブラべ格子開発環境補間量子力学電子負荷BSchパラメトリック解析単振り子基本並進ベクトル熱伝導繰り返しGGAMaximaTLP621ewidthSMP相対論抵抗位相図ランダムウォークスピン軌道相互作用六方最密充填構造不規則合金FETコバルト失敗談QSGWcygwinスレーターポーリング曲線スイッチト・キャパシタラプラス方程式gfortranキュリー温度状態方程式条件分岐格子比熱TLP552LM555TLP521三角波NE555過渡解析FXA-7020ZRWriter509テスタ詰め回路MCUマントルダイヤモンドQNAPデータロガーガイガー管自動計測UPS井戸型ポテンシャルawk第一原理計算仮想結晶近似ブラウン運動差し込みグラフ平均場近似fsolve起電力熱力学OpenMPスーパーセル固有値問題最適化最小値VCAシュレディンガー方程式VESTAubuntu最大値面心立方構造PGAOPA2277L10構造非線型方程式ソルバ2SC1815fccフェルミ面等高線ジバニャン方程式ヒストグラム確率論マテリアルデザイン正規分布結晶磁気異方性interp1フィルタ初期値ウィグナーザイツ胞c/aルチル構造岩塩構造スワップ領域リジッドバンド模型edeltBaOウルツ鉱構造重積分SIC二相共存ZnOquantumESPRESSOCapSensegnuplotmultiplot全エネルギー固定スピンモーメントFSM合金ノコギリ波フォノンデバイ模型ハーフメタル半金属TeXifortTS-110不規則局所モーメントTS-112等価回路モデルパラメータ・モデルヒストグラムExcel円周率GimpトラックボールPC直流解析入出力文字列マンデルブロ集合キーボードフラクタル化学反応三次元Realforce縮退日本語最小二乗法関数フィッティング疎行列シンボル線種ナイキスト線図陰解法負帰還安定性熱拡散方程式EAGLECrank-Nicolson法連立一次方程式P-10クーロン散乱Ubuntu境界条件MBEHiLAPW軸ラベルトランスCK1026MAS830L凡例PIC16F785LMC662AACircuit両対数グラフ片対数グラフグラフの分割specx.f

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ