関数を定義する

Last modified: 2018 年 12 月 30 日 03 時

不連続関数を定義してそのグラフを描画する

主な使用関数: Circledata, Drwxy, function, if, Setpen, Shade, Plotdata.

関数を定義する

関数の定義

ここでは、次の関数を描画します: \begin{align} f(x)=\left\{ \begin{array}{cl} -1 & (x\leq 1)\\ 1 & (x>1) \end{array} \right. \end{align} if文によって関数を定義し、Plotdataで描画することにしましょう。

Setwindow([-1.5,2.0], [-1.2,1.2]);

function f=f(x);
  if x>1 then
    f=1;
  else 
    f=-1;
  end
endfunction

G=Plotdata('f(x)', 'x', 'N=500', 'D=1');    //関数fのプロットデータ

Plotdataの最後のオプション 'D=1' は、連続点のしきい値を表わします。これを指定しないと、関数fは不連続点x=0で連続なグラフとして表現されます(下図)。しきい値なので、たとえば、'D=10' とすると、やはり連続なグラフとなります。

180x180(2537bytes) 180x180(2537bytes) 180x180(2537bytes)
[このページのトップへ]

点のプロット

不連続点x=0を表現するのに、点(0,-1)を黒丸、点(0,1)を白丸として描画します。C=Circledata([0,1], 0.08)より小円のデータCを得て、Shade(C,0)により、円の内部を白で塗りつぶします。その上からDrwline(C,1)により小円を描くと、これが白丸を表現します。

C=Circledata([1,1], 0.08);
L1=Listplot([1,1], [1,-1]);    //x=1のところの点線

//Windisp(G);

Openfile('tex/function_sample.tex');
Beginpicture('1.0cm');
Drwxy();
Dashline(L1, 1);
Drwline(G, 1.5);
Shade(C, 0);    //塗りつぶし
Drwline(C, 1);

Setpen(8);
Drwpt([1,-1]);
Expr([1,0], 'ne', '1');
Expr([0,1], 'w2', '1');
Expr([0,-1], 'nw', '-1');
Setpen(1);
Endpicture(0);
Closefile();

ここで、Shade(領域,d)により、指定した領域を濃さd (dは0から1までの実数)で塗りつぶします。デフォルトはd=1で、黒く塗りつぶすことになります。領域の指定方法は、上のように閉曲線のプロットデータを渡すか、つなげると閉曲線になるような曲線のプロットデータのリストを渡せばよいです。

注意するのは、座標軸上に白丸をプロットする場合です。いつものようにEndpicture(1)を利用してもよいのですが、Endpicture(1)はすべてのプロットが終わったあとに座標軸を描画する仕様になっていることに注意です。つまり、白丸を描いた上から、座標軸を描くので、下図のように白丸に線が入ってしまいます(下図)。座標軸上に白丸を描画したい場合はDrwxy()でxy座標軸をプロットすると良いです。

180x180(2537bytes) 180x180(2537bytes)
[このページのトップへ]

ソースコード

ソース(.sce)のダウンロード
Setwindow([-1.5,2.0], [-1.2,1.2]);

function f=f(x);
  if x>1 then
    f=1;
  else 
    f=-1;
  end
endfunction

G=Plotdata('f(x)', 'x', 'N=500', 'D=1');    //関数fのプロットデータ

C=Circledata([1,1], 0.08);
L1=Listplot([1,1], [1,-1]);    //x=1のところの点線

//Windisp(G);

Openfile('tex/function_sample.tex');
Beginpicture('1.0cm');
Drwxy();
Dashline(L1, 1);
Drwline(G, 1.5);
Shade(C, 0);    //塗りつぶし
Drwline(C, 1);

Setpen(8);
Drwpt([1,-1]);
Expr([1,0], 'ne', '1');
Expr([0,1], 'w2', '1');
Expr([0,-1], 'nw', '-1');
Setpen(1);
Endpicture(0);
Closefile();

[このページのトップへ]