Konvertieren Sie eine Latex-Terminologie-Gleichung in eine für Wolfram Alpha geeignete Version

Konvertieren Sie eine Latex-Terminologie-Gleichung in eine für Wolfram Alpha geeignete Version

Ich habe eine Kombinatorik-Frage auf Math Stack Exchange gestellt und folgendes erhaltenLaTeX-ähnliche Antwort. Ich habe versucht, diese Gleichung in etwas umzuwandeln, das Wolfram Alpha verstehen kann; es scheint jedoch nicht zu funktionieren. Irgendwelche Ideen, wie man die Syntax der Gleichung bearbeiten kann? Ich habe unten die verwendete Syntax gepostet.

\[
n!+\sum_{i=1}^{n-1}(-1)^i\sum_{k=1}^i\binom{i-1}{i-k}\binom{n-i}{k}2^k(n-i)!
\]

Antwort1

Inhaltsverzeichnis:

  • erste Antwort mitxintexprund die Formel des OP. Die Implementierung ist erweiterbar ...

  • zweite Antwort mit der Rekurrenzformel gegeben beihttp://oeis.org/A002464. Dieser zweite Ansatz erstellt ein für alle Mal ein Array von Werten des gegebenen Ausdrucks. Er verwendet das Paketbnumexprfür Berechnungen mit großen Ganzzahlen.


Sie können dies mit TeX oder LaTeX berechnen.

In den Codekommentaren werden einige etwas schmerzhafte Details erläutert: Das wichtigste besteht darin, dass die Funktion binomial(x,y) derzeit einen Fehler ausgibt, wenn y>x, anstatt stillschweigend Null zurückzugeben.

\documentclass{article}

\usepackage{xintexpr}[2016/03/12]% 1.2f or more recent needed for binomial

\begin{document}

% unfortunately the default binomial(x,y) function raises an error
% if y>x. Hence define wrapper to intercept the case.
\xintdefiifunc bbinomial(x,y):=if(y>x,0,binomial(x,y));

% unfortunately we can not use \xintdefiifunc F(n):=....; syntax because the
% function variable "n" appears in the summation range. This is current
% limitation, documented in §10.10.3 of xint.pdf.

% Hence we use a macro interface, which will need braces: \myF{10}.

% We employ parentheses around #1 in case
% it is itself some math expression.

% we choose \xintiiexpr rather than \xinttheiiexpr, for efficiency
% if used in other expressions.

