&size(24){''\YGraph''};
 関数 y=f(x)のグラフを描画します。
 perl との連携機能が必要です。
-注1:perl との連携機能については,[[こちら>perlとの連携]]をご覧ください。
-注2:丸ごとパックでは使えません。代えて [[YGurafu]]コマンドを用います。
#br

#contents
#br

*定義されているスタイルファイル [#pf21335e]
emathPp.sty

*書式 [#c2309765]
 \YGraph<#1>'#2'^#3#4
-#1: key=val
-#2: 定義域の指定
-#3: 不連続点/分割点
-#4: 関数式
 #4 で記述された関数 y=f(x) のグラフを描画します。
 関数式は,perl の文法に従って記述しますが,
 独立変数は X で表します。
 セミコロン(;)区切りで複数の関数を記述できます。
-#2 における定義域指定は
--[x1,x2] 閉区間指定
--(x1,x2) 開区間指定
--(,x2) [x1,] など端点省略
--(x1,x2] 半開区間
--それらを | でつなげた複数区間
-#3 不連続点/分割点をコンマ区切 csv列で与えます(分割点の場合は * を前置)。~
#2 と #3 は併用不可。
-#1 における有効な key は
:[[color>#color]]| 線に色をつけます。
:[[dash>#dash]]| 破線で描画します (pszahyou環境のみ)。
:[[dx>#dx]]| 
:[[hidariM>#hidariM]]|
:[[hidariT>#rightP]]|
:[[infx>#infx]]| 
:[[kiretto>#kiretto]]|
:[[leftP>#rightP]]|
:[[linethickness>#linethickness]]| 線の太さを変更します。
:[[maxx>#minx]]| 
:[[migiM>#migiM]]|
:[[migiT>#rightP]]|
:[[minx>#minx]]| 
//:[[nextopt>#nextopt]]| \Drawline に引き渡すオプションを記述します。
:[[rightP>#rightP]]|
:[[supx>#infx]]| 

*例 [#ud85d708]
**基本例 [#b108fe3f]
 LaTeX のマクロを用いて,関数 y=f(x) のグラフを描画します。
-zahyou環境では,tpic-specials による描画です。
#ref(YGraph01.png)
#ref(YGraph01p.tex,center,上のソースリスト)
-pszahyou環境では,PostScript による描画です。
#ref(YGraph01ps.png)
#ref(YGraph01ps-p.tex,center,上のソースリスト)
-セミコロン(;)区切りで複数の関数を描画することも可能です。
#ref(YGraph02.png)
-\YGraph コマンドは,perl との連携機能を必要とします。~
その実現方法については,
[[こちら>perlとの連携]]をご覧ください。
**定義域の制限(1) minx, maxx [#minx]
 描画範囲は,zahyou環境で設定した \truexmin〜\truexmax がデフォルトです。
 これを制限するには
   <minx=..>
   <maxx=..>
 オプションを用います。右辺値は,\unitlength を単位とする無名数です。
#ref(minmax01.png)
-minx, maxx による制限は,閉区間指定です。開区間を指定するには,次の項~
  infx, supx~
を用います。
**定義域の制限(2) infx, supx [#infx]
 定義域を開区間で制限するには
   <infx=..>
   <supx=..>
 オプションを用います。
#ref(minmax02a.png)
-dx=... オプションと併用するときは,infx, supx に先んじて dx オプション指定をします。
-$pi は,円周率を表す perl の定数です。~
\YGraph は,perl を呼び出しますから,関数式,区間などに perl の式を記述できます。
**定義域の制限(3) '...' オプションによる区間指定 [#kukan]
 分数関数 y=1/x のグラフは
   x<0 と x>0
 に分けて描画しなければなりません。
#ref(kukan01.png)
-'...' オプションを用いて,2つの区間をまとめることが出来ます。
#ref(kukan02.png)
-区間端点には,perlの計算式を記述できます。
#ref(kukan03.png)
**定義域の制限(4) 不連続点の指定 (^{...} オプション) [#kiretto]
 分数関数 y=1/((x+2)(x-1)) のグラフを描画するには,区間を
   '(,-2)|(-2,1)|(1,)'
 と与えることになりますが,別法として不連続点を ^{...} オプションで指定する方法もあります。
#ref(gap01.png)
**定義域の制限(5) 分割点の指定 (^{...} オプション) [#n238c32c]
 y=|(x+2)(x-1)| のグラフは x=-2, 1 で分割して描画しますが,
   \YGraph^{*-2,*1}
 と,分割点に * を前置します。
#ref(gap02.png)
-この場合,分割せずに描画すると,~
  折れ点補正でグラフが x軸の下に飛び出したり,~
  折れ点の少し上方で折り返ってしまったり~
と乱れます。
#ref(gap03.png)
-注意 ^{...} オプションと '...' オプションを併用することは出来ません。
***入試問題から [#kb3f4363]
|||LEFT:|c
|2012 東北大学 |&ref(0010201202.tex); |&ref(0010201202fig.png);|
|2012 帯広畜産大学 |&ref(0005201202.tex); |&ref(0005201202fig.png);|
|2012 横浜国立大学 |&ref(0034201205.tex); |&ref(0034201205fig.png);|
|2012 信州大学 |&ref(0040201208.tex); |&ref(0040201208fig.png);|
**端点 [#va72223a]
***端点 [#rightP]
 描画したグラフの端点を取得したい場合は
   leftP, rightP
 オプションを用います。
 右辺値は,制御綴りの先頭 \ をのぞいた文字列で,
   <rightP=R>
 とすれば,制御綴 \R に右の端点の座標が戻ります。
#ref(rightP01.png)
-単に <rightP> とすれば,制御綴 \rightP に右端点が戻ります。~
老婆心ながら,<rightP=> と等号だけをつけると意味が違って \rightP コマンドは無効コマンドとなります。
#ref(rightP02.png)
-leftP オプションも rightP オプションと同様で,グラフの左端点を取得します。
#ref(leftP01.png)
+単に \YGraph{....} としただけでは,\leftP, \rightP は定義されません。~
\rightP を使いたければ,\YGraph<rightP>{....} としておかねばなりません。
+\leftP, \rightP を正しく取得するには,次の条件が満たされていなければなりません。~
  描画する x の範囲の中点における関数値が,描画する y の範囲に含まれている~
この条件が満たされていないときは,xmin, xmax 等のキーを用いて描画する x の範囲を狭めておかなければなりません。
+migiT は rightP と同義のキーです。~
hidariT も leftP と同義のキーです。
***端点に文字列 [#migiM]
 右端点に文字列を出力するには,<migiM=..> オプションを用います。
#ref(migiM01.png)
-文字列には,配置オプションを前置することが出来ます。
#ref(migiM02.png)
-配置オプションを省略した場合は,[e] とみなされます。
-左端点に出力するオプションは <hidariM=..> です。~
配置オプション省略時は [w] とみなされます。
#ref(hidariM01.png)
**線の修飾 [#nextopt]
***太さの変更 [#linethickness]
 線の太さを変更するには,<linethickness=..> オプションを用います。
 デフォルト値は
   zahyou(*)環境では,0.3pt
   pszahyou(*)環境では,1pt
 となっています。
#ref(linethickness01.png)
***破線 [#dash]
 グラフを破線で描画するには,<dash=..> オプションを用います。
 ただし,pszahyou(*)環境に対してのみ用いられます。
#ref(dash01.png)
***カラー [#color]
 グラフに色をつけるには,<color=..> オプションを用います。
#ref(color01.png)
-iro も color と同義のキーです。

*関数定義 [#kansuuteigi]
 関数式記述の具体例をいくつかあげておきます。
**有理関数 [#s05618aa]
 四則演算子(+-*/)を用いて記述します。
 べきは ^ ではなく ** で表すというのが,perl の約束事です。
 下の例は,分数関数 y=(x^3+1)/(3x^2+1) のグラフを描画しています。
#ref(func01.png)
-係数と X の間の演算子 * は省略できません。
***有理整関数 [#a21875df]
 特に整関数の場合は,係数を降べき順に並べて表す \defcsvfunc も便利です。
#ref(defcsvfunc01.png)
-\defcsvfunc については,[[そのページ>defcsvfunc]]をご参照ください。
***分数関数 [#n0aca3cc]
 分母が0となる点は,定義域から除外されますので,区間を分割して
   infx=.., supx=...
 オプションを用いて描画することになります。
#ref(bunsuu01a.png)
**無理関数 [#q368f777]
***平方根 [#z2cf1748]
 平方根を求める perl の関数は
   sqrt(....)
 です。
 下の例では,y=√(1-2x) のグラフを描画していますが,
 定義域が x≦1/2 ですから
   <maxx=1/2>
 としておかねばなりません。
&aname(dx);
#ref(sqrt01.png)
-このグラフでは,頂点 (1/2,0) の近傍での変化が激しく,グラフがその変化に追随できていません。~
(画面の png 画像では,あいまいですから,&ref(sqrt01.pdf,,pdf); でご覧ください。~
頂点から垂直に立ち上がらず,斜めに折れた感じになっています。)~
x の刻みをもっと細かくする必要があります。そのためのオプションが~
  <dx=..>~
です。どの程度に細かくするか面倒ですから~
  <dx=*>~
とすれば,自動的に刻み値を決めるオプションもあります。
#ref(sqrt02.png)
-どの程度改善されたかを &ref(sqrt02.pdf,,pdf); でご覧ください。
-微分係数の絶対値が大きくなる場合は,~
  媒介変数表示~
  逆関数~
を利用するのが有効です。下は逆関数のグラフを \XGraph を用いて描画しています。
#ref(sqrt11.png)
***立方根など [#n7c6e1c9]
 立方根は,標準の perl には用意されていません。
   X**(1/3)
 と,べきの形にして処理することになりますが,
   底は正でなければならない
 ということで,x≧0 と x<0 に場合分けして処理をしなければなりません。
#ref(sqrt03.png) 
-これも逆関数の利用が簡潔です。
#ref(sqrt13.png)
**指数関数 [#sisuu]
***底が e [#h4874b34]
 底が e(自然対数の底)の場合は,perl の組み込み関数 exp() が便利です。
#ref(sisuu01.png)
***一般の底 [#dcfe19ca]
 一般の底の場合は,perl のべき演算子 ** を用います。
#ref(sisuu02.png)
***入試問題から [#i7d86f75]
|||LEFT:|c
|2008 横浜国立大学 |&ref(0034200814.tex); |&ref(0034200814fig.png);|
|2007 関西大学 |&ref(2218200701.tex); |&ref(2218200701fig.png);|
**対数関数 [#taisuu]
***自然対数 [#x7f408d4]
 底が e(自然対数の底)の場合は,perl の組み込み関数 log() が便利です。
 真数条件から,定義域の制限を受けることがありますので,
   infx, supx
 を用いて,変域制限を記述する必要があります。
#ref(taisuu01.png)
-$Napier は,emath.pl で定義されている perl の定数で,自然対数の底を表します。 
***一般の底 [#b3075d8a]
 一般の底の場合は,底の変換公式を用いて自然対数で表すことになりますが,
 emath では,perl の関数
   log2(底,真数)
 を用意しています。
#ref(taisuu02.png)
***入試問題から [#p54239d5]
|||LEFT:|c
|2005 山口大学 |&ref(0063200506.tex); |&ref(0063200506fig.png);|
|2005 会津大学 |&ref(1045200511.tex); |&ref(1045200511fig.png);|
**三角関数 [#sankaku]
***三角関数 [#u4ee2084]
 perl の組み込み関数 sin(), cos(), tan() の単位は弧度法(ラジアン)です。
#ref(sankaku01.png)
-$pi は,emath.pl で定義されている perl の定数で,円周率を表します。
-グリッド線を入れてみます。
#ref(sankaku02.png)
-目盛りを打ちます。
#ref(sankaku03.png)
***減衰振動 [#j2cc519d]
 減衰振動 y=e^{-x}sin(X) などは,減衰が早いので,
 振動する前に x軸にへばりついてしまいます。
#ref(gensui01.png)
-「らしく」するには,~
  e^{-x/a}~
  sin(bx)~
  yscale~
などを用いるのも一法でしょう。
#ref(gensui02.png)
***sin(1/x) [#ea6800e2]
 y=sin(1/x) は,x=0 近辺で激しく振動します。
 単純に \YGraph{sin(1/X)} としたのでは,とらえきれません。
#ref(sin1X00.png)
-対応策の一つは~
  区間分割,刻み値の修正~
次の例は,~
  x軸との交点で描画区間を分割し,描画区間の幅に応じて刻み値を修正した~
ものです。
#ref(sin1X01.png)
#ref(sin1X01p.tex,center,上のソースリスト)
-同じ手法で y=x*sin(1/x) を描画してみます。
#ref(Xsin1X01.png)
#ref(Xsin1X01p.tex,center,上のソースリスト)
***入試問題から [#e798ffd2]
|||LEFT:|c
|2005 九州工業大学 |&ref(0071200504.tex); |&ref(0071200504fig.png);|
|2005 北海道工業大学 |&ref(2009200524.tex); |&ref(2009200524fig.png);|
*注意事項 [#x8d6bfcd]
-このコマンドは,perl との連携機能を必要とします。~
したがって,platex を起動するさい~
   platex -shell-escape hoge.tex~
などど,起動オプション~
   -shell-escape
を付加しなければなりません。~
詳しくは[[perlとの連携]]ページをご覧ください。~
(以前は,起動オプションを -sh と省略形で済ますことが出来ましたが,~
最近の platex では,省略形は許されなくなっています。)
*関連事項 [#saf4f63b]
+perl との連携については[[こちら>perlとの連携]]をご覧ください。
//+\YGurafu というコマンドもあります。これについては~
//[[samplePp.pdf>http://homepage3.nifty.com/emath/pdf/samplePp.pdf]]
//をご参照ください。
+[[y=f(x) と y=g(x) の交点>YandY]]
+[[曲線の描画]]
+[[数学III]]
--[[微分法]]
RIGHT:&counter;

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS