Octave の使い方その4
常微分方程式とグラフ
□ 関数の定義と作図
octave: > function y = f(x)
y = x.^2 .- 4.*x .+ 6;
endfunction
octave: > f(2)
octave: > f([2, 3])
octave: > t = linspace(1, 3, 100);
octave: > grid "on"
octave: > plot(t, f(t))
octave: > t = logspace(-1, 2, 100);
octave: > semilogx(t, f(t))
octave: > semilogy(t, f(t))
octave: > loglog(t, f(t))
octave: > closeplot
□ 常微分方程式の解
x'' + 4*x' + 13*x = 0, x'(0) = 1, x(0) = 1
の解を求める.一階の常微分方程式に書き改めると次のようになる.
x1' = x2
x2' = -4*x2 - 13*x1
octave: > function xdot = f(x, t)
xdot(1) = x(2);
xdot(2) = -4*x(2) - 13*x(1);
endfunction
octave: > x0 = [1; 1]
octave: > t = linspace(0, 4, 1000);
octave: > y = lsode("f", x0, t);
octave: > plot(t, y)
octave: > grid "on"
octave: > plot(t, y(:, 1))
octave: > hold on
octave: > plot(t, y(:, 2))
octave: > hold off
octave: > plot(y(:, 1), y(:, 2))
octave: > closeplot
強制振動系
x'' + 2*x' + (4*π)^2*x = sin(4πt), x'(0) = 0, x(0) = 0
の解を求める.一階の常微分方程式に書き改めると次のようになる.
x1' = x2
x2' = -2*x2 - (4*π)^2*x1 + sin(4πt)
octave: > function xdot = f(x, t)
xdot(1) = x(2);
xdot(2) = -2*x(2) - (4*pi)^2*x(1) + sin(4*pi*t);
endfunction
octave: > x0 = [0; 0]
octave: > t = linspace(0, 4, 1000);
octave: > y = lsode("f", x0, t);
octave: > plot(t, y)
octave: > grid "on"
octave: > plot(t, y(:, 1))
octave: > plot(y(:, 1), y(:, 2))
octave: > closeplot
□ 3次元プロット
0 ≦ x ≦ 4 and 0 ≦ y ≦ 4 での sin(x)*sin(y) の図
octave: > x = linspace(0, 4, 40);
octave: > y = x;
octave: > [X, Y] = meshgrid(x, y);
octave: > Z = sin(X).*cos(Y);
octave: > mesh(x, y, Z)
octave: > closeplot
-π ≦ x ≦ π and -π/2 ≦ y ≦ π/2 での sin(x*y) の図
octave: > x = linspace(-pi, pi, 40);
octave: > y = linspace(-pi/2, pi/2, 40);
octave: > [X, Y] = meshgrid(x, y);
octave: > Z = sin(X.*Y);
octave: > mesh(x, y, Z)
octave: > closeplot
Octave
naniwa@rbt.his.u-fukui.ac.jp