Když něco počítám, stávají se někdy pro systém pgf průběžné výsledky velkými. Lze použít knihovnu fpu. Četl jsem o tom v TikZ & PGF příručce (viz strana 627), zde a zde , ale stále se mi zobrazuje tato chyba:

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

Co se děje?

Zde je můj kód:

\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} 

Aktualizovat :

Používám makro z zde (díky Schrödingerova kočka ). Podívejte se na moji 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} 

a získejte stále

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

chybu. Co se mýlím?

Předem děkuji za vaši pomoc a úsilí!

Komentáře

  • I ' nejsem si jistý, zda to lze napravit, protože pgfmath neustále převádí sem a tam mezi registry textu, dimenů a fpu (což je důvod, proč to považuji za tanečního medvěda).
  • Ahoj všichni! Nemá nikdo z profesionálů návrh řešení?
  • Všimněte si, že \pgfkeys{pgf/fpu=false} nebude dělat to, co říká na plechovce, pokud to nebylo nedávno opraveno.
  • Mám pocit, že byste se na to měli zeptat, protože jste již dostali pěknou odpověď. \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\\ } funguje. fpu již nepodporuje několik věcí, včetně manipulace s celými čísly a tohoto druhu extrakce seznamu. Musíte tedy položku extrahovat bez fpu.
  • @ Su-47 Myslím, že odpověď Alaina Matthesa je dobrá. Vezměte prosím na vědomí, že žádný ze systémů nemůže skutečně konkurovat systému počítačové algebry. Radikálně nová verze TeXu by vyžadovala skutečně zrušení vnitřních omezení, ale AFAIK neexistuje žádný plán, jak kdykoli nastavit nový TeX. Vezměte prosím také na vědomí, že IMHO je lepší počkat pomocí expl3, dokud nebude ve stavu, kdy si můžete být jisti, že to, co jste napsali, bude fungovat i za rok. Protože se zdá, že používáte MatLab, můžete pomocí tohoto nástroje data kdykoli vytvořit a poté je vykreslit pomocí pgfplots nebo datavisualization.

Answer

Zní to jako úloha pro LaTeX3 FPU:

\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} 

(Konvence v expl3 je indexovat od 1, protože se to shoduje s nejběžnějším případem použití: sazba. Proto jsem indexoval seznam z jednoho, ale opravil se na index od nuly pro samotnou rovnici.)

Komentáře

  • Dobrý den, @Joseph Wright! Děkuji za odpověď, kterou jsem otestoval. 1. Samozřejmě to funguje, ale proměnná indexu by měla začínat nulou (pro můj speciální účel). 2. Výsledky vaší odpovědi jsou odlišné. Správné výsledky by měly vypadat jako parabola dolů, viz zde . Výsledky vaší odpovědi vypadají jako otevřená vzhůru parabola. Možná dělám něco špatně. 3. Každopádně nemohu ' použít váš odpovězte na mou otázku (viz odkaz výše). Co říkáte?
  • @ Su-47 Nevím ' co myslíte o ' odkazu výše '
  • Odkaz v bodě 2 pravděpodobně ( tex.stackexchange.com/questions/348739/ … ).
  • Dobrý den, @Joseph Wright a @Torbj ø rn T.! Omlouvám se za dlouhou nepřítomnost. Děkuji za vaše komentáře. Torbj ø rn T. má pravdu, myslel jsem tento odkaz . Výsledek je nyní správný. Ale jak jsem řekl ve svém posledním komentáři, nemohu ' t použít výše uvedenou odpověď k vyřešení své další otázky (viz odkaz výše). Pokud správně rozumím, v současné době neexistuje způsob, jak používat pole a fpu společně v TikZ? Existuje jiné řešení, možná jiná datová struktura jako pole?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *