pgfmath 给了我错误的计算

pgfmath 给了我错误的计算

我正在尝试用球面坐标绘制一些图,但在计算 PGFPLOTS 中的一些数字时遇到了问题。

我在这里添加了一个 MWE:

\documentclass[12pt]{standalone}
\usepackage[pdftex]{graphicx}
\usepackage{amsmath}
\usepackage{tikz,pgfplots}


\begin{document}

 % compute angles
    \pgfmathsetmacro\a{-pi/5}
    \pgfmathsetmacro\b{pi/10}
    \pgfmathsetmacro\phil{\a-\b}
    \pgfmathsetmacro\phih{\a+\b}
    \pgfmathsetmacro\thetal{\a-\b}
    \pgfmathsetmacro\thetah{\a+\b}

    \pgfmathsetmacro\s{cos(\thetal)*sin(\phil)}
    % this should be about -0.476
    \pgfmathprintnumber{\s}


\end{document}

结果如下:

错误计算

我应该得到 $-0.4755282581475768$

答案1

sincos希望它们的参数以度为单位。但它们也可以通过附加以弧度表示r(手册,第 94.3.4 节)。

\documentclass[12pt]{standalone}
\usepackage[pdftex]{graphicx}
\usepackage{amsmath}
\usepackage{tikz,pgfplots}


\begin{document}

 % compute angles
 %   \pgfmathsetmacro\a{-180/5}
 %   \pgfmathsetmacro\b{180/10}
    \pgfmathsetmacro\a{-pi/5 r}
    \pgfmathsetmacro\b{pi/10 r}
    \pgfmathsetmacro\phil{\a-\b}
    \pgfmathsetmacro\phih{\a+\b}
    \pgfmathsetmacro\thetal{\a-\b}
    \pgfmathsetmacro\thetah{\a+\b}

    \pgfmathsetmacro\s{cos(\thetal)*sin(\phil)}
    % this should be about -0.476
    \pgfmathprintnumber{\s}


\end{document}

答案2

对我来说,我宁愿选择xfp 封装由于它具有广泛的功能列表,并且能够处理大数运算,因此无需这样的限制

在此处输入图片描述

\documentclass[12pt,border=5mm]{standalone}
\usepackage{amsmath}
\usepackage{xfp,siunitx}


\begin{document}
 % compute angles
    \edef\a{-pi/5}
    \edef\b{pi/10}
    \edef\phil{\a-\b}
    \edef\phih{\a+\b}
    \edef\thetal{\a-\b}
    \edef\thetah{\a+\b}

    \edef\s{\fpeval{cos(\thetal)*sin(\phil)}}
    % this should be about -0.476
    \num{\s}
\end{document}

在此处输入图片描述

答案3

一个肮脏又过于复杂的伎俩

% xop.tex
%   run 
% pdflatex xop.tex
% asy xop-*.asy
% pdflatex xop.tex

\documentclass[12pt]{standalone}
\usepackage[pdftex]{graphicx}
\usepackage{amsmath}
\usepackage{tikz,pgfplots}
\usepackage[inline]{asymptote}

\begin{document}

\gdef\setasy#1{\gdef\s{#1}}
\pgfmathsetmacro\s{0}
\begin{asy}
  // compute angles
  real a=-pi/5;
  real b=pi/10;
  real phil=a-b;
  real phih=a+b;
  real thetal=a-b;
  real thetah=a+b;
  real s=cos(thetal)*sin(phil);
  tex("\setasy{"+string(s)+"}");
\end{asy}

\pgfmathprintnumber{\s} (\s)

\end{document}

在此处输入图片描述

相关内容