Quando eu calculo algo, às vezes torna os resultados provisórios muito grandes para o sistema pgf. Pode-se usar a biblioteca fpu. Li sobre isso no TikZ & PGF manual (consulte a página 627), aqui e aqui , mas ainda recebo este erro:

Paragraph ended before `\pgfflt@readlowlevelfloat` was complete. 

O que está errado?

Aqui está meu código:

\documentclass{scrartcl} \usepackage{tikz} \usetikzlibrary{fpu} \begin{document} %data values: \def\RTable{{100,100.391,100.781,101.172,101.562,101.953,102.343,102.733,103.123,103.513,103.903,104.292,104.682,105.071,105.46,105.849,106.238,106.627,107.016,107.405,107.794,108.182,108.57,108.959,109.347,109.735,110.123,110.51,110.898,111.286,111.673,112.06,112.447,112.835,113.221,113.608,113.995,114.382,114.768,115.155,115.541,115.927,116.313,116.699,117.085,117.47,117.856,118.241,118.627,119.012,119.397,119.782,120.167,120.552,120.936,121.321,121.705,122.09,122.474,122.858,123.242,123.626,124.009,124.393,124.777,125.16,125.543,125.926,126.309,126.692,127.075,127.458,127.84,128.223,128.605,128.987,129.37,129.752,130.133,130.515,130.897}} %prints the result to the console: \pgfkeys{/pgf/fpu} \foreach \i in {0, ..., 80} { \pgfmathparse{abs(\RTable[\i] - 100 - 3.0897 / 8 * \i)}\i, \pgfmathresult\\ } \pgfkeys{/pgf/fpu=false} \end{document} 

Atualizar :

Estou usando uma macro aqui (graças a Gato de Schrödinger ). Veja meu MWE:

\documentclass{scrartcl} \usepackage{tikz} \usetikzlibrary{fpu} \newcommand\pgfmathparseFPU[1]{ \begingroup \pgfkeys{ /pgf/fpu, /pgf/fpu/output format = fixed } \pgfmathparse{#1} \pgfmathsmuggle \pgfmathresult \endgroup} \begin{document} %data values: \def\UABmValues{{14.9, 15.8, 17.7, 18.3, 19, 20, 21.1, 22.2, 24.3, 26.9, 30.1}} %prints the result to the console: \foreach[count = \i from 0] \k in {30, 35, ..., 80} { \pgfmathparseFPU{-25500 / (\UABmValues[\i] / 1000 - 255 / 52) - 5200 - 3.0897 / 8 * \k}\i, \pgfmathresult\\ } \end{document} 

e ainda obtenha um erro

Paragraph ended before `\pgfflt@readlowlevelfloat` was complete. 

. O que estou errado?

Obrigado por sua ajuda e esforço antecipadamente!

Comentários

  • I ' Não tenho certeza se isso pode ser corrigido, pois pgfmath está constantemente convertendo para frente e para trás entre texto, dimen registradores e registros fpu (razão pela qual eu o considero um urso dançarino).
  • Olá a todos! Nenhum dos profissionais tem uma proposta de solução?
  • Observe que \pgfkeys{pgf/fpu=false} não fará o que diz na lata a menos que tenha sido corrigido recentemente.
  • Acho que você deveria fazer uma nova pergunta sobre isso, pois você já obteve uma boa resposta. \foreach[count = \i from 0] \k in {30, 35, ..., 80} { \pgfmathsetmacro{\myval}{\UABmValues[\i]} \pgfmathparseFPU{-25500/(\myval/1000-255/52)-5200-3.0897/8*\k}\i, \pgfmathresult\\ } funciona. A partir de agora, fpu não oferece suporte a algumas coisas, incluindo manipulação de inteiros e este tipo de extração de lista. Portanto, você precisa extrair a entrada sem fpu.
  • @ Su-47 Acho que a resposta de Alain Matthes é boa. Observe que nenhum dos sistemas pode realmente competir com um sistema de álgebra computacional. Uma versão radicalmente nova do TeX seria necessária para realmente eliminar as limitações internas, mas AFAIK, não há planos para configurar um novo TeX. Observe também que IMHO é melhor esperar usando expl3 até que ele esteja em um estado onde você possa ter certeza de que o que você escreveu ainda funcionará em um ano a partir de agora. Já que você parece estar usando MatLab, você sempre pode produzir os dados com esta ferramenta e então plotá-los com pgfplots ou visualização de dados.

Resposta

Parece um trabalho para a FPU LaTeX3:

\documentclass{article} \usepackage{expl3} \ExplSyntaxOn \cs_new_eq:NN \fpeval \fp_eval:n \cs_new_eq:NN \clistitem \clist_item:Nn \cs_new_eq:NN \foreachint \int_step_inline:nnnn \ExplSyntaxOff \begin{document} %data values: \def\RTable{100,100.391,100.781,101.172,101.562,101.953,102.343,102.733,103.123,103.513,103.903,104.292,104.682,105.071,105.46,105.849,106.238,106.627,107.016,107.405,107.794,108.182,108.57,108.959,109.347,109.735,110.123,110.51,110.898,111.286,111.673,112.06,112.447,112.835,113.221,113.608,113.995,114.382,114.768,115.155,115.541,115.927,116.313,116.699,117.085,117.47,117.856,118.241,118.627,119.012,119.397,119.782,120.167,120.552,120.936,121.321,121.705,122.09,122.474,122.858,123.242,123.626,124.009,124.393,124.777,125.16,125.543,125.926,126.309,126.692,127.075,127.458,127.84,128.223,128.605,128.987,129.37,129.752,130.133,130.515,130.897} %prints the result to the console: \foreachint{1}{1}{81}{% #1, \fpeval{abs(\clistitem\RTable{#1} - 100 - 3.0897 / 8 * (#1 - 1))}\\ } \end{document} 

(A convenção em expl3 é indexar de 1, pois isso se alinha com o caso de uso mais comum: composição. Portanto, indexei a lista de um, mas corrigi para indexar de zero para a própria equação.)

Comentários

  • Olá @Joseph Wright! Obrigado pela sua resposta, eu testei. 1. Claro que funciona, mas a variável de índice deve começar por zero (para meu propósito especial). 2. Os resultados da sua resposta são diferentes. Os resultados corretos devem ser parecidos com uma parábola para baixo, consulte aqui . Os resultados da sua resposta parecem uma parábola aberta para cima. Talvez eu tenha feito algo errado. 3. De qualquer forma, não posso ' usar seu responder à minha pergunta (veja o link acima). O que você diz?
  • @ Su-47 Eu não ' não sei o que você quer dizer sobre ' o link acima '
  • O link no ponto 2 provavelmente ( tex.stackexchange.com/questions/348739/ … ).
  • Olá @Joseph Wright e @Torbj ø rn T.! Desculpe pela longa ausência. Obrigado por seus comentários. Torbj ø rn T. está certo, eu quis dizer este link . Agora o resultado está certo. Mas, como disse em meu último comentário, não posso ' usar a resposta acima para resolver minha outra pergunta (consulte o link acima). Se bem entendi, no momento não há como usar matrizes e fpu juntos em TikZ? Existe outra solução, talvez uma outra estrutura de dados como arrays?

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *