在 sagetex 中定义和调用函数未按预期工作

在 sagetex 中定义和调用函数未按预期工作

在下面的代码中,我使用来定义一个返回第 n 个斐波那契数的sagetex函数。我使用,这样函数的内容就不会被排版。然后我使用 调用并打印 的值。但是我收到警告,并且该值被替换为。为什么我明确定义了该值,但 latex 却找不到它?f(n)sagesilentf(10)\sagestrLaTeX Warning: There were undefined references.??

\documentclass{article}
\usepackage{sagetex}
\begin{document}

\begin{sagesilent}
def f(n):
    if n==1 or n==2:
        return 1
    else:
        return f(n-1)+f(n-2)
\end{sagesilent}

$f(10)=\sagestr{f(10)}$

\end{document}

想要的输出:

f(10) = 55

实际产量:

f(10) = ??

答案1

我的回答有点离题。但是当我们有 TeX 时为什么要使用外部软件呢?

\def\fib#1{\ifnum\numexpr#1<3 1\else \the\numexpr \fib{#1-1}+\fib{#1-2}\relax\fi}

$f(10)=\fib{10}$

答案2

消息是LaTeX Warning: There were undefined references.,结果??为您的输出。由于您只调用过 Sage 一次,因此错误出现在以下行中:$f(10)=\sagestr{f(10)}$。的参数 \sagestr必须是字符串,例如“55”,而不是数字 55。由于您的函数输出的是您想要的数字$f(10)=\sage{f(10)}$。更改代码显示它运行正常: 在此处输入图片描述

如果出于某种原因,您想保留该行,$f(10)=\sagestr{f(10)}$那么您可以让函数返回字符串“55”。这可以通过使用str()as in包装您的答案来实现return str(f(n-1)+f(n-2))

$\sage{f(10)}$通过注意是55\sagestr{"f(10)"}不是,数字和字符串输出之间的区别更加清晰f(10)

相关内容