我有一张桌子
n x1 x2 x3 x4 x5 ...
3 2 3 6 0 0 ...
4 2 3 7 42 0 ...
5 ...
6 ...
...
假设我们有 4 个数字x1,x2,x3,x4
(情况"n=4"
)。然后必须计算前 1、2 或 3 个数字的所有可能乘积之和,其中根据定义N(1)=1
。
我使用名称N(1), N(2), N(3),...
;然后详细说明:
Case "n=3".
given: (x1,x2,x3) = (2,3,6)
to calc:
N(1) = 1
N(2) = x1 + x2
Case "n=4".
given: (x1,x2,x3,x4) = (2,3,7,42)
to calc:
N(1) = 1
N(2) = x1 + x2
N(3) = x1·x2 + x1·x3 + x2·x3
Case "n=5".
given: (x1,x2,x3,x4,x5) = (....)
to calc:
N(1) = 1
N(2) = x1 + x2
N(3) = x1·x2 + x1·x3 + x2·x3
N(4) = x1·x2·x3 +x1·x2·x4 +x1·x3·x4 +x2·x3·x4
.... .... .... ....
我该怎么做?也许\usetikzlibrary{math}
可以?最好的开始点是什么?
并非真正的 MWE:
\documentclass[]{book}
\usepackage{tikz}
\usetikzlibrary {math}
\begin{document}
\begin{tikzpicture}
\def\List{1,2,3}
%\def\Array{\List}
\tikzmath{
int \i;
for \i in \List {
\N{\i} = (\i)*0.5;
\N{3}=555;
};
}
\node{ \N{3} };
\end{tikzpicture}
\end{document}
答案1
我仍然不完全清楚预期的公式,但我认为这实现了
N(i,list) 仅使用前 i 个元素,所有后续元素都被忽略,因此我们可以定义
define N(i,list)=M(first-i-elements-of-list)
define M(singleton)=1,
M(head,rest)=head*M(rest)+product(rest)
M 的以下递归定义通过扩展起作用,因此可以与符号输入一起使用(x,y,z)
,也可以与数字输入 i 一起使用,从而产生一个可以通过以下方式评估的表达式\inteval
\documentclass{article}
\begin{document}
\ExplSyntaxOn
%
\cs_new:Npn\cis_clist_rest:n#1{
\cis_clist:aux:w#1
}
\cs_new:Npn\cis_clist:aux:w#1,{ }
\cs_new:Npn\cis_M:n#1 {
\int_case:nnF {\clist_count:n{#1}}
{{1}{1}}
{
\clist_item:nn{#1}{1} * (\cis_M:e{\cis_clist_rest:n{#1}})+
\clist_use:en{\cis_clist_rest:n{#1}}{*}
}
}
\cs_generate_variant:Nn\clist_use:nn {en}
\cs_generate_variant:Nn\cis_M:n {e}
\let\cisM\cis_M:n
\ExplSyntaxOff
\parskip\baselineskip
\hrule
M(z) \quad \cisM{z}
\hrule
M(y,z)\quad \cisM{y,z}
\hrule
M(x,y,z)\quad \cisM{x,y,z}
\hrule
M(2)\quad \inteval{\cisM{2}}
\hrule
M(2,3)\quad \inteval{\cisM{2,3}}
\hrule
M(2,3,7)\quad \inteval{\cisM{2,3,7}}
\hrule
M(2,3,7,42)\quad \inteval{\cisM{2,3,7,42}}
\hrule
\end{document}