处理重复序列

处理重复序列

我有以下代码来递归计算 arctan(1) 的近似值:

\documentclass[varwidth,border=5]{article}
\usepackage{tikz,pgfplots}
\usepackage{fp}
\usepackage{xfp}
\usetikzlibrary{fixedpointarithmetic}
\usetikzlibrary{math}

\newcommand{\seriefinal}[1]{
  \tikzmath{
  function Impressao(\r){print{$\fpeval{round(\r,6)}$};};
    function serieF(\n) {
      real \s; real \a; real \e;
      \s = 0;
       for \i in {1,...,\n}{
         if isodd(\i+1) == 1 then {
         \s = \s - 1/(2*\i-1); % Computa valor de séries
         };
         if isodd(\i+1) == 0 then {
         \s = \s + 1/(2*\i-1); % Computa valor de séries
         };
         \e = abs(1/(2*\i-1));
       };
      return \s;
    };
    int #1;
     Impressao(serieF(#1));
  }
}

\begin{document}

The approximation for atan(1) is equal to:\seriefinal{10} with an error less than:

\end{document} 

具有 10 个项的系列的值由 \seriefinal{10} 计算得出。此外,我想提供此近似值的误差,计算公式为 \e = abs(1/(2*\i-1))。第一个问题是:

  1. 我不知道如何为函数“serieF”返回两个值,即我想获得总和\s 和错误\e(该函数的两个输出)。
  2. 例如,我想绘制 i=1,2,...,100 的点序列 (\i,serieF(\i))。我该怎么做?谢谢!

答案1

我将这个问题解释为希望避免执行两次递归。也就是说,我不会触及您在函数中构建一些打印的事实(我认为您可能不想这样做)或使用xfp,舍入也可以用 pgf 完成。

重点是您可以使用数组。因此,该函数现在返回value和的元组error。然后您可以通过宏访问错误。

\documentclass[varwidth,border=5]{article}
\usepackage{tikz}
\usepackage{amsmath}
\usepackage{xfp}
\usetikzlibrary{math}

\newcommand{\seriefinal}[1]{%
  \tikzmath{
  function Impressao(\r){print{$\fpeval{round(\r,6)}$};};
  function serieF(\n) {
      real \s; real \a; real \e;
      \s = 0;
      \e = 0;
       for \i in {1,...,\n}{
         if isodd(\i+1) == 1 then {
         \s = \s - 1/(2*\i-1); % 
         };
         if isodd(\i+1) == 0 then {
         \s = \s + 1/(2*\i-1); % 
         };
         \e = abs(1/(2*\i-1));
       };
      return {\s,\e};
    };
    int #1;
    \s = {serieF(#1)}[0];
    \e = {serieF(#1)}[1];
    \errorval{#1}=\e;
    return Impressao(\s);
  }%
}

\begin{document}

The approximation for $\operatorname{atan}(1)$ is equal to \seriefinal{10} 
with an error less than $\errorval{10}$. 

\end{document}

答案2

如果您可以使用 LuaLaTeX 编译文档,则可以使用 Lua 的数学函数库,包括math.atanmath.pi。无需级数近似。

在下面的代码中,使用了\luaexec而不是,而是允许将符号从 TeX 端传递到 Lua 端。 (不提供此功能。)\directlua\luaexec%\%\directlua

在此处输入图片描述

\documentclass{article}
\usepackage{luacode} % for "\luaexec" macro
\begin{document}
$\arctan(1)\approx \luaexec{tex.sprint(string.format("\%.10f",math.atan(1)))}$.

Also, $\pi/4\approx\luaexec{tex.sprint(string.format("\%.10f",math.pi/4))}$.
\end{document}

相关内容