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

fcontour

説明

fcontour(f) は、シンボリック式 f(x,y) の等高線を x および y の既定の区間 [-5 5] でプロットします。

fcontour(f,[min max]) は、f を区間 min < x < max および min < y < max でプロットします。

fcontour(f,[xmin xmax ymin ymax]) は、f を区間 xmin < x < xmax および ymin < y < ymax でプロットします。関数 fcontoursymvar を使用して、変数を並べ替え、区間を割り当てます。

fcontour(___,LineSpec) は、LineSpec を使用してライン スタイルと色を設定します。fcontour はマーカーをサポートしません。

fcontour(___,Name,Value) は、1 つ以上の Name,Value 引数ペアを使用して、ラインのプロパティを指定します。このオプションは、前述の構文のすべての入力引数の組み合わせで使用できます。Name,Value ペアの設定はプロットされたすべてのラインに適用されます。個々のプロットにオプションを設定するには、fcontour によって返されるオブジェクトを使用します。

fcontour(ax,___) は、現在の axes オブジェクト gca ではなく axes オブジェクト ax にプロットします。

fc = fcontour(___) は、関数等高線オブジェクトを返します。このオブジェクトを使用して、特定の等高線図のプロパティのクエリと変更を行います。詳細は、FunctionContour のプロパティ を参照してください。

シンボリック式の等高線をプロット

sin(x)+cos(y) の等高線を既定区間 -5<x<5 および -5<y<5 にプロットします。カラー バーを表示します。等高線の色とカラー バーの値を一致させて、等高線のレベルを判定します。

syms x y
fcontour(sin(x) + cos(y))
colorbar

シンボリック関数の等高線のプロット

f(x,y)=sin(x)+cos(y) の等高線を既定区間 -5<x<5 および -5<y<5 にプロットします。

syms f(x,y)
f(x,y) = sin(x) + cos(y);
fcontour(f)

プロット区間の指定

プロット区間を fcontour の 2 番目の引数に与えることで、sin(x)+cos(y) を区間 -π/2<x<π/20<y<5 にプロットします。

syms x y
f = sin(x) + cos(y);
fcontour(f,[-pi/2 pi/2 0 5])

ライン スタイル、色、幅の変更

入力 LineSpec を指定して、x2-y2 の等高線を青い破線としてプロットします。LineWidth2 に指定します。マーカーは fcontour ではサポートされていません。

syms x y
fcontour(x^2 - y^2,'--b','LineWidth',2)

同じ Figure への複数の等高線図のプロット

入力をベクトルとして渡すか、または hold on を使用すると、複数の等高線図を連続して同じ Figure にプロットできます。LineStyle および名前と値の引数を指定すると、すべての等高線図に適用されます。各プロットに別々の LineStyle および名前と値の引数ペアを指定することはできません。

subplot を使用して、Figure を 2 つのサブプロットに分割します。第 1 サブプロットで、ベクトル入力を使用して sin(x)+cos(y)x-y をプロットします。第 2 サブプロットで、hold on を使用して同じ式をプロットします。

syms x y
subplot(2,1,1)
fcontour([sin(x)+cos(y) x-y])
title('Multiple Contour Plots Using Vector Inputs')

subplot(2,1,2)
fcontour(sin(x)+cos(y))
hold on
fcontour(x-y)
title('Multiple Contour Plots Using Hold Command')

hold off

等高線図の作成後の変更

e-(x/3)2-(y/3)2+e-(x+2)2-(y+2)2 の等高線をプロットします。fcontour がプロット オブジェクトを返すように出力を指定します。

syms x y
f = exp(-(x/3)^2-(y/3)^2) + exp(-(x+2)^2-(y+2)^2);
fc = fcontour(f)

fc = 
  FunctionContour with properties:

     Function: [1x1 sym]
    LineColor: 'flat'
    LineStyle: '-'
    LineWidth: 0.5000
         Fill: 'off'
    LevelList: [0.2000 0.4000 0.6000 0.8000 1 1.2000 1.4000]

  Show all properties

ドット表記を使用してオブジェクト fc のプロパティを設定し、LineWidth1 に、LineStyle を破線に変更します。LevelList[1 0.9 0.8 0.2 0.1] に設定して、01 に近い等高線を可視化します。

fc.LineStyle = '--';
fc.LineWidth = 1;
fc.LevelList = [1 0.9 0.8 0.2 0.1];
colorbar

等高線間の領域の塗りつぶし

