总和(例如:0+1+2+3 = 6、0+1+2+3+4+5+6+7 = 28 等等)

总和(例如:0+1+2+3 = 6、0+1+2+3+4+5+6+7 = 28 等等)

有人能帮忙吗?我需要知道如何在 Latex 上计算值 S(n) = 0+1+2+3+4...+(n-1)+n 的总和(例如:0+1+2+3 = 6、0+1+2+3+4+5+6+7 = 28 等等)

答案1

当然,困难的任务是生成序列的项,而不是计算和;我提供了一个宏,可以打印所有项或仅打印和。您可以定义不同的起点和另一个差值(默认为 0 和 1)。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\arithmeticsequence}{sO{}m}
 {
  \group_begin:
  \keys_set:nn {rudstep/arseq} { #2 }
  \IfBooleanTF{#1}
   { \rudstep_arseq_sum:n { #3 } }
   { \rudstep_arseq_full:n { #3 } }
  \group_end:
 }

\keys_define:nn { rudstep/arseq }
 {
  diff  .int_set:N = \l_rudstep_diff_int,
  start .int_set:N = \l_rudstep_start_int,
  diff  .initial:n = 1,
  start .initial:n = 0,
 }
\seq_new:N \l_rudstep_terms_seq

\cs_new_protected:Npn \rudstep_arseq_full:n #1
 {
  \seq_clear:N \l_rudstep_terms_seq
  \int_step_inline:nnnn
   { \l_rudstep_start_int } % start
   { \l_rudstep_diff_int }  % step
   { \l_rudstep_start_int + #1*\l_rudstep_diff_int }  % end
   { \seq_put_right:Nn \l_rudstep_terms_seq { ##1 } }
  $\seq_use:Nn \l_rudstep_terms_seq { + } = \rudstep_arseq_sum:n { #1 }$
 }
\cs_new:Npn \rudstep_arseq_sum:n #1
 {
  \int_eval:n { (#1+1)*(2*\l_rudstep_start_int+#1*\l_rudstep_diff_int)/2 }
 }
\ExplSyntaxOff

\begin{document}
Just the sum of five terms after 0: \arithmeticsequence*{5}

The whole sequence: \arithmeticsequence{3}

Or: \arithmeticsequence{4}

Start from 1: \arithmeticsequence[start=1]{3}

\bigskip

A big example: 
\arithmeticsequence[start=81297,diff=198]{180}

\end{document}

在此处输入图片描述

当然,如果你知道如何用 Lisp 来做这件事,那么方法如下:

\documentclass{article}
\usepackage{lisp-on-tex}

\begin{document}

\lispinterp{
  (\define \intsum
    (\lambda (\n)
      (\lispif (\= \n :0 ) :0
        (\+ (\intsum (\- \n :1)) \n))))}

\lispinterp{(\texprint(\intsum:100))}

\end{document}

众所周知,

5050

注:厚颜无耻地改编自的文档lisp-on-tex

相同想法的 e-TeX 版本,使用递归,可以

\documentclass{article}

\newcommand{\Sn}[1]{%
  \number\numexpr #1
    \ifnum\numexpr#1-1>0
      +\expandafter\Sn\expandafter{\number\numexpr#1-1}
    \fi
  \relax
}

\begin{document}

\Sn{10}

\Sn{100}

\end{document}

请注意,这是完全可扩展的。宏\Sn从参数开始,如果参数大于 1,则要求将\Sn参数减少 1 进行扩展。也可以从 0 开始,但我将其留给感兴趣的读者作为练习。

答案2

在此处输入图片描述

\documentclass{article}

\newcommand\foo[1]{\the\numexpr((#1)*(#1+1))/2\relax}

% or if you want to print the terms
\newcommand\foob[1]{$\fooc{#1}{0}=\foo{#1}$}
\newcommand\fooc[2]{\the\numexpr#2\relax\ifnum#1=#2\relax\else+\fooc{#1}{\numexpr#2+1\relax}\fi}

\begin{document}

\foo{8} and \foo{5}

\foob{8} and \foob{5}

\end{document}

答案3

在这种情况下,使用 Lua 可能有点过度,但它展示了如何轻松地将 Lua 集成到 LaTeX 中。

对于刚接触 LaTeX 的程序员来说,代码可能也更容易掌握;)

下面是 LaTeX 脚本的截图

% !TEX TS-program = lualatex
% !TEX encoding = UTF-8 Unicode
\documentclass{article}

\usepackage[utf8]{luainputenc}
\usepackage{luacode}

% The code won't work as-is if you move it into \directlua{}.
% If you do so, be sure to replace "~" (in i ~= startInt) by \string~
\begin{luacode}
    function calcSum(startInt, endInt)
        local sum = 0
        for i=startInt, endInt do
            sum = sum + i
        end
        return sum
    end

    function writeSum(startInt, endInt)
        local sum = 0
        local tex = ""
        for i=startInt, endInt do
            if i ~= startInt then
                tex = tex .. " + "
            end
            sum = sum + i
            tex = tex .. i
        end
        tex = tex .. " = " .. sum
        return tex
    end
\end{luacode}

\def\calcSum#1#2{\directlua{
    tex.print(calcSum(tonumber(#1), tonumber(#2)))
}}
\def\writeSum#1#2{\directlua{
    tex.print(writeSum(tonumber(#1), tonumber(#2)))
}}

\begin{document}
    \noindent
    The sum of the numbers \(0, 1, 2, \ldots, 28\) is \(\calcSum{0}{28}\).\\
    Another sum: \(\writeSum{100}{103}\).
\end{document}

答案4

使用我的包calculator,您可以轻松地进行算术计算。此代码解决了您的问题:

\documentclass{article}
\usepackage{ifthen}
\usepackage{calculator}

  \newcounter{n}
  \newcommand{\sumZeroToN}[2]{%
      \COPY{0}{#2}
      \whiledo{\not{\value{n}>#1}}{%
          \ADD{#2}{\value{n}}{#2}\stepcounter{n}}}

\begin{document}
    \sumZeroToN{100}{\sol}
    \[
         \sum_{n=0}^{100} n = \sol      
    \]
\end{document}

将 1 加到 n

相关内容