Merge commit 'refs/remotes/origin/5.1'
[scilab.git] / scilab / modules / interpolation / help / pt_BR / splin3d.xml
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <refentry version="5.0-subset Scilab" xml:id="splin3d" xml:lang="en"
3           xmlns="http://docbook.org/ns/docbook"
4           xmlns:xlink="http://www.w3.org/1999/xlink"
5           xmlns:svg="http://www.w3.org/2000/svg"
6           xmlns:ns5="http://www.w3.org/1999/xhtml"
7           xmlns:mml="http://www.w3.org/1998/Math/MathML"
8           xmlns:db="http://docbook.org/ns/docbook">
9   <info>
10     <pubdate>$LastChangedDate$</pubdate>
11   </info>
12
13   <refnamediv>
14     <refname>splin3d</refname>
15
16     <refpurpose>interpolação spline em grides 3d</refpurpose>
17   </refnamediv>
18
19   <refsynopsisdiv>
20     <title>Seqüência de Chamamento</title>
21
22     <synopsis>tl = splin3d(x, y, z, v, [order])</synopsis>
23   </refsynopsisdiv>
24
25   <refsection>
26     <title>Parâmetros</title>
27
28     <variablelist>
29       <varlistentry>
30         <term>x,y,z</term>
31
32         <listitem>
33           <para> vetores linhas estritamente crescentes (cada um com pelo
34           menos três componentes) definindo o grid de interpolação 3d</para>
35         </listitem>
36       </varlistentry>
37
38       <varlistentry>
39         <term>v</term>
40
41         <listitem>
42           <para> uma hipermatriz nx x ny x nz (nx, ny, nz sendo de
43           comprimentos de <literal>x</literal>, <literal>y</literal> e
44           <literal>z</literal>, respectivamente)</para>
45         </listitem>
46       </varlistentry>
47
48       <varlistentry>
49         <term>order</term>
50
51         <listitem>
52           <para>(opcional) um vetor 1x3 [kx,ky,kz] dada a ordem do tensor
53           spline em cada direção (o padrão é [4,4,4], i.e. spline tricúbico)
54           </para>
55         </listitem>
56       </varlistentry>
57
58       <varlistentry>
59         <term>tl</term>
60
61         <listitem>
62           <para>um tlist do tipo splin3d definindo o spline</para>
63         </listitem>
64       </varlistentry>
65     </variablelist>
66   </refsection>
67
68   <refsection>
69     <title>Descrição</title>
70
71     <para>Esta função computa um spline tensor 3d <emphasis>s</emphasis> que
72     interpola os pontos <emphasis>(xi,yj,zk,vijk)</emphasis>, i.e., temos
73     <emphasis>s(xi,yj,zk)=vijk</emphasis> para todo
74     <emphasis>i=1,..,nx</emphasis>, <emphasis>j=1,..,ny</emphasis> e
75     <emphasis>k=1,..,nz</emphasis>. O spline resultante <emphasis>s</emphasis>
76     é definido por <literal>tl</literal> que consiste em uma representação
77     B-tensor-spline de <emphasis>s</emphasis>. A avaliação de s em alguns
78     pontos deve ser feita pela função <link linkend="interp3d">interp3d</link>
79     (para computar s e suas derivadas primeiras) ou pela função <link
80     linkend="bsplin3val">bsplin3val</link> (para computar uma derivada
81     arbitrária de s) . Vários tipos de splines podem ser computados
82     selecionando a ordem dos splines em cada direção
83     <literal>order=[kx,ky,kz]</literal>.</para>
84   </refsection>
85
86   <refsection>
87     <title>Observação</title>
88
89     <para>Esta função funciona sob as condições: </para>
90
91     <programlisting>
92        nx, ny, nz &gt;= 3
93        2 &lt;= kx &lt; nx
94        2 &lt;= ky &lt; ny
95        2 &lt;= kz &lt; nz</programlisting>
96
97     <para>Há erro quando estas condições não são respeitadas. </para>
98   </refsection>
99
100   <refsection>
101     <title>Exemplos</title>
102
103     <programlisting role="example">
104 // exemplo 1
105 // =============================================================================
106
107 func =  "v=cos(2*%pi*x).*sin(2*%pi*y).*cos(2*%pi*z)";
108 deff("v=f(x,y,z)",func);
109 n = 10;  // n x n x n  pontos de interpolação
110 x = linspace(0,1,n); y=x; z=x; // grid de interpolação
111 [X,Y,Z] = ndgrid(x,y,z);
112 V = f(X,Y,Z);
113 tl = splin3d(x,y,z,V,[5 5 5]);
114 m = 10000;
115 // computando um erro aproximado
116 xp = grand(m,1,"def"); yp = grand(m,1,"def"); zp = grand(m,1,"def");
117 vp_exact = f(xp,yp,zp);
118 vp_interp = interp3d(xp,yp,zp, tl);
119 er = max(abs(vp_exact - vp_interp))
120 // tente agora com n=20 e veja o erro
121
122
123
124 // exemplo 2 (veja a página de ajuda de linear_interpn que contém o
125 //            mesmo exemplo com interpolação trilinear)
126 // =============================================================================
127
128 exec("SCI/modules/interpolation/demos/interp_demo.sci")
129 func =  "v=(x-0.5).^2 + (y-0.5).^3 + (z-0.5).^2";
130 deff("v=f(x,y,z)",func);
131 n = 5; 
132 x = linspace(0,1,n); y=x; z=x;
133 [X,Y,Z] = ndgrid(x,y,z);
134 V = f(X,Y,Z);
135 tl = splin3d(x,y,z,V);
136 // computando e exibindo o spline interpolante 3d em algumas fatias
137 m = 41;
138 dir = ["z="  "z="  "z="  "x="  "y="];
139 val = [ 0.1   0.5   0.9   0.5   0.5];
140 ebox = [0 1 0 1 0 1];
141 XF=[]; YF=[]; ZF=[]; VF=[];
142 for i = 1:length(val)
143    [Xm,Xp,Ym,Yp,Zm,Zp] = slice_parallelepiped(dir(i), val(i), ebox, m, m, m);
144    Vm = interp3d(Xm,Ym,Zm, tl);
145    [xf,yf,zf,vf] = nf3dq(Xm,Ym,Zm,Vm,1);
146    XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; VF = [VF vf]; 
147    Vp = interp3d(Xp,Yp,Zp, tl);
148    [xf,yf,zf,vf] = nf3dq(Xp,Yp,Zp,Vp,1);
149    XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; VF = [VF vf]; 
150 end
151 nb_col = 128;
152 vmin = min(VF); vmax = max(VF);
153 color = dsearch(VF,linspace(vmin,vmax,nb_col+1));
154 xset("colormap",jetcolormap(nb_col));
155 xbasc(); xset("hidden3d",xget("background"));
156 colorbar(vmin,vmax)
157 plot3d(XF, YF, list(ZF,color), flag=[-1 6 4])
158 xtitle("interpolação por spline 3d da função "+func)
159 xselect()
160 </programlisting>
161   </refsection>
162
163   <refsection>
164     <title>Ver Também</title>
165
166     <simplelist type="inline">
167       <member><link linkend="linear_interpn">linear_interpn</link></member>
168
169       <member><link linkend="interp3d">interp3d</link></member>
170
171       <member><link linkend="bsplin3val">bsplin3val</link></member>
172     </simplelist>
173   </refsection>
174
175   <refsection>
176     <title>Autores</title>
177
178     <simplelist type="vert">
179       <member>R.F. Boisvert, C. De Boor (código da biblioteca FORTRAN CMLIB)
180       </member>
181
182       <member>B. Pincon (interface Scilab)</member>
183     </simplelist>
184   </refsection>
185 </refentry>