home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / XML Utilities / Professional Programmer XSL IDE / Xselerator25.msi / Data.Cab / F29660_monteCarlo.xsl < prev    next >
Encoding:
Extensible Markup Language  |  2002-04-03  |  5.9 KB  |  191 lines

  1. <xsl:stylesheet version="1.0" 
  2.  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3.  xmlns:vendor="urn:schemas-microsoft-com:xslt"
  4.  xmlns:x="f:fxsl-monteCarlo"
  5.  xmlns:genTest="f:genTest" 
  6.  xmlns:rFloat="f:rFloat"
  7.  exclude-result-prefixes="xsl vendor x 
  8.                           genTest rFloat"
  9.  >
  10.  
  11.   <xsl:import href="random.xsl"/>
  12.   <xsl:import href="iter.xsl"/>
  13.   
  14.   <!-- Fun: GenerateAndTest -->
  15.   <genTest:genTest/>  
  16.   <!-- Fun: rFloat -->
  17.   <rFloat:rFloat/>    
  18.   
  19.   <xsl:variable name="x:st" 
  20.                 select="document('')/*"/>
  21.   
  22.   <xsl:template name="monteCarlo">
  23.     <!-- n (Iterations) -->
  24.     <xsl:param name="arg1" select="1"/>
  25.     <!-- f (fn to be integrated) -->
  26.     <xsl:param name="arg2" select="/.."/>   
  27.     <!-- sx (start of interval for x) -->
  28.     <xsl:param name="arg3"/>                
  29.     <!-- tx (end of interval for x) -->
  30.     <xsl:param name="arg4"/>                
  31.     <!-- sy (start of interval for y) -->
  32.     <xsl:param name="arg5" select="'0'"/>   
  33.     <!-- ty (end of interval for y) -->
  34.     <xsl:param name="arg6"/>                
  35.     <!-- starting seed -->
  36.     <xsl:param name="arg7" select="$seed"/> 
  37.     
  38.     <xsl:variable name="vGenAndTest" 
  39.                   select="$x:st/genTest:*[1]"/>
  40.     <xsl:variable name="vRFloat" 
  41.                   select="$x:st/rFloat:*[1]"/>
  42.     
  43.     <xsl:variable name="vIntRange" 
  44.                   select="$modulus - 1"/>
  45.     
  46. <!-- rndFloatX = rFloat((tx - sx)/dintRange) sx -->
  47.     <xsl:variable name="vrtf-rndFloatX">
  48.       <xsl:call-template name="curry">
  49.         <xsl:with-param name="pNargs" 
  50.                         select="3"/>
  51.         <xsl:with-param name="pFun" 
  52.                         select="$vRFloat"/>
  53.         <xsl:with-param name="arg1" 
  54.              select="($arg4 - $arg3) 
  55.                     div $vIntRange"/>
  56.         <xsl:with-param name="arg2" 
  57.                         select="$arg3"/>
  58.       </xsl:call-template>
  59.     </xsl:variable>
  60.     
  61. <!-- rndFloatY = rFloat((ty - sy)
  62.                     / dintRange) sy -->
  63.     <xsl:variable name="vrtf-rndFloatY">
  64.       <xsl:call-template name="curry">
  65.         <xsl:with-param name="pNargs" 
  66.                         select="3"/>
  67.         <xsl:with-param name="pFun" 
  68.                         select="$vRFloat"/>
  69.         <xsl:with-param name="arg1" 
  70.              select="($arg6 - $arg5) 
  71.                     div $vIntRange"/>
  72.         <xsl:with-param name="arg2" 
  73.                         select="$arg5"/>
  74.       </xsl:call-template>
  75.     </xsl:variable>
  76.     
  77.     <xsl:variable name="vrtfGTParams">
  78.        <cnt>0</cnt>
  79.        <seed>
  80.          <xsl:value-of select="$arg7"/>
  81.        </seed>
  82.     </xsl:variable>
  83.     
  84.     <xsl:variable name="vrtf-GenerateAndTest">
  85.       <xsl:call-template name="curry">
  86.         <xsl:with-param name="pNargs" 
  87.                         select="4"/>
  88.         <xsl:with-param name="pFun" 
  89.                         select="$vGenAndTest"/>
  90.         <xsl:with-param name="arg2" 
  91.          select="vendor:node-set($vrtf-rndFloatX)/*"/>
  92.         <xsl:with-param name="arg3" 
  93.          select="vendor:node-set($vrtf-rndFloatY)/*"/>
  94.         <!-- f --> 
  95.         <xsl:with-param name="arg4" 
  96.                         select="$arg2"/> 
  97.       </xsl:call-template>
  98.     </xsl:variable>
  99.     
  100.     <xsl:variable name="vResultIterations">
  101.       <xsl:call-template name="iter">
  102.         <xsl:with-param name="pTimes" 
  103.                         select="$arg1"/>
  104.         <xsl:with-param name="pFun" 
  105.    select="vendor:node-set($vrtf-GenerateAndTest)/*"/>
  106.         <xsl:with-param name="pX" 
  107.          select="vendor:node-set($vrtfGTParams)/*"/>
  108.       </xsl:call-template>
  109.     </xsl:variable>
  110.     
  111.     <xsl:variable name="vnHits" 
  112.       select="vendor:node-set($vResultIterations)/*[1]"/>
  113.     
  114.     <xsl:variable name="vSpace" 
  115.          select="($arg4 - $arg3) * ($arg6 - $arg5)"/>
  116.     
  117.     <xsl:value-of 
  118.          select="$vnHits div $arg1 * $vSpace"/>
  119.   </xsl:template>
  120.   
  121.   <xsl:template match="genTest:*">
  122.     <!-- (ct, sd) -->
  123.     <xsl:param name="arg1" select="/.."/> 
  124.     <!-- rndFloatX -->
  125.     <xsl:param name="arg2" select="/.."/> 
  126.     <!-- rndFloatY -->
  127.     <xsl:param name="arg3" select="/.."/> 
  128.     <!-- f -->
  129.     <xsl:param name="arg4" select="/.."/> 
  130.     
  131.     <xsl:variable name="vCount" 
  132.                   select="$arg1[1]"/>
  133.     <xsl:variable name="vSeed"  
  134.                   select="$arg1[2]"/>
  135.     
  136.     <xsl:variable name="vNextSeed">
  137.       <xsl:call-template name="randNext">
  138.         <xsl:with-param name="arg1" 
  139.                         select="$vSeed"/>
  140.       </xsl:call-template>
  141.     </xsl:variable>
  142.     
  143.     <xsl:variable name="v-rndX">
  144.       <xsl:apply-templates select="$arg2">
  145.         <xsl:with-param name="arg3" 
  146.                         select="$vSeed"/>
  147.       </xsl:apply-templates> 
  148.     </xsl:variable>
  149.     
  150.     <xsl:variable name="vF-rndX">
  151.       <xsl:apply-templates select="$arg4">
  152.         <xsl:with-param name="arg1" 
  153.                         select="$v-rndX"/>
  154.       </xsl:apply-templates>
  155.     </xsl:variable>
  156.     
  157.     <xsl:variable name="v-rndY">
  158.       <xsl:apply-templates select="$arg3">
  159.         <xsl:with-param name="arg3" 
  160.                         select="$vNextSeed"/>
  161.       </xsl:apply-templates> 
  162.     </xsl:variable>
  163.     
  164.     <xsl:choose>
  165.       <xsl:when test="$vF-rndX >= $v-rndY">
  166.         <cnt>
  167.          <xsl:value-of select="$vCount + 1"/>
  168.         </cnt>
  169.       </xsl:when>
  170.       <xsl:otherwise>
  171.         <cnt>
  172.          <xsl:value-of select="$vCount"/>
  173.         </cnt>
  174.       </xsl:otherwise>
  175.     </xsl:choose>
  176.           <seed>
  177.            <xsl:value-of select="$vNextSeed"/>
  178.           </seed>
  179.     
  180.   </xsl:template>
  181.   
  182.   <!-- computes a*sd + b -->
  183.   <xsl:template match="rFloat:*"> 
  184.     <xsl:param name="arg1"/> <!-- a -->
  185.     <xsl:param name="arg2"/> <!-- b -->
  186.     <xsl:param name="arg3"/> <!-- sd -->
  187.     
  188.     <xsl:value-of select="$arg1*$arg3 + $arg2"/>
  189.     
  190.   </xsl:template>
  191. </xsl:stylesheet>