fcontourFill 入力を 'on' に設定して、等高線間の領域を塗りつぶします。代わりに内挿シェーディングが必要な場合、オプション 'EdgeColor''none' に設定して関数 fsurf を使用した後に、コマンド view(0,90) を実行します。

以下の等高線を塗りつぶして、夕日のように見えるプロットを作成します。

erf((y+2)3)-e(-0.65((x-2)2+(y-2)2).

syms x y
f = erf((y+2)^3) - exp(-0.65*((x-2)^2+(y-2)^2));
fcontour(f,'Fill','on')

等高線のレベルの指定

'LevelList' オプションを使用して、fcontour で等高線を描画する値を設定します。

syms x y
f = sin(x) + cos(y);
fcontour(f,'LevelList',[-1 0 1])

等高線の解像度の制御

'MeshDensity' オプションを使用して、等高線の解像度を制御します。'MeshDensity' を増やすとプロットがより滑らかで正確になり、減らすとプロット速度が上がります。

subplot を使用して、Figure を 2 つに分割します。最初のサブプロットでは、sin(x)sin(y) の等高線をプロットします。これでは四角形の角が合いません。これを修正するには、第 2 サブプロットで 'MeshDensity'200 に増やします。これで角が合います。これは、'MeshDensity' を増やすとプロットの解像度が向上することを示します。

syms x y
subplot(2,1,1)
fcontour(sin(x).*sin(y))
title('Default MeshDensity = 71')

subplot(2,1,2)
fcontour(sin(x).*sin(y),'MeshDensity',200)
title('Increased MeshDensity = 200')

タイトルと座標軸ラベルの追加、および目盛りの書式設定

xsin(y)-ycos(x) をプロットします。タイトルと座標軸ラベルを追加します。x 軸の範囲を pi/2 の間隔にして、x 軸の目盛りを作成します。XTick プロパティを使用して、これらの目盛りを表示します。arrayfun を使用して texlabelS に適用して、x 軸ラベルを作成します。XTickLabel プロパティを使用して、これらのラベルを表示します。以上の手順を、y 軸について繰り返します。

プロットに LaTeX を使用する方法については、latexを参照してください。

syms x y
fcontour(x*sin(y)-y*cos(x), [-2*pi 2*pi])
grid on
title('xsin(y)-ycos(x) for -2\pi < x < 2\pi and -2\pi < y < 2\pi')
xlabel('x')
ylabel('y')
ax = gca;

S = sym(ax.XLim(1):pi/2:ax.XLim(2));
ax.XTick = double(S);
ax.XTickLabel = arrayfun(@texlabel, S, 'UniformOutput', false);

S = sym(ax.YLim(1):pi/2:ax.YLim(2));
ax.YTick = double(S);
ax.YTickLabel = arrayfun(@texlabel, S, 'UniformOutput', false);

アニメーションの作成

アニメーションを作成するには、表示されている式を関数ハンドルの Function プロパティを使用して変更した後、drawnow を使用してプロットを更新します。GIF にエクスポートする方法については、imwrite を参照してください。

変数 i を –π/8 から π/8 まで変えることによって、パラメトリックな曲線 isin(x) + icos(y) をアニメーション化します。

syms x y
fc = fcontour(-pi/8.*sin(x)-pi/8.*cos(y));
for i=-pi/8:0.01:pi/8
    fc.Function = i.*sin(x)+i.*cos(y);
    drawnow
		pause(0.05)
end

入力引数

すべて折りたたむ

プロットする式または関数。シンボリック式またはシンボリック関数として指定します。

xy のプロット範囲。2 つの数値のベクトルとして指定します。既定の範囲は、[-5 5] です。

xy のプロット範囲。4 つの数値のベクトルとして指定します。既定の範囲は、[-5 5 -5 5] です。

axes オブジェクト。axes オブジェクトを指定しない場合、プロット関数は現在の座標軸を使用します。

ライン スタイルと色。ライン スタイル指定子、色指定子、またはその両方が含まれる文字ベクトルまたは string として指定します。

例: '--r' は赤い破線を指定

これらの 2 つの表はライン スタイルと色のオプションの一覧です。

ライン スタイル指定子説明
-実線 (既定の設定)
--破線
:点線
-.一点鎖線
色指定子説明

y

m

マゼンタ

c

シアン

r

g

b

w

k

名前と値のペアの引数

引数 Name,Value のオプションのコンマ区切りペアを指定します。Name は引数名、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例: 'MeshDensity',30

ここでは、プロパティの一部だけを紹介しています。一覧については、FunctionContour のプロパティ を参照してください。

方向ごとの評価点の数。数値として指定します。既定値は 71 です。fcontour は適応評価を使用するため、評価点の数は実際の数の方が大きくなります。

例: 30

等高線間の塗りつぶし。次の値のいずれかとして指定します。

  • 'off' — 等高線の間を色で塗りつぶしません。

  • 'on' — 等高線の間を色で塗りつぶします。

等高線のレベル。z 値のベクトルとして指定します。既定では、関数 fcontourZData プロパティの値の範囲に対応する値を選択します。

このプロパティを設定すると、対応するモード プロパティが manual に設定されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

LevelList の選択モード。次の値のいずれかとして指定します。

  • 'auto'ZData の値に基づいて値を決定します。

  • 'manual' — 手動で指定した値を使用します。値を指定するには、LevelList プロパティを設定します。モードが 'manual' の場合、Function プロパティまたは範囲を変更しても LevelList の値は変化しません。

等高線の間隔。スカラー数値として指定します。たとえば、2 ずつインクリメントする等高線を描画するには、この値を 2 に指定します。既定では、LevelStepZData の値を使用して決定されます。

このプロパティを設定すると、対応するモード プロパティが 'manual' に設定されます。

例: 3.4

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

LevelStep の選択モード。次の値のいずれかとして指定します。

  • 'auto'ZData の値に基づいて値を決定します。

  • 'manual' — 手動で指定した値を使用します。値を指定するには、LevelStep プロパティを設定します。モードが 'manual' の場合、Function プロパティまたは範囲を変更しても LevelStepMode の値は変化しません。

等高線の色。'flat'、RGB 3 成分、16 進数のカラー コード、色の名前、または省略名として指定します。等高線ごとに異なる色を指定する場合は、'flat' を指定します。色は、線の等高線の値、カラー マップ、カラー マップに対するデータ値のスケーリングによって決まります。色のスケーリングの詳細については、caxis を参照してください。

すべての等高線に同じ色を使用するには、RGB 3 成分、16 進数のカラー コード、色の名前、または省略名を指定します。

カスタム色には、RGB 3 成分または 16 進数のカラー コードを指定します。

  • RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度は [0,1] の範囲でなければなりません。たとえば [0.4 0.6 0.7] のようになります。

  • 16 進数のカラー コードは、ハッシュ記号 (#) の後に 3 つまたは 6 つの 0 から F までの範囲の 16 進数の桁を続けた文字ベクトルまたは string スカラーです。この値では大文字と小文字は区別されません。したがって、カラー コード '#FF8800''#ff8800''#F80'、および '#f80' は等価です。

あるいは、一般的な色を名前で指定できます。この表は、名前の付いた色のオプションと、等価な RGB 3 成分および 16 進数のカラー コードの一覧です。

色の名前省略名RGB 3 成分16 進数のカラー コード外観
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

'none'適用不可適用不可適用不可色なし

MATLAB® で多くの種類のプロットで使用されている既定の色の RGB 3 成分および 16 進数のカラー コードを次に示します。

RGB 3 成分16 進数のカラー コード外観
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

ライン スタイル。次の表のいずれかのオプションに指定します。

ライン スタイル説明結果として得られるライン
'-'実線

'--'破線

':'点線

'-.'一点鎖線

'none'ラインなしラインなし

ライン幅。ポイント単位の正の値として指定します。1 ポイント = 1/72 インチです。ラインがマーカーをもつ場合、ライン幅はマーカー エッジにも影響します。

出力引数

すべて折りたたむ

1 つ以上の関数等高線オブジェクト。スカラーまたはベクトルとして返されます。これらのオブジェクトは特定の等高線図のプロパティのクエリと変更に使用できる一意の識別子です。詳細は、FunctionContour のプロパティ を参照してください。

アルゴリズム

fcontourf のシンボリック変数を x 軸に、次に y 軸に割り当て、symvar は割り当てられる変数の順番を決定します。そのため、変数名と軸名が対応しない場合があります。fcontour が x または y を対応する軸に割り当てるように強制するには、プロットするシンボリック関数を作成し、そのシンボリック関数を fcontour に渡します。

たとえば、次のコードは表面 f(x,y) = sin(y) の等高線を 2 つの方法でプロットします。1 つ目の方法では、y 軸に対して波形を振動させます。2 つ目の方法では、y を x 軸に割り当てます。これがシンボリック関数内で最初の (および唯一の) 変数であるためです。

syms x y;
f(x,y) = sin(y);

figure;
subplot(2,1,1)
fcontour(f);
subplot(2,1,2)
fcontour(f(x,y)); % Or fcontour(sin(y));

R2016a で導入