.. _Appendix_1_Equation_Format:

##################################
**Appendix 1 数式入力**
##################################

数式入力が指定されているときには，関数を数式で入力します。入力の最後の関数定義が，各入力使用の関数を定義している必要があります。入力形式は，C/C++ 言語 に近い形です。その規則について示します。

1. **コメント行**  
    行の先頭を ``*`` とします。

2. **式の区切り**  
    式の区切りは ``;`` （セミコロン）で示します。1 行に複数の式が入ってもかまいません。また、一つの式が複数行にわたってもかまいません。

3. **数式の終了**  
    数式の最後は ``;;`` （セミコロン 2 個）で示します。

4. **定数**  
    定数は正負の整数定数および浮動小数点定数です。文字間に空白を含めません。

    **例**: ``123``, ``-123``, ``123.``, ``0.123``, ``1.23e4``, ``-1.23e-4``, ``1.23E04``, ``-1.23E+004``  

    **使用不可**: ``1.23+5``, ``1.23d5``, ``1.23D-5``, ``1.23 e-4``

5. **変数**  
    先頭がアルファベット（大文字、小文字）で始まる連結した文字列。大文字と小文字は区別されます。数字を含んでもかまいません。 ``_`` （アンダースコア）以外の特殊文字は使用できません。19 文字以下とします。``PI`` は円周率で予約されています。  

    **例**: ``ABC``, ``abc``, ``Abc``, ``A123``, ``a123``, ``a_123``  

    **使用不可**: ``1abc``, ``a-123``, ``abc#123``

6. **式**  
    次の通常の式が使えます。演算順序は通常の規則に従います。オペランドは、定数、変数および関数とします。  
    
    - ``+``: 加算  
    - ``-``: 減算  
    - ``*``: 乗算  
    - ``/``: 割算（実数値で行われます）  
    - ``**``: べき乗  
    - ``()``: 括弧くくり  

    **例**: ``a+b-c*d/e``, ``-a*(b + c)**d``, ``2**-5``  

    **使用不可**: ``(-2.)**5.``

7. **ライブラリ関数**  
    以下のライブラリ関数が使用できます。定義は C/C++ 言語標準 と同じです。定義域も同様です。これらの関数を使用するときは、引数が定義域内に収まるように注意してください。

    **使用可能な関数**: ``sin``, ``cos``, ``tan``, ``asin``, ``acos``, ``atan``, ``atan2``, ``sinh``, ``cosh``, ``tanh``, ``asinh``, ``acosh``, ``atanh``, ``sqrt``, ``exp``, ``log``, ``log10``

8. **代入文**  
    左辺を変数とし、右辺を定数あるいは式とします。入力で変数と規定された変数以外は、この代入文の前に値が決まっているものとします。  

    .. code-block:: text
        :caption: **例**

        a=1.23;
        b=sin(a*PI/180);


9. **関数定義**  
    入力で変数と規定された変数を入力とする関数を定義できます。 

    .. code-block:: text
        :caption: **例**

        a=1.23; b=a+5;
        f(x)=a*x+sin(b*x**2);
        g(x,t) = f(x)**2+t;
    
    .. code-block:: text
        :caption: **使用不可**

        a=sin(x); f(x)=a**3;;
    
    上記の例は ``a(x)=sin(x); f(x)=a(x)**3;;`` とすれば問題ありません。

10. **関数定義範囲**  

    関数の変数の範囲を以下のように定義できます。範囲定義には ``<`` （less） と ``<=`` （less equal）が使用できます。``>`` ， ``>=`` は使用できません。定義範囲外では値はゼロとします。区分的に定義された関数を加えあわせることができます。

    .. code-block:: text
       :caption: **例 1**

        [x<-10] f1(x)=5*x;
        [-10<=x<=10] f2(x)=10*x**2;
        [10<x] f3(x)=x**3;
        f(x)=f1(x)+f2(x)+f3(x);;

    .. code-block:: text
       :caption: **例 2**

        a=5; b=10;
        [a<=x][b<y] f(x,y)=x*y;;