\newcommand\myF [1]{% n = #1
   \xintiiexpr (#1)!+
   add((-1)^i % probably faster: ifodd(i, -1, +1)
       *add(binomial(i-1,i-k)*bbinomial((#1)-i,k)*2^k, 
       k=1..i)*((#1)-i)!, 
   i=1..(#1)-1)\relax }

% unfortunately in xintiiexpr, currently 1..0 does not evaluate
% to empty range, but proceeds by negative steps, hence evaluate to
% 1, 0 which we don't want.

% 1..[1]..0 would create such an empty range.
% but further problem is that add(<expression>, i = <range>) syntax
% currently does not work with range being empty.

% Consequently the above expression requires n > 1.

% test
% \xinttheiiexpr seq(\myF{n}, n=2..10)\relax

\medskip
\begin{tabular}{c|r}
  $n$&$F(n)$\\
\hline
\xintFor* #1 in {\xintSeq{2}{20}}
\do
{$#1$&$\xintthe\myF{#1}$\\}
\end{tabular}

\end{document}

Bildbeschreibung hier eingeben


Realistischerer Ansatz, der ein für alle Mal Makros definiert, die sich auf die kombinatorischen Werte erweitern. Basierend auf der Rekurrenzformel.

\documentclass{article}

\usepackage{bnumexpr}

% http://oeis.org/A002464

% If n = 0 or 1 then a(n) = 1; if n = 2 or 3 then a(n) = 0; otherwise a(n) =
% (n+1)*a(n-1) - (n-2)*a(n-2) - (n-5)*a(n-3) + (n-3)*a(n-4)

% 1, 1, 0, 0, 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034

\begin{document}

\begingroup
\makeatletter

\@namedef{F<0>}{1}
\@namedef{F<1>}{1}
\@namedef{F<2>}{0}
\@namedef{F<3>}{0}

\count@=4

\loop
% no \@nameedef in latex
  \expandafter\edef\csname F<\the\count@>\endcsname
       {\thebnumexpr (\count@+1)*\@nameuse{F<\the\numexpr\count@-1>}
                    -(\count@-2)*\@nameuse{F<\the\numexpr\count@-2>}
                    -(\count@-5)*\@nameuse{F<\the\numexpr\count@-3>}
                    +(\count@-3)*\@nameuse{F<\the\numexpr\count@-4>}\relax}%
\ifnum\count@<30
\advance\count@\@ne
\repeat

\count@=0

\ttfamily

http://oeis.org/A002464

\loop
\the\count@: \@nameuse{F<\the\count@>}\endgraf
\ifnum\count@<30
\advance\count@\@ne
\repeat

\endgroup

\end{document}

Bildbeschreibung hier eingeben

Antwort2

Hier ist ein LuaLaTeX-basierter Ansatz zum Berechnen F(n)als Funktion von n. Im Vergleich zu der von Ihnen bereitgestellten Version wurde die Formel etwas umformuliert, um (a) Klammern und eckige Klammern hinzuzufügen, um eine visuelle Gruppierung zu ermöglichen, und (b) erklärenden Text hinzuzufügen, um die äußeren („i“) und inneren („k“) For-Schleifen hervorzuheben.

Die Tabelle beginnt mit n=2„seit F(1)=1trivial“. (F(1) Istübrigens richtig berechnet.) Für die Tabelle habe ich n_{\max}auf 15 gesetzt; tatsächlich erzeugt die Berechnungsmethode keinen Überlauf, solange n<20.

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{amsmath} % for "\binom" macro
\usepackage{luacode} % for "luacode" env. and "\luaexec" macro
\begin{luacode}
-- First, define two helper functions: "factorial" and "mchoose"
function factorial ( n )
   local k
   if n==0 or n==1 then
      return 1
   else
      return n * factorial(n-1)
   end
end

-- 'mchoose' is patterned after the posting in http://stackoverflow.com/a/15302448. 
-- Thanks, @egreg, for pointing me to this posting!
function mchoose( n, k )
     if ( k == 0 or k == n ) then
        return 1
     else
        return ( n * mchoose(n - 1, k - 1)) / k 
     end
end

-- Second, set up the function "F"
function F ( n )
   local i, k, result, kterm
   result = factorial ( n ) 
   for i=1,n-1 do           -- outer loop is entered only if n>1
      kterm=0  -- (re)set "kterm" to 0
      for k=1,i do
         kterm = kterm + mchoose(i-1,i-k) * mchoose(n-i,k) * 2^k 
      end
      result = result + ((-1)^i) * factorial(n-i) * kterm
   end
   return result
end

\end{luacode}

\begin{document}
\[
F(n)=n!+\biggl\{\,
     \underbrace{ \sum_{i=1}^{n-1} (-1)^i (n-i)! \biggl[\,
         \underbrace{\sum_{k=1}^i \binom{i-1}{i-k} \binom{n-i}{k} 2^k}_%
         {\text{inner or $k$ loop}}\biggr]}_%
     {\text{outer or $i$ loop}}\biggr\}
\]

\bigskip
% print values of n and F(n) for n=2,...,15
\[
\begin{array}{@{}rr@{}}
\hline
n & F(n) \\
\hline
\luaexec{for n=2,15,1 do
           tex.sprint(n .. "&" .. math.floor(F(n)) .. "\\\\")
         end}
\hline
\end{array}
\]
\end{document}

verwandte Informationen