diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/asmeconf/examples/asmeconf-lualatex-ode-example.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/asmeconf/examples/asmeconf-lualatex-ode-example.tex | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/asmeconf/examples/asmeconf-lualatex-ode-example.tex b/Master/texmf-dist/doc/latex/asmeconf/examples/asmeconf-lualatex-ode-example.tex new file mode 100644 index 00000000000..6db7d9c08a9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/asmeconf/examples/asmeconf-lualatex-ode-example.tex @@ -0,0 +1,254 @@ +% !TEX TS-program = LuaLaTeX +% !TEX encoding = UTF-8 Unicode +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% This file is an example of using asmeconf with lualatex to solve and plot an ode in a landscape figure. +%% +%% Author: John H. Lienhard V +%% Department of Mechanical Engineering +%% Massachusetts Institute of Technology +%% Cambridge, MA 02139-4307 USA +%% + %========================================================= +%% +%% LICENSE: +%% +%% Copyright (c) 2021 John H. Lienhard +%% Offered under the MIT license: https://ctan.org/license/mit +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[varvw,colorlinks,nofoot]{asmeconf} + +\hypersetup{% + pdftitle={Example of asmconf with LuaLaTeX to solve an ODE}, + pdfkeywords={asmeconf, LuaLaTeX, ODE, pgfplots, landscape figure}, + pdfauthor={John H. Lienhard}, +} + +\usepackage[figuresright]{rotating}% to use a landscape figure + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Now use lua code + +%% Runge-Kutta for simple first-order ODE +\begin{luacode*} +-- Differential equation y’(t) = f(t,y) +-- with f(t,y) = A * y * cos(t+sqrt(1+y)). +-- Initial condition: y(0) = 1 +function f(t,y,A) + return A * y * math.cos(t+math.sqrt(1+y)) +end +-- Code to write PGFplots data as coordinates +function print_RKfour(tMax,npoints,A,option) + local t0 = 0.0 + local y0 = 1.0 + local A = A + local h = (tMax-t0)/(npoints-1) + local t = t0 + local y = y0 + if option~=[[]] then + tex.sprint("\\addplot["..option.."] coordinates{") + else + tex.sprint("\\addplot coordinates{") + end + tex.sprint("("..t0..","..y0..")") + for i=1, npoints do + k1 = h * f(t,y,A) + k2 = h * f(t+h/2,y+k1/2,A) + k3 = h * f(t+h/2,y+k2/2,A) + k4 = h * f(t+h,y+k3,A) + y = y + (k1+2*k2+2*k3+k4)/6 + t = t + h + tex.sprint("("..t..","..y..")") + end + tex.sprint("}") +end +\end{luacode*} + +%% Define a latex macro to call the case to be plotted +\newcommand\addLUADEDplot[4][]{% + \directlua{print_RKfour(#2,#3,#4,[[#1]])}% +} +% SYNTAX: Solution of the initial value problem +% Code assumed t = 0 at start and y(0) = 1 +% #2 is the final time +% #3 is the number of points +% #4 is an amplitude parameter +% #1 are options passed to the pgfplots \addplot function. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% For plotting the results, call pgfplots package + +\usepackage{pgfplots}% load AFTER xcolor, which was already called by asmeconf.cls +\pgfplotsset{compat=newest}% to activate latest features + +\pgfplotsset{% + width=\textwidth,% + height=0.6\textwidth,% + /tikz/font={\sffamily},% + % every axis plot/.style={line width=2pt}, + every axis/.append style={very thick},% see manual page 189 + every minor tick/.append style={very thin,black},% modifies the style `every tick' + every minor grid/.append style={very thin, color=Snow4}, + every major tick/.append style={thin, black},% modifies the style `every minor tick' + every major grid/.append style={thin, color=Snow4}, + major tick length={1.2em}, + minor tick length={0.5em}, +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% This environment will generate the .bib file the first time you run the code +% if the .bib file already exists, it will not be overwritten +\begin{filecontents}{asmeconf-lualatex-ode-example.bib} +@online{fairbairns, + author = {Robin Fairbairns and Sebastian Rahtz and Leonor Barroca}, + title = {A Package for Rotated Objects in \LaTeX}, + version = {2.16d}, + organization = {Comprehensive \TeX\ Archive Network}, + year = {2016}, + url = {https://www.ctan.org/pkg/rotating}, + urldate = {October 2, 2019}, +} +@article{montijano2014, + title = {Numerical methods with {\LuaLaTeX}}, + author = {Juan I. Montijano and Mario P{\'{e}}rez and Luis R{\'{a}}ndez and Juan Luis Varona}, + year = 2014, + volume = 35, + month = {January}, + number = 1, + pages = {51--56}, + journal = {TUGboat}, + url = {https://tug.org/TUGboat/tb35-1/tb109montijano.pdf}, + note = {Open access.} +} +@manual{pgfplots, + title = {Manual for Package \textsc{PGFPLOTS}}, + url = {https://ctan.org/pkg/pgfplots}, + author = {Christian Feuers{\"{a}}nger}, + version = {1.17}, + year = {2020}, + organization = {Comprehensive \TeX\ Archive Network}, + month = feb, + urldate = {January 4, 2021}, +} +@manual{lua, + author = {Roberto {l}erusalimschy and Luiz Henrique {de Figueiredo} and Waldemar Celes}, + title = {{L}ua 5.3 Reference Manual}, + url = {https://www.lua.org/manual/5.3/}, + organization = {Pontifical Catholic University}, + address = {Rio de Janeiro, Brazil}, + year = {2017}, +} +\end{filecontents} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} + +\ConfName{Proceedings of the \texttt{asmeconf} \linebreak International Examples Congress and Exposition} +\ConfAcronym{AIECE21} +\ConfDate{January 20, 2021} +\ConfCity{Cambridge, MA} +\PaperNo{AIECE2021-0001} + +\title{Example of \NoCaseChange{{\upshape\hologo{LuaLaTeX}}} with asmeconf.cls for ODE Integration} + +\SetAuthors{John H.\ Lienhard V\affil{1}\CorrespondingAuthor{lienhard@mit.edu}} +\SetAffiliation{1}{Massachusetts Institute of Technology, Cambridge, MA} + +\maketitle + +\versionfootnote{Version~1.0, \today} + +\keywords{asmeconf, \hologo{LuaLaTeX}, ODE, pgfplots, landscape} + +%%%%%%%%% ABSTRACT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{abstract} +This paper is an example of using \texttt{asmeconf} with {\upshape\hologo{LuaLaTeX}} to solve an ODE initial value problem using a fourth-order Runge-Kutta method and to plot the result using \texttt{PGFPLOTS}. The use of a landscape figure is also illustrated. References are given for further reading. +\end{abstract} + +%%%%%%%%% NOMENCLATURE (OPTIONAL) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{nomenclature} +\entry{$A$}{Constant parameter [--]} +\entry{$t$}{Time [s]} +\entry{$y(t)$}{Position [m]} +\end{nomenclature} + +%%%%%%%%% BODY OF PAPER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Introduction} +\hologo{LuaLaTeX} is built upon the Lua programming language~\cite{lua}. By directly using Lua code in a \LaTeX\ file, we can accomplish a wide range of tasks, as illustrated in the open-access paper by Montijano et al.~\cite{montijano2014}. In the present example, we follow Montijano et al.\ in solving a nonlinear first-order ordinary differential equation and plotting the result---all within a single \LaTeX\ file! + +\section{Solution to an initial value problem} +We consider an initial value problem like that of Montijano et al.: +\begin{equation}\label{eqn:1} +y'(t) = A\cdot y(t) \cos\Big(t + \sqrt{1 + y(t)}\,\Big) \text{ with }y(0)=1 +\end{equation} +Here, $A$ is a constant. We may adopt a fourth-order Runge-Kutta algorithm for the integration, which we shall perform to $t = 30$~s using a 400 point discretization. The details of the Runge-Kutta algorithm and a listing of the code are given in Montijano et al. (You can also read the code in the present \texttt{.tex} file.) + +The algorithm is implemented directly in the preamble of this file, and the results are plotted in Fig.~\ref{fig:1} for $A = \{0.25, 0.5, 0.75, 1.0\}$. Plotting is done using the \texttt{PGFPLOTS} package~\cite{pgfplots}. + +Landscape figures, such as Fig.~\ref{fig:1}, may be produced at full-page size by putting \verb|\usepackage[figuresright]{rotating}| in your \texttt{.tex} file's preamble and using the \texttt{sidewaysfigure*} environment~\cite{fairbairns}. + +\begin{sidewaysfigure*} +\begin{tikzpicture} +\begin{axis}[% + xmin=0., + xmax=30., + ymin=0.0, + ymax=1.1, + xtick={0,5,...,30}, + ytick={0,0.2,...,1.0}, + minor x tick num=4, + minor y tick num=3, + xlabel={Time, $\mathsf{t}$ [s]}, + ylabel={Position, $\mathsf{y}$ [m]}, + xticklabel={$\mathsf{\pgfmathprintnumber{\tick}}$}, + yticklabel={$\mathsf{\pgfmathprintnumber{\tick}}$}, + legend style={ + at={(0.7,0.85)}, + anchor=west, + fill=none, + cells={anchor=west}, + }, + ] +% tMax = 30, npoints = 400, A is the last argument +\addLUADEDplot[color=Purple4,densely dashed,,very thick]{30}{400}{0.25};% color names are from xcolor package + \addlegendentry[fill=white]{$\mathsf{A = 0.25}$}; +\addLUADEDplot[color=Chartreuse4,dashdotted,very thick]{30}{400}{0.5}; + \addlegendentry[fill=white]{$\mathsf{A = 0.5}$}; +\addLUADEDplot[color=Red3,densely dotted,very thick]{30}{400}{0.75}; + \addlegendentry[fill=white]{$\mathsf{A = 0.75}$}; +\addLUADEDplot[color=Blue3,smooth,very thick]{30}{400}{1}; + \addlegendentry[fill=white]{$\mathsf{A = 1}$}; +\end{axis} +\end{tikzpicture} +\caption{A trial of pgfplot with Luacode Runge-Kutta integration\label{fig:1}} +\end{sidewaysfigure*} + + +%%% CONCLUSIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Conclusion} +\hologo{LuaLaTeX} enables numerical computations within a \LaTeX\ environment. By combining this capability with +\texttt{PGFPlots}, the need for separate numerical and/or graphics packages can be reduced. + +%%% ACKNOWLEDGMENTS %%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section*{Acknowledgments} +The example shown in this paper is directly based on an example given by Montijano et al.~\cite{montijano2014}. Additional examples, such as the +Lorenz attractor, are contained in that paper. + + +%%% REFERENCES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\bibliographystyle{asmeconf}%% .bst file following ASME conference format. Do not change. +\bibliography{asmeconf-lualatex-ode-example}%% this bib file will be generated from the filecontents environment upon first run of this .tex file. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\end{document} + |