ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Symbolic Math Toolbox による解析プロット

fplot ファミリではシンボリックな式や方程式を入力とすることにより、数値データの明示的な生成の無い、容易な解析プロットが可能です。

この例では、以下の関数を取り上げます。

  • fplot

  • fplot3

  • fsurf

  • fcontour

  • fmesh

  • fimplicit

  • fimplicit3

1 変数関数を対話的にプロット

syms x
fplot(sin(exp(x)))

fplot([sin(x),cos(x),tan(x)])

シンボリック式の陰的プロットを生成

syms x y 
r = 1:10;
fimplicit(x^2+y^2 == r)

subs を使い複数の関数を パラメトリックに探索

syms x a
expression = sin(exp(x/a))
expression = 

fplot(subs(expression,a,[1,2,4]))
hold off
legend show

シンボリック的手法と数値的手法を混合して数学モデルを開発

へのスプライン近似を探索します。

syms f(x)
f(x) = x*exp(-x)*sin(5*x) -2;
xs = 0:1/3:3;
ys = double(subs(f,xs));
fplot(f,[0,3])
hold on
plot(xs,ys,'*k','DisplayName','Data Points')
fplot(@(x) spline(xs,ys,x),[0 3],'DisplayName','Spline interpolant')
hold off
grid on
legend show

ギブズ現象の探索

syms x
n = 5;
approx = cumsum(sin((1:2:2*n-1)*x)./(1:2:2*n-1));
fplot(approx,'LineWidth',1)

計算結果のプロット

シンボリックな入力を用いて、計算を実行し結果をプロットできます。

syms f(a,x)
assume(a>0);
f(a,x) = a*x^2+a^2*x+2*sqrt(a)
f(a, x) = 

x_min = solve(diff(f,x), x)
x_min = 

fplot(f(a,x_min),[0 5])
xlabel 'a'
title 'Minimum value of f depending on a'

assume(a,'clear')

級数と総和の可視化

syms x
t6 = taylor(cos(x),x,'Order',6)
t6 = 

t8 = taylor(cos(x),x,'Order',8)
t8 = 

fplot([cos(x) t6 t8])
xlim([-4 4])
ylim([-1.5, 1.5])
title '6th and 8th Order Taylor Series approximations to cos(x)'
legend show

関数を微分と積分とともに探索

MATLAB 関数に変換できないシンボリック式もあります。

syms x
f = x^x
f = 

int(f,x)
ans = 

diff(f,x)
ans = 

fplot([f, int(f,x), diff(f,x)],[0 2])
legend show

明示的な数値データなしにパラメトリック曲線を生成

曲線 または fplot または fplot3 で描画できます (数値データにおける plot または plot3 と同様です)。

syms t
fplot3(sin(t)-t/2,cos(t),t^3,'--','LineWidth',2.5)
view([-45 45])

メッシュグリッドを使わない表面 を生成

syms x y
fsurf(sin(x)+sin(y)-(x^2+y^2)/20,'ShowContours','on')
set(camlight,'Color',[0.5 0.5 1]);
set(camlight('left'),'Color', [1 0.6 0.6]);
set(camlight('left'),'Color', [1 0.6 0.6]);
set(camlight('right'),'Color', [0.8 0.8 0.6]);
material shiny
view(-19,56)

meshgrid を使用した解析微分からの数値ストリームラインの生成

syms x y
u = diff(diff(sin(x^2+y^2)))
u = 

v = diff(diff(cos(x^2+y^2)))
v = 

[X, Y] = meshgrid(-3:.1:3,-2:.1:2);
U = subs(u, [x y], {X,Y});
V = subs(v, [x y], {X,Y});

startx = -3:0.1:3;
starty = zeros(size(startx));
h = streamline(X,Y,U,V,X,Y);
for i=1:length(h)-1
    h(i).Color = [rand() rand() rand()];
end

適応可視化

fplot と同様、 fsurf はシンボリック式の必要な箇所をより詳細に評価し、曲面と漸近領域をより精確に表示します。

fsurf(log(x) + exp(y), [-2 2])

陰関数表面の作成

陰関数表面 をプロットします。fimplicit3 がプロット オブジェクトを返すように出力を指定します。

syms x y z
f = 1/x^2 - 1/y^2 + 1/z^2;
fimplicit3(f)

多変量表面の可視化

純粋な シンボリック関数 (intdiffsolveなど) とは異なり、fsurf は変数の順序を指定できません。順序の設定には以下のシンボリック関数を使用してください。

syms f(t) x(u,v) y(u,v) z(u,v)
f(t) = sin(t)*exp(-t^2/3)+1.5;
x(u,v) = u
x(u, v) = 

y(u,v) = f(u)*sin(v)
y(u, v) = 

z(u,v) = f(u)*cos(v)
z(u, v) = 

fsurf(x,y,z,[-5 5.1 0 2*pi])

3D メッシュプロットには fmesh を使用します。

パラメーター化されたメッシュをプロットします

ここで、

syms s t
r = 8 + sin(7*s + 5*t);
x = r*cos(s)*sin(t);
y = r*sin(s)*sin(t);
z = r*cos(t);
fmesh(x, y, z, [0 2*pi 0 pi], 'Linewidth', 2)
axis equal

シンボリック式または方程式の等高線図を生成

syms x y g(x,y)
g(x,y) = x^3-4*x-y^2
g(x, y) = 

fcontour(g,[-3 3 -4 4],'LevelList',-6:6)
title 'Some Elliptic Curves'