如何将 C++ 代码转换为 Latex 中的数学符号

如何将 C++ 代码转换为 Latex 中的数学符号

我对自己是否做对了有疑问。我有一个 C++ 代码,每当计数器增加时,它都会检查某个项目是否在另一个项目的半径内。此计数器用于序列中的拆分。下面的 C++ 代码用于说明。

int s = 0;
int r=200;
for( int i = 0; i<A.size();++i){
   for( int j = 0; j<P.size();++j){
      if( fRadius(r,P[j],A[i] ) != OUTSIDE)
         ++s;
   }
}
float f = 1000.0/s;

在 Latex 中我写道:

fCountRadius(A,P) = \frac{1000}{\sum_{m=1}^{size(A)} \  1 \ \forall \ fRadius(r,A_m,\{ P_1,P_2,\dots, P_{size(P)} \}) \neq OUTSIDE}

清楚吗?数​​学正确吗?还有更好的选择吗?

答案1

我想将其转化为指示函数的双重求和。因此,可能类似于:

\documentclass{article}
% To make the output fit in the allowed size for TeX.SX:
\usepackage[paperwidth=10cm]{geometry}
\usepackage{mathtools}
\usepackage{unicode-math}

\DeclareRobustCommand\arr[1]{\symbf{#1}}
\DeclareRobustCommand\fRadius{\operatorname{fRadius}}
\DeclareRobustCommand\OUTSIDE{\mathop{\text{\textsc{outside}}}}
\DeclareRobustCommand\ICr{I_{C_r}}

\begin{document}
  \begin{align*}
             r &= 200 \\
    \ICr(x, y) &= \begin{cases}
                    0 &\text{ if } \fRadius (r, x, y)
                      \text{ is } \OUTSIDE \\
                    1 &\text{ otherwise}
                  \end{cases} \\
             s &= \sum_{a \in \arr{A}} \sum_{p \in \arr{P}} \ICr(p, a) \\
             f &= \frac{1000}{s}
  \end{align*}
\end{document}

拟议定义

大多数 C++ 编译器在转换为静态单赋值时,都会以完全相同的方式重构源代码,作为优化过程中的一个步骤。在这种情况下,这些新函数被称为 phi 函数,如果您需要为它们制定一个通用的命名方案,您可以选择φ₁($\phi_1$)等

如果您发现该描述清晰,您甚至可以让您的原始程序看起来更像它。GodBolt 上的所有现代编译器都能够矢量化此代码,以及您编写的代码。

#include <vector>

using Collection = std::vector<int>;

static inline bool fRadius( const int r, const int p, const int a )
{
  return r*r >= p*p + a*a;
}

static inline int indicator_C_r ( const int p, const int a )
{
  constexpr int r = 200;
  return fRadius( r, p, a ) ? 1 : 0;
}

double fCountRadius( const Collection& A, const Collection& P )
{
  int s = 0;

  for ( const auto a : A )
    for ( const auto p : P )
      s += indicator_C_r( p, a );

  return 1000.0 / s;
}

当然还有很多替代方案。一个简洁的常用符号是:定义坐标对的大小‖(p,a)‖,通过规范定义圆内的点集(或袋子,如果可以有重复项),并取其基数。

\documentclass[varwidth]{standalone}
\usepackage{mathtools}
\usepackage{unicode-math}

\begin{document}
\( \left\lvert \left\{
     (p, a) \in P \times A
     : \lVert (p, a) \rVert \leq r
   \right\}\right\rvert
\)
\end{document}

规格

相关内容