<?xml version="1.0" encoding="UTF-8"?>
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
          xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
          xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
          xml:id="bsplin3val" xml:lang="ja">
    <refnamediv>
        <refname>bsplin3val</refname>
        <refpurpose>3次元スプラインの任意微分評価関数</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>呼び出し手順</title>
        <synopsis>dfp = bsplin3val(xp, yp, zp, tl, der)</synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>引数</title>
        <variablelist>
            <varlistentry>
                <term>xp, yp, zp</term>
                <listitem>
                    <para>同じ大きさの実数ベクトルまたは行列</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>tl</term>
                <listitem>
                    <para>"splin3d"型のtlistで,
                        3次元テンソルスプライン(以下では<literal>s</literal>と
                        呼びます)を定義します.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>der</term>
                <listitem>
                    <para>
                        3つ要素 <literal>[ox,oy,oz]</literal>のベクトルで,
                        計算する<literal>s</literal>の微分を定義します.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>dfp</term>
                <listitem>
                    <para>
                        <literal>xp</literal>,<literal>yp</literal>および
                        <literal>zp</literal>と同じ大きさのベクトルまたは行列で,
                        これらの点における<literal>s</literal>の要素毎に特定の微分の評価値.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>説明</title>
        <para>
            関数<link linkend="interp3d">interp3d</link>は
            スプライン<literal>s</literal>とその1階の微分のみを計算しますが,
            <literal>bsplin3val</literal>は<literal>s</literal>
            の任意の微分値を計算することができます.
            計算する微分値は引数<literal>der=[ox,oy,oz]</literal>で
            指定されます  :
        </para>
        <para>
            <latex style="display" fontsize="18"
                alt="dfp(i)=∂^{oxoyoz}/(∂^ox.∂^oy.∂^oz) s(xp(i),yp(i),zp(i))">
                dfp(i)=\frac{\partial^{ox\,oy\,oz}}{\partial ^{ox}\,\partial ^{oy}\,\partial ^{oz}}
                        s\left(xp(i),yp(i),zp(i)\right)
            </latex>
        </para>
        <para>
            この場合,<literal>der=[0 0 0]</literal> は
            <emphasis>s</emphasis>, <literal>der=[1 0 0]</literal>は
            <emphasis>ds/dx</emphasis>, <literal>der=[0 1 0]</literal> は
            <emphasis>ds/dy</emphasis>, <literal>der=[1 1 0]</literal>は
            <emphasis>d2s/dxdy</emphasis>, など...に対応します
        </para>
        <para>座標がグリッドの外部の点
            <emphasis>(xp(i),yp(i),zp(i))</emphasis>の場合,関数は0を返します.
        </para>
    </refsection>
    <refsection>
        <title>例</title>
        <programlisting role="example"><![CDATA[
deff("v=f(x,y,z)","v=cos(x).*sin(y).*cos(z)");
deff("v=fx(x,y,z)","v=-sin(x).*sin(y).*cos(z)");
deff("v=fxy(x,y,z)","v=-sin(x).*cos(y).*cos(z)");
deff("v=fxyz(x,y,z)","v=sin(x).*cos(y).*sin(z)");
deff("v=fxxyz(x,y,z)","v=cos(x).*cos(y).*sin(z)");
n = 20;  // n x n x n  補間点
x = linspace(0,2*%pi,n); y=x; z=x; // 補間グリッド
[X,Y,Z] = ndgrid(x,y,z); V = f(X,Y,Z);
tl = splin3d(x,y,z,V,[5 5 5]);
// ある点で f および微係数を計算し,
// スプライン補間値と比較
xp = grand(1,1,"unf",0,2*%pi);
yp = grand(1,1,"unf",0,2*%pi);
zp = grand(1,1,"unf",0,2*%pi);
f_e = f(xp,yp,zp)
f_i = bsplin3val(xp,yp,zp,tl,[0 0 0])
fx_e = fx(xp,yp,zp)
fx_i = bsplin3val(xp,yp,zp,tl,[1 0 0])
fxy_e = fxy(xp,yp,zp)
fxy_i = bsplin3val(xp,yp,zp,tl,[1 1 0])
fxyz_e = fxyz(xp,yp,zp)
fxyz_i = bsplin3val(xp,yp,zp,tl,[1 1 1])
fxxyz_e = fxxyz(xp,yp,zp)
fxxyz_i = bsplin3val(xp,yp,zp,tl,[2 1 1])
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>参照</title>
        <simplelist type="inline">
            <member>
                <link linkend="splin3d">splin3d</link>
            </member>
            <member>
                <link linkend="interp3d">interp3d</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
