%----------------- MATLABソース -----------------%
for t=0:0.02:4*pi;
x=sin(t)*10;
y=cos(t)*10;
plot(t,x,'.b',t,y,'.k','MarkerSize',30);
xlim([0 2*pi]);
ylim([-10 10]);
grid on;
% 描画を強制更新
drawnow
end
%----------------- MATLABソース -----------------%
2007年11月30日金曜日
2つの色の違うボールのアニメーション
2007年11月11日日曜日
レスラーアトラクタ
レスラーモデルに参考
レスラーモデルとは、チュービンゲン大学のレスラー(O.E.Rossler)によって提案されたストレンジアトラクタで、非線形項のみを含む非線形微分方程式である。
レスラーモデルとは、チュービンゲン大学のレスラー(O.E.Rossler)によって提案されたストレンジアトラクタで、非線形項のみを含む非線形微分方程式である。
%----------------- MATLABのソース -----------------%
%----------------- main_rossler.m -----------------%
function main_rossler
r = 2;
c = 2;
[t,xyz] = ode45('rossler',[0,500],[4;0;0]);
x = xyz(:,1); xmin = min(x); xmax = max(x);
y = xyz(:,2); ymin = min(y); ymax = max(y);
z = xyz(:,3); zmin = min(z); zmax = max(z);
aviobj = avifile('rossler.avi');
for i=1:length(t)
subplot(r,c,1);
plot3(x(1:i),y(1:i),z(1:i),...
x(1),y(1),z(1),'or',...
x(i),y(i),z(i),'ob');
axis([xmin xmax ymin ymax zmin zmax]);
xlabel('x'); ylabel('y'); zlabel('z');
subplot(r,c,2);
plot(x(1:i),y(1:i),...
x(1),y(1),'or',...
x(i),y(i),'ob');
axis([xmin xmax ymin ymax]);
xlabel('x'); ylabel('y');
subplot(r,c,3);
plot(x(1:i),z(1:i),...
x(1),z(1),'or',...
x(i),z(i),'ob');
axis([xmin xmax zmin zmax]);
xlabel('x'); ylabel('z');
subplot(r,c,4);
plot(y(1:i),z(1:i),...
y(1),z(1),'or',...
y(i),z(i),'ob');
axis([ymin ymax zmin zmax]);
xlabel('y'); ylabel('z');
%pause(0.01);
%F(i) = getframe(GCF);
F = getframe(GCF);
aviobj = addframe(aviobj,F);
end
aviobj = close(aviobj);
%movie2avi(F,'rossler.avi');
end
%----------------- main_rossler.m -----------------%
%----------------- rossler.m -----------------%
function xyz = rossler(t,y)
a = 0.2;
b = 0.2;
c = 6.0;
xyz = [ -y(2) - y(3)
y(1) + a*y(2)
b + y(1)*y(3) - c*y(3) ];
end
%----------------- rossler.m -----------------%
%----------------- MATLABのソース -----------------%
実行の結果
2007年11月10日土曜日
ローレンツ・アトラクタ
ローレンツモデルに参考
ローレンツモデルとは、気象学者エドワード・ローレンツ (Edward N. Lorenz)は1963年に "Deterministic nonperiodic flow"というカオスの研究上重要な位置を占めるにことになる論文を発表した。
このモデルは、上下に温度差のある流体の運動差によって、対流から乱流へ転移してく運動を記述するモデルである。一般的な対流の運動方程式、連続の方程式、熱伝導の方程式を用いて導かれる。
ローレンツモデルとは、気象学者エドワード・ローレンツ (Edward N. Lorenz)は1963年に "Deterministic nonperiodic flow"というカオスの研究上重要な位置を占めるにことになる論文を発表した。
このモデルは、上下に温度差のある流体の運動差によって、対流から乱流へ転移してく運動を記述するモデルである。一般的な対流の運動方程式、連続の方程式、熱伝導の方程式を用いて導かれる。
%----------------- MATLABソース -----------------%
%----------------- lorenz_main.m -----------------%
function main
r = 2;
c = 2;
[t,xyz] = ode45('lorenz',[0,30],[5;3;1]);
x = xyz(:,1); xmin = min(x); xmax = max(x);
y = xyz(:,2); ymin = min(y); ymax = max(y);
z = xyz(:,3); zmin = min(z); zmax = max(z);
for i=1:length(t)
subplot(r,c,1);
plot3(x(1:i),y(1:i),z(1:i),...
x(1),y(1),z(1),'or',...
x(i),y(i),z(i),'ob');
axis([xmin xmax ymin ymax zmin zmax]);
xlabel('x'); ylabel('y'); zlabel('z');
subplot(r,c,2);
plot(x(1:i),y(1:i),...
x(1),y(1),'or',...
x(i),y(i),'ob');
axis([xmin xmax ymin ymax]);
xlabel('x'); ylabel('y');
subplot(r,c,3);
plot(x(1:i),z(1:i),...
x(1),z(1),'or',...
x(i),z(i),'ob');
axis([xmin xmax zmin zmax]);
xlabel('x'); ylabel('z');
subplot(r,c,4);
plot(y(1:i),z(1:i),...
y(1),z(1),'or',...
y(i),z(i),'ob');
axis([ymin ymax zmin zmax]);
xlabel('y'); ylabel('z');
pause(0.01);
F(i) = getframe(GCF);
end
movie2avi(F,'lorenz.avi');
end
%----------------- lorenz_main.m -----------------%
%----------------- lorenz.m -----------------%
function xyz = lorenz(t,y)
s = 10;
b = 8/3;
r = 28;
xyz = [ -s .* y(1) + s .* y(2)
r .* y(1) - y(2) - y(1) .* y(3)
y(1) .* y(2) - b .* y(3) ];
end
%----------------- lorenz.m -----------------%
%----------------- MATLABソース -----------------%
実行の結果
2007年11月9日金曜日
ブラウン運動
ブラウン運動とは、1827年、ロバート・ブラウンが、花粉が水の浸透圧で破裂し水中に流失し浮遊した微粒子を顕微鏡下で観察中に発見した現象。液体中のような媒質中(媒質としては気体、固体もあり得る)に浮遊する微粒子が、不規則(ランダム)に運動する現象である。
長い間原因が不明のままであったが、1905年、アインシュタインにより、熱運動する媒質の分子の不規則な衝突によって引き起こされる現象であるとして説明する理論が発表された。
2次元ランダムウォークの軌跡。ステップを小さくした極限ではブラウン運動が得られる。
長い間原因が不明のままであったが、1905年、アインシュタインにより、熱運動する媒質の分子の不規則な衝突によって引き起こされる現象であるとして説明する理論が発表された。
2次元ランダムウォークの軌跡。ステップを小さくした極限ではブラウン運動が得られる。
%----------------- MATLABソース -----------------%
function main()
N = 128*16;
cx = 0.2; cy = 0.2;
sx = 0; sy = 0;
x(1) = 0; y(1) = 0;
for i=2:N
[dx dy] = randwalk;
sx = sx + cx * dx;
sy = sy + cx * dy;
x(i) = sx;
y(i) = sy;
end
minx = min(x); maxx = max(x);
miny = min(y); maxy = max(y);
for i=1:N-1
plot(x(1:i),y(1:i),'k',x(i),y(i),'o',x(1),y(1),'or');
axis equal;
axis([minx maxx miny maxy]);
pause(0.01)
F(i) = getframe;
end
movie2avi(F,'brownian.avi');
end
function [dx dy] = randwalk
dx = rand(1)-0.5;
dy = rand(1)-0.5;
end
%----------------- MATLABソース -----------------%
実行の結果
ランダムウォーク
ランダムウォークとは、「次に現れるものの確率」が不規則(ランダム)に決定される運動のこと。一見すると、「不規則で落ち着きのない動き」をしているように見えても、全体的に見ると実は「連続である」ことを指す。
%----------------- MATLABソース -----------------%
function main()
N = 128*16;
cx = 0.1; cy = 0.1;
sx = 0; sy = 0;
x(1) = 0; y(1) = 0;
for i=2:N
[dx dy] = randwalk;
sx = sx + cx * dx;
sy = sy + cx * dy;
x(i) = sx;
y(i) = sy;
end
minx = min(x); maxx = max(x);
miny = min(y); maxy = max(y);
for i=1:N-1
plot(x(1:i),y(1:i),'k',x(i),y(i),'o',x(1),y(1),'or');
axis equal;
axis([minx maxx miny maxy]);
pause(0.01)
F(i) = getframe;
end
movie2avi(F,'randomwalk.avi');
end
function [dx dy] = randwalk
w=0;
while w==0
w=rand(1)-0.5;
w = sign(w);
end
dx = 0; dy = 0;
if ceil(2*rand(1)) == 1
dx = w;
else
dy = w;
end
end
%----------------- MATLABソース -----------------%
実行の結果
2007年11月6日火曜日
peaks 関数のアニメーション
%--------Matlabのソース--------
%PEAKSは、ガウス分布の変換とスケーリングによって得られる2変数関数
Z = peaks;
surf(Z);
%ムービーフレームのメモリの初期化
M = moviein(60);
axis manual
set(gca,'nextplot','replacechildren');
for j = 1:60
surf(sin(2*pi*j/20)*Z,Z)
%ムービーフレームの取り出し
M(:,j) = getframe;
end
% ムービーからAVIムービーを作成
movie2avi(M,'peaks.avi')
%--------Matlabのソース--------
アニメーションの結果
%PEAKSは、ガウス分布の変換とスケーリングによって得られる2変数関数
Z = peaks;
surf(Z);
%ムービーフレームのメモリの初期化
M = moviein(60);
axis manual
set(gca,'nextplot','replacechildren');
for j = 1:60
surf(sin(2*pi*j/20)*Z,Z)
%ムービーフレームの取り出し
M(:,j) = getframe;
end
% ムービーからAVIムービーを作成
movie2avi(M,'peaks.avi')
%--------Matlabのソース--------
アニメーションの結果
登録:
投稿 (Atom)