Gestione ‘quasi automatica’ dei valori numerici in esempi di calcolo ed esercizi svolti ‘asi-automatic’ management of numbers in calculation examples and solved exercises Agostino De Marco Università degli Studi di Napoli “Federico II” guIt Gruppo utilizzatori Italiani di TEX guIt 2012 meeting Università degli Studi di Napoli “Federico II” Napoli, 27 oobre 2012 Gestione ‘quasi automatica’ dei numeri in esercizi svolti Plan of the presentation 1. Introduction 2. Example of solved exercise 3. Example ‘engineered’ with an external tool – Matlab 4. Example ‘engineered’ with an external tool – Mathcad 5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 2 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Introduction Motivations • Organizing a scientific textbook • Examples of calculation & solved exercises • Using internal/external tools to produce numbers • Efficient workflow Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 3 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Introduction A scientific textbook with ‘inserts’ Quaderno 7 Equazioni del moto di un velivolo rigido 7.5 Equazioni del moto longitudinal-simmetrico Va notato, peraltro, che affinché le ipotesi di moto longitudinal-simmetrico restino soddisfatte si deve assumere che il pilota non agisca sui comandi determinando una asimmetria delle azioni esterne, sia aerodinamiche che propulsive. Ciò significa che, ad esempio, gli alettoni e il timone di direzione vengono mantenuti in posizione neutra, (7.44) e che, nel caso di velivoli plurimotore, non si realizza mai un’asimmetria dell’erogazione della spinta. Ad esempio, per un velivolo bimotore dovrà essere ıT;left .t / D ıT;right .t / D ıT .t / ver. 2012.a Copyright © A. De Marco, D. P. Coiro DRAFT i 1 h D C XT cos ˛B C ZT sin ˛B mg cos ˛B sin sin ˛B cos VP D m i 1 h L C ZT cos ˛B XT sin ˛B C mg cos ˛B cos C sin ˛B sin C q mV ˛P B D T x (7.46) E;G D .V cos ˛B / cos C .V sin ˛B / sin zP E;G D .V cos ˛B / sin C .V sin ˛B / cos xB retta di portanza nulla del velivolo parziale zB Le (7.46)-(7.47) possono essere ulteriormente trasformate con l’ausilio della figura 7.4, potendo porre: XT D T cos T ; ZT D T sin T ; MT D T eT C MT? (7.49) dove T è l’angolo formato dalla risultante della spinta con l’asse xB (positivo se il vettore di spinta è in posizione cabrata rispetto all’asse longitudinale) ed eT è l’eccentricità nel piano xB zB dell’asse di spinta rispetto al baricentro (distanza orientata di G dalla direttrice della spinta, negativa se è tale l’intercetta dell’asse di spinta con l’asse zB ). Per un’eccentricità eT D 0 si ha un velivolo con spinta baricentrica; per un calettamento T D 0 si ha un vettore spinta agente lungo l’asse baricentrico xB . Si osservi dalla terza delle (7.49) che, in generale, il sistema propulsivo esercita un momento di beccheggio che si compone di due contributi. Il primo, T eT , è dovuto alla eventuale eccentricità dell’asse di spinta. Il secondo, MT? , è una coppia pura la cui intensità è funzione dell’angolo ˛B C T . Esso è spesso trascurabile nelle normali condizioni di volo ma può divenire — anche in caso di asse di spinta baricentrico ˇ e a calettamento ˇ nullo — tanto più significativo quanto più è grande il valore ˇ˛ C T ˇ, cioè quanto più la condizione di funzionamento dei propulsori si discosta da quella nominale di flusso assiale. Iy qP D MA C MT † xP iT T G (7.45) Pertanto, affinché un moto longitudinal-simmetrico resti tale si deve assumere che il pilota agirà soltanto sui comandi di volo simmetrici, oltre che sulla manetta variando il grado di ammissione ıT . Si ammetterà una legge di comando dell’elevatore ıe .t / non identicamente nulla e, eventualmente, delle leggi non nulle ıs .t / — stabilatore o regolazione del calettamento dell’impennaggio orizzontale —, ıcan .t / — regolazione simmetrica delle alette canard —, ıspoil .t / — azionamento simmetrico degli spoiler —, ıflap .t / e così via. Per semplicità ci limiteremo a considerare d’ora in avanti le sole leggi di comando dell’equilibratore e della manetta. A questo punto è possibile andare a particolarizzare le equazioni generali ricavate ai paragrafi precedenti, valide per un velivolo rigido a massa costante, al caso del volo longitudinal-simmetrico. Si dovranno considerare le equazioni di equilibrio relative alle variabili simmetriche. Queste vanno scelte tra quelle che compaiono nel sistema formato dalle (7.40), (7.11), (2.26) e (2.27). In esse si sostituiscano le condizioni (7.42a)–(7.42c). Si otterrà: ˚ ta e retta di portanza nulla del velivolo parziale (Wing-Body). Le grandezze T e x rappresentate nel disegno sono per definizione positive mentre l’eccentricità eT è negativa. (7.47) P D q Nelle equazioni così ricavate si è tenuto conto delle (7.16) che per le ipotesi fatte diventano: u D V cos ˛B ; w D V sin ˛B (7.48) essendo il vettore velocità VG del baricentro del velivolo contenuto nel suo piano longitudinale. Inoltre, si osservi che il momento d’inerzia Iy che compare nella terza equazione del sistema (7.46) coincide, per le ipotesi di simmetria introdotte, con un momento centrale d’inerzia. L’asse velivolo yB coincide infatti con l’asse centrale d’inerzia e si può porre Iy I , detto anche B D m2 , dove è il raggio d’inerzia corrispondente. A. De Marco, D. P. Coiro – Laurea Magistrale in Ingegneria Aerospaziale, Università degli Studi di Napoli “Federico II” Esempio 7.1: Un modello aerodinamico per il moto a 3-DoF ✎ A partire dal sistema (7.46)-(7.47) valido per un moto a tre gradi di libertà si vanno a ricavare in questo esempio delle equazioni differenziali del moto in forma chiusa. Ad esse sarà possibile associare un insieme di condizioni iniziali e formulare un problema di valori iniziali. Per semplicità si assume una spinta costante ed assegnata. Ciò può ritenersi accettabile qualora, ad esempio, non interessi osservare il fenomeno del moto vario per tempi lunghi ed ci si focalizzi sull’analisi delle risposte del velivolo nel breve periodo — dell’ordine di qualche secondo — successivo all’istante iniziale. Nota la spinta T , insieme con i dati geometrici T ed eT , restano da esplicitare le espressioni che forniscono le azioni aerodinamiche: D, L ed MA . Per quanto riguarda la resistenza aerodinamica si può porre 1 D D V 2 S CD 2 con CD D CD0 C k CLm (7.50) ver. 2012.a Copyright © A. De Marco, D. P. Coiro ıa .t / D ır .t / D 0 17 eT Figura 7.4 Asse di spin- DRAFT 16 Dinamica e simulazione di volo – Quaderni dalle lezioni Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 4 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Introduction A scientific textbook with ‘inserts’ Quaderno 11 Equazioni del moto delle superfici di governo 11.5 Momenti aerodinamici di cerniera ✎Ï Sviluppare un programma per l’integrazione numerica del sistema di equazioni (11.74). Se si sceglie di lavorare con Matlab è possibile utilizzare convenientemente la funzione ode45. Essa può essere predisposta per risolvere sistemi algebrico-differenziali (Differential-Algebraic Equations, DAE) del tipo: M.t; x/ ˚ ˚ xP D f .t; x/ (11.78) dove la matrice di massa ŒM (mass matrix) può avere eventuali righe nulle. Nel caso del moto a comandi liberi la ŒM corrisponde alla matrice di massa a primo membro della (11.74). Essa è definibile impostando un’apposita funzione il cui puntatore sarà reso noto a ode45 attraverso la funzione di utilità odeset. Un possibile esempio di funzione di calcolo della matrice di massa è dato dal listato seguente. function M = MassStickFree(t,x) global ... g ... % gravity acceleration myAC % the aircraft object % Give variable proper names V = x(1); alpha = x(2); q = x(3); xEG = x(4); zEG = x(5); theta = x(6); dot_delta_e = x(7); delta_e = x(8); % Using Matlab built-in ISA model for density [air_Temp, sound_speed, air_pressure, rho] = atmosisa(-zEG); % Aircraft relative density mu_rel = (myAC.W/g)/(rho*myAC.S*myAC.b); DRAFT ver. 2012.a Copyright © A. De Marco, D. P. Coiro % Mass matrix M = eye(8); M(3,2) = ... -(1/(4*mu_rel))*(myAC.mac^2/myAC.k_y^2) ... *(V/myAC.b)*myAC.Cm_alpha_dot; M(3,8) = ... -(1/(4*mu_rel))*(myAC.mac^2/myAC.k_y^2) ... *(V/myAC.b)*myAC.Cm_delta_e_dot; end La funzione MassStickFree può essere salvata in un M-file avente lo stesso nome e conservato nella cartella di lavoro. Si rimanda alla guida in linea di Matlab per i dettagli sulla soluzione di problemi retti da sistemi DAE. ❖ Esercizio 11.2: Angolo di “flottaggio” dell’equilibratore M(7,3) = ... cos(myAC.Lambda_e) ... - myAC.mac_e*myAC.ec_adim*myAC.x_C_e/myAC.k_e^2; M(7,6) = ... -(myAC.mac_e*myAC.ec_adim)/myAC.k_e^2 ... *V*cos(alpha-myAC.mu_x); A. De Marco, D. P. Coiro – Laurea Magistrale in Ingegneria Aerospaziale, Università degli Studi di Napoli “Federico II” Ï A partire dall’esercizio precedente si proceda ad integrare numericamente le equazioni del moto a comandi liberi a (3 C 1)-DoF. Per iniziare, si trovi una condizione di volo equilibrato a quota costante, a comandi bloccati, per assegnate quota e velocità determinando la deflessione ıe;0 corrispondente. Quest’ultima non è altro che la posizione dell’equilibratore che il pilota deve mantenere per proseguire il volo equilibrato. In una prima fase del moto, ad esempio fino al tempo t1 D 1 s, si imponga il volo a comandi bloccati. Stabilito un tempo finale della fimulazione tf D 30 s, per t1 < t tf si consideri un volo a comandi liberi, cioè si immagini che il pilota lasci il comando longitudinale nell’istante t1 . Per semplicità si assuma una deflessione identicamente nulla dell’aletta tab. Si tratti opportunamente il passaggio dalla risoluzione numerica del sistema (11.64) alla risoluzione del sistema (11.74). A tale scopo è opportuno osservare che la soluzione del moto a comandi liberi al tempo t1 , con x7 .t1 / D 0 e x8 .t1 / D ıe;0 , diventa la condizione iniziale della fase di moto successiva a comandi liberi. In questo caso sarà possibile osservare il cosiddetto angolo di “flottaggio” dell’equilibratore, cioè la posizione angolare a cui tende a disporsi la superficie di governo quando viene lasciata libera di ruotare. Verificare che in questa condizione asintotica il momento di cerniera tende ad annullarsi. Confrontare i valori finali della velocità e dell’angolo d’attacco con i valori iniziali V0 ed ˛0 corrispondenti alla condizione di trim scelta. Si riportino in forma di diagramma cartesiano le storie temporali delle variabili di stato. M(7,1) = ... (myAC.mac_e*myAC.ec_adim)/myAC.k_e^2 ... *sin(alpha-myAC.mu_x); M(7,2) = ... ((myAC.mac_e*myAC.ec_adim)/myAC.k_e^2) ... *V*cos(alpha-myAC.mu_x) ... -rho*V*myAC.S_e*myAC.mac_e^2/(4*myAC.I_e) ... *(1 - myAC.DepsDalpha)*myAC.Ch_e_alpha_dot; 35 M(7,8) = ... -rho*V*myAC.S_e*myAC.mac_e^2/(4*myAC.I_e) ... *myAC.Ch_e_delta_e_dot; ❖ Esercizio 11.3: Angolo di “flottaggio” dell’equilibratore ed effetto del trim tab Ï A partire dall’esercizio precedente si studi l’effetto della deflessione di un’eventuale aletta tab sull’angolo di flottaggio dell’equilibratore. Ad esempio, si trovi la deflessione ıt necessaria ad avere un angolo ıe asintotico pari a ıe;0 . Si assegni un valore plausibile al gradiente CHıt , riferendosi, ad esempio, ai grafici della figura 11.14. ❖ ver. 2012.a Copyright © A. De Marco, D. P. Coiro Esercizio 11.1: Soluzione delle equazioni del moto a comandi liberi DRAFT 34 Dinamica e simulazione di volo – Quaderni dalle lezioni Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 5 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise 1. Introduction 2. Example of solved exercise 3. Example ‘engineered’ with an external tool – Matlab 4. Example ‘engineered’ with an external tool – Mathcad 5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 6 / 31 la parte esercitativa e deve quindi preparare una di gestione collezione di esempi di calcolo che andrà inserita A simple example from Aerodynamics lla preparanel testo. olti. Questa Immaginiamo che a un certo punto del suo madagli auto-you are the author of a book on Aerodynamics. Suppose nuale il nostro autore presenti al lettore il concetto i scientifici Somewhere in book you di introduce a basic concept: the li coefficient CL di the “coefficiente portanza” dicendo: esempi di Il coefficiente di portanza ella fase di . CL di un aeromobile che vola alla velocità V si definisce come ratica delle errori tipoL CL = 1 2 (1) tra qui una 2 ρV S rodotti con lche cenno dove L è la portanza aerodinamica (lift), ρ è i LuaLATEX la densità dell’aria alla quota di volo ed S la Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise superficie alare. L’introduzione del concetto di coefficiente di forza si presta ad un esempio calcolo Now you want adimensionale to give a practical example: what is thedi value of CL for a basato sulla formula (1). Volendo fornire al lettore uesgiven to manairplane in cruise flight? preparation un esempio realistico l’autore sceglie un velivolo t exercises. di riferimento, esegue una ricerca per trovarne le Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 7 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise si ipotizza avercalculation annotato i valori numerici necessari, AeccoDopo basic example come si presenterà l’esempio di calcolo: la condizione = mg Tenere traccia di L tutti gli esempi svolti è (2) un impegno che cresce ovviamente con il numero di cioè che la portanza uguaglia il peso del velivolo. esercizi che l’autore intende inserire nel volume. Sulla base dei dati su riportati si calcola il peso Esempio 1 ✎ Alcuni di essi potrebbero essere ben più complessi, altri potrebbero unakgvariazione W = mg essere = 350000 · 9,81 m/s2sul tema Calcoliamo il coefficiente di portanza di un veli(3) rispetto ad alcuni proposti in 6 precedenza. volo Boeing 747-400 che procede alla velocità di = 3,43 · 10 N Pertanto, per manoscritti di grandi dimensioni crociera Vcr = 900 km/h, alla quota h = 11000 m. sarebbe utilediescogitare unadata strategia di lavoro in una forza riferimento dal denominatore Si può assumere una massa m = 350000 kg ed una ed viene automatizzato calcolo dei valori numemembro della il(1) superficie di riferimento S = 541,2 m2 (l’area della acuisecondo rici nonché l’inserimento dei risultati nel sorgente forma in pianta dell’ala). F = 0,5 · 0,364 kg/m3 A Alla quota di volo stabilita, secondo il mo- L TEX. r � �2 Tipicamente nella pratica1000 quotidiana dello di atmosfera standard (ISA, International m/km un autore · 900 km/h (4) di s/h calcolo scientifiStandard Atmosphere), si ha una densità dell’aria utilizza uno o più programmi 3600 co (Octave, ScicosLab, Sagemath, Matlab, Matheρ = 0,364 kg/m3 . · 541,2 m2 = 6,16 · 106 N almeno un eccetera) e conosce Detta g = 9,81 m/s2 l’accelerazione di gravità, matica, Mathcad, linguaggio di programmazione (Python, C++, Forsi ipotizza la condizione Infine, tenendo dellatutti (3), strumenti, il valore diquesti, CL è tran, Java, Lua, conto eccetera); dal rapporto L = mg (2) dato in grado di esportare dati e formattare stringe su 6 file di testo. Molti questi sono esterni W di 3,43 · 10software N cioè che la portanza uguaglia il peso del velivolo. CLTE=X ma=possono essere =utilizzati 0,558 per(5) al sistema so6 F 6,16 · 10 N Sulla base dei dati su riportati si calcola il peso r stituire il metodo ‘carta e penna’ e generare valori numerici affidabili. I numeri così generati potrebW = mg = 350000 kg · 9,81 m/s2 ❖ (3) bero essere conservati in appositi file di testo per = 3,43 · 106 N essere letti in fase di composizione del documento. Check out: initial data, units of measure, decimal digits, intermediate Questo esempio non presenta difficolVa osservato che esiste ancheparticolari la possibilità di ed una forza di riferimento data dal denominatore tà di calcolo. Evidentemente esso èprocesso utile all’interno calculations, final result. effettuare calcoli all’interno del di coma secondo membro della (1) di un testo ad di Aerodinamica di base posizione, esempio usando LuaLAperché: TEX oppure 3 Agostino De F Marco | guIt· Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012un’idea A 8 / 31 • fornisce dell’ordine di grandezza del = 0,5 0,364 kg/m li t in fi a s n b e e p il c r c 2 C p p g b p \relsize{4}\Keyboard\hspace{2pt}% Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise \ComputerMouse}% E Tenere traccia di tutti gli esempi svolti èall’interun An environment for the example L’ambiente myExample viene utilizzato ewcommand\myExampleMarkKeyboardMouse{% Dopo aver annotato i valori numerici necessari, \raisebox{-2pt}[0pt][0pt]{% ecco come si presenterà l’esempio di calcolo: \relsize{4}\Keyboard\hspace{2pt}% \ComputerMouse}% impegno che cresce ovviamente consegue: il numero di no di un documento LATEX come esercizi che l’autore intende inserire nel volume. \begin{myExample} Alcuni di essi potrebbero essere ben più complessi, \noindent% altri potrebbero essere una variazione sul tema ewcommand\myExampleEndMark{% Calcoliamo il coefficiente di portanza di un veli- Calcoliamo il coefficiente di portanza di un rispetto ad alcuni proposti precedenza. velivolo Boeing~747-400 in in volo alla velocità {\ding{118}}% \ding{111} volo Boeing 747-400 che procede alla velocità di di crociera ... Pertanto, per manoscritti di grandi dimensioni crociera V = 900 km/h, alla quota h = 11000 m. cr \end{myExample} environment per gli Esempi sarebbe utile escogitare una strategia di lavoro in Si può assumere una massa m = 350000 kg ed una ewenvironment{myExample}[1][\ding{46}]{% cui automatizzato il calcolo dei valori nume- delIl viene comando di apertura \begin{myExample} superficie di riferimento S = 541,2 m2 (l’area della \begin{myExampleT}% rici nonché per l’inserimento risultati nelvolta sorgente l’ambiente l’esempiodeiapre a sua un teo\adjustbox{% forma in pianta dell’ala). A L TEX.myExampleT ed imposta tipograficamente set Allaheight=1.1\baselineskip, quota di volo stabilita, secondo il mo- rema set di depth=0.5\baselineskip,valign=m, Tipicamente (posizionando nella pratica quotidiana autore dello atmosfera standard (ISA, International l’intestazione in una un fascia grigia center=\linewidth,bgcolor=gray!15}{% utilizza uno o più programmi scientifiStandard Atmosphere), si ha una densità dell’aria larga A di calcolo \linewidth l’intestazione “Esempio 1” e il \adjustbox{left=0.6\linewidth}{% 3 co (Octave, ScicosLab, Matlab, Matheρ = 0,364 kg/m . simbolo della matita Sagemath, giustificato a destra). Il co\myExampleLabelFormat% Detta g = 9,81 m/s2 l’accelerazione di gravità, matica, Mathcad, eccetera) e conosce almeno un }% mando di chiusura \end{myExample} chiude anche linguaggio di programmazione (Python, C++, Forsi \adjustbox{right=0.4\linewidth}{% ipotizza la condizione iltran, teorema tipograficamente la fascia Java, ed Lua,imposta eccetera); tutti strumenti, questi, #1\ % myExample mark di chiusura (con il simbolo ❖ al centro). L = mg (2) grigia } in grado di esportare dati e formattare stringe su } file di testo. Molti di questi software sono esterni cioè che la portanza uguaglia il peso del velivolo. \medskip al sistema TEXnumerici ma possono essere utilizzati per importati daso-file Sulla base dei su riportati si calcola il peso 3 Valori \par\upshape% testodati normale stituire il metodo ‘carta e penna’ e generare valori % numerici affidabili. I numeri così generati potrebCome si può rendere più raffinata l’infrastruttura W = mg = 350000 kg · 9,81 m/s2 \end{myExampleT} (3) del A file di testo bero essereLAconservati in appositi per codice T X che genera l’esempio di calcolo? 6 \smallskip E = 3,43 · 10 N essere letti in fase di composizione del documento. \adjustbox{ La 1 suggerisce possibile organizzazioVafigura osservato che esisteuna anche la possibilità di edset unaheight=0.55\baselineskip, forza di riferimento data dal denominatore ne dei file ecalcoli delle cartelle di un di grandepth=0.11\baselineskip,valign=m, effettuare all’interno del manoscritto processo di coma set secondo membro della (1) center=\linewidth,bgcolor=gray!15}{% diposizione, dimensioni. Tutto ilusando materiale siATtrova nella carad esempio LuaL EX oppure \relsize{-2}\myExampleEndMark% Fr = 0,5 · 0,364 kg/m3 il pacchetto l3fp di LATEmain.tex X3. Vedremo avantiprintella �book root�. Il file è il più sorgente }% Agostino De Marco | g It Gruppo utilizzatori Italiani di T X | IX g Itmeeting, Napoli, 2012 9 / 31 Esempio 1 ✎ . type the rest of LTEX code here Implement a customized environment myExample with the LTEX macro \newenvironment. Manage numbering with ntheorem package. . �u � E u come ciò è possibile. In questa parte l’attenzione è \ComputerMouse}% Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise ArsTEXnica Nº 0, Dicembre 2099 } automatica’ di esempi di calcolo ed esercizi svol Gestione ‘quasi \newcommand\myExampleEndMark{% Seing up the environment myExample {\ding{118}}% \ding{111} } \usepackage{relsize} % font size change % environment per gli Esempi \usepackage{pifont} % for dingbats \newenvironment{myExample}[1][\ding{46}]{% \usepackage{marvosym} % for \Keyboard etc \begin{myExampleT}% \usepackage{mathtools} % for amsmath \adjustbox{% \usepackage{adjustbox} % advanced boxes set height=1.1\baselineskip, \usepackage[amsmath,hyperref]{ntheorem} set depth=0.5\baselineskip,valign=m, % new theorem−like environment center=\linewidth,bgcolor=gray!15}{% \newtheorem{myExampleT}{} \adjustbox{left=0.6\linewidth}{% % myExample label & format \myExampleLabelFormat% \newcommand\myExampleLabel{Esempio} }% \newcommand\myExampleLabelFormat{% \adjustbox{right=0.4\linewidth}{% \textbf{\upshape\hspace{3pt}\myExampleLabel% #1\ % myExample mark \ \themyExampleT}% } } } \newcommand\myExampleMarkPencilKeyboardMouse{% \medskip \bf\ding{46}\ % \par\upshape% testo normale \raisebox{-2pt}[0pt][0pt]{% }{%Figura 1: Organizzazione del materiale relativo agli esem di\end{myExampleT} calcolo in un manoscritto di grandi dimensioni. \relsize{4}\Keyboard\hspace{2pt}% \ComputerMouse}% \smallskip } \adjustbox{ \newcommand\myExampleMarkKeyboardMouse{% set Boeing~747-400 height=0.55\baselineskip, velivolo in volo alla velocità \raisebox{-2pt}[0pt][0pt]{% set depth=0.11\baselineskip,valign=m, di crociera ... \relsize{4}\Keyboard\hspace{2pt}% center=\linewidth,bgcolor=gray!15}{% \end{myExample} \ComputerMouse}% \relsize{-2}\myExampleEndMark% } }% Il comando di apertura \begin{myExample} de \newcommand\myExampleEndMark{% \medskip per l’esempio apre a sua volta un te l’ambiente {\ding{118}}% \ding{111} } rema myExampleT ed imposta tipograficamen } La macro \newtheorem imposta un fascia nuovogrig ti% environment per gli Esempi l’intestazione (posizionando in una \newenvironment{myExample}[1][\ding{46}]{% po larga diNapoli, teorema, chiamato myExampleT. La \linewidth l’intestazione “Esempio 1” Agostino De Marco | g It Gruppo utilizzatori Italiani di T X | IX g Itmeeting, 2012 10 / ma31 e u E u Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Where are we up to? 1. Introduction 2. Example of solved exercise 3. Example ‘engineered’ with an external tool – Matlab 4. Example ‘engineered’ with an external tool – Mathcad 5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 11 / 31 si ipotizza la condizione Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab We want all those numbers … Dopo aver annotato i valori numerici necessari, ecco come si presenterà l’esempio di calcolo: Tenere traccia di L tutti gli esempi svolti è (2) un = mg impegno che cresce ovviamente con il numero di cioè che che la portanza il peso del esercizi l’autore uguaglia intende inserire nelvelivolo. volume. Sulla di base dati su riportati si calcola il peso Esempio 1 ✎ Alcuni essidei potrebbero essere ben più complessi, altri potrebbero essere una variazione 2sul tema Calcoliamo il coefficiente di portanza di un veliW = mg = 350000 kg · 9,81 m/s rispetto ad alcuni proposti in precedenza. (3) volo Boeing 747-400 che procede alla velocità di = 3,43 · 106di N grandi dimensioni Pertanto, per manoscritti crociera Vcr = 900 km/h, alla quota h = 11000 m. sarebbe utilediescogitare unadata strategia di lavoro in Si può assumere una massa m = 350000 kg ed una ed una forza riferimento dal denominatore viene automatizzato calcolo dei valori numesuperficie di riferimento S = 541,2 m2 (l’area della acuisecondo membro della il(1) rici nonché l’inserimento dei risultati nel sorgente forma in pianta dell’ala). 3 A Alla quota di volo stabilita, secondo il mo- L TEX. Fr = 0,5 · 0,364 kg/m Tipicamente � nella pratica quotidiana�un 2 autore dello di atmosfera standard (ISA, International 1000 m/km programmi di calcolo scientifi900 km/h (4) Standard Atmosphere), si ha una densità dell’aria utilizza uno o· più 3600 s/h co (Octave, ScicosLab, Sagemath, Matlab, Matheρ = 0,364 kg/m3 . 2 eccetera) e conosce Detta g = 9,81 m/s l’accelerazione di gravità, matica, Mathcad, · 541,2 m2 = 6,16 · 106 N almeno un linguaggio di programmazione (Python, C++, Forsi ipotizza la condizione Infine, tenendo dellatutti (3), strumenti, il valore diquesti, CL è tran, Java, Lua, conto eccetera); L = mg (2) dato dal rapporto in grado di esportare dati e formattare stringe su file di testo. Molti di questi software sono esterni cioè che la portanza uguaglia il peso del velivolo. W 3,43 · 106 N utilizzati per soal sistema CLTE=X ma=possono essere = 0,558 (5) 6 Sulla base dei dati su riportati si calcola il peso Fr ‘carta 6,16e ·penna’ 10 N e generare valori stituire il metodo 2 numerici affidabili. I numeri così generati potrebW = mg = 350000 kg · 9,81 m/s (3) bero essere conservati in❖ appositi file di testo per = 3,43 · 106 N essere letti in fase di the composizione How many calculation examples have you planned for book? del documento. Va osservato che esiste ancheparticolari la possibilità di Questo esempio non presenta difficoled una forza di riferimento data dal denominatore AT X source? Do you really to type all those numbers incalcoli the Lall’interno effettuare del èprocesso di comtà di calcolo. Evidentemente esso utile all’interno E a secondo membrowant della (1) posizione, esempio usando LuaLAperché: TEX oppure di un testo ad di Aerodinamica di base 3 Agostino De F Marco | guIt· Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012l3fp di LAT X3. Vedremo più avanti 12 / 31 = 0,5 0,364 kg/m il pacchetto li t in fi a s n b e e p il c r c 2 C p p g b p Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Numbers … as results of TEX macros expansions \input{chapter_1/examples/example_1_data} \begin{myExample} \noindent% Calcoliamo il coefficiente di portanza di un velivolo Boeing~747-400 in volo alla velocità di crociera $V_\mathrm{cr}=\SI{\myCruiseSpeedKMH}{km/h}$, alla quota $h=\SI{\myAltitudeMT}{m}$. Si può assumere una massa $m=\SI{\myMassKG}{kg}$ ed una superficie di riferimento $S=\SI{\myWingSurfaceMTsquared}{m^2}$ (l’area della forma in pianta dell’ala). . here we store numbers Alla quota di volo stabilita, secondo il modello di atmosfera standard (ISA, \emph{International Standard Atmosphere}), si ha una densità dell’aria $\rho=\SI{\myAirDensityKGMTcubed}{kg/m^3}$. Detta $g=\SI{\myGravityAccelerationMTSsquared}{m/s^2}$ l’accelerazione di gravità, si ipotizza la condizione \begin{equation}\label{eq:Lift:equal:Weight} L = mg \end{equation} cioè che la portanza uguaglia il peso del velivolo. For each numeric value we want to expand a TEX macro. For correct typeseing we rely on the siunitx package. . Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 13 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Typeseing units ottenuta con il codice: eName); uise); ed{%g}\n’,g); ’,S); ,rho); ); ρ = 0,364 kg/m3 %−−−−−−−−−−−−−−−−−−− nel preambolo \usepackage{siunitx} \sisetup{ load=derived, unitsep=thin, valuesep=thin, decimalsymbol=comma, round-mode=places, expproduct=cdot, group-separator={\thinspace}, sepfour=false } %−−−−−−−−−−−−−−−−−−− ... \[ \rho = \SI[round-precision=3] {\myAirDensityKGMTcubed}{kg/m^3} \] La figura 2 mostra il codice completo del fiρ = che 0,364 kg/m3il testo dell’ele example_1.tex compone sempio 1. Scorrendo il codice LATEX si osserva che l’esempio di calcolo è stato completaAgostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 14 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Numbers … as results of TEX macros expansions . (continued) Sulla base dei dati su riportati si calcola il peso \begin{equation}\label{eq:Weight:calc} \begin{split} W = mg ={}& \SI{\myMassKG}{kg} \cdot \SI{\myGravityAccelerationMTSsquared}{m/s^2} \\ ={}& \underline{\SI{\myLiftN}{N}} \end{split} \end{equation} ed una forza di riferimento data dal numeratore a secondo membro della (\ref{eq:CL:Definition}): \begin{equation}\label{eq:Fr:calc} \begin{split} F_\mathrm{r} ={} & \num{0.5} \cdot \SI{\myAirDensityKGMTcubed}{kg/m^3} \\[2pt] & \cdot \left(\SI{\myCruiseSpeedKMH}{km/h} \, \frac{\SI{1000}{m}}{\SI{3600}{s}}\right)^2 \\[4pt] & \cdot \SI{\myWingSurfaceMTsquared}{m^2} = \underline{\SI{\myReferenceForceN}{N}} \end{split} \end{equation} Infine, il valore di $C_L$ è dato dal rapporto \begin{equation}\label{eq:CL:calc} C_L = \frac{W}{F_\mathrm{r}} = \frac{ \SI{\myLiftN}{N} }{ \SI{\myReferenceForceN}{N} } = \underline{\num{\myCL}} \end{equation} \end{myExample} Segregate macro definitions in a specific file example_1_data.tex Put the above code in a LATEX source named example_1.tex Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 15 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Big projects need good directory structure Promotes good practice. Facilitates the preparation of add-on soware. Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 16 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Externalizing calculations to Matlab main LATEX source pdflatex main.tex main.pdf final PDF of the book \input . example_1.tex LATEX source of the calculation example \input example_1_data.tex TEX macros expanding to numbers Matlab example_1.m M-file producing numbers Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 17 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Producing numbers externally with Matlab h = 11000; % m % calculate: air temperature, sound speed, % pressure, density from ISA model % (aerospace toolbox needed) [T, a, P, rho] = atmosisa( h ); m = 350000; % kg V_cruise = ... convvel(900,’km/h’,’m/s’); % m/s g = 9.81; % m/s^2 S = 541.2; % m^2 L = m*g F_r = 0.5*rho*V_cruise^2*S C_L = L/F_r . % write on file fileName = ’example_1_data.tex’; fileID = fopen(fileName,’w’); fprintf(fileID,’%% -- FILE: %s\n’,fileName); fprintf(fileID, ... ’\\def\\myAltitudeMT{%g}\n’,h); fprintf(fileID, ... ’\\def\\myMassKG{%g}\n’,m); fprintf(fileID, ... ’\\def\\myCruiseSpeedMTS{%g}\n’,V_cruise); fprintf(fileID, ... fprintf(fileID, ... ’\\def\\myCruiseSpeedKMH{%g}\n’, ... convvel(V_cruise,’m/s’,’km/h’)); fprintf(fileID, ... ’\\def\\myGravityAccelerationMTSsquared{%g}\n’,g); fprintf(fileID, ... ’\\def\\myWingSurfaceMTsquared{%g}\n’,S); fprintf(fileID, ... ’\\def\\myAirDensityKGMTcubed{%g}\n’,rho); fprintf(fileID, ... ’\\def\\myReferenceForceN{%g}\n’,F_r); fprintf(fileID, ... ’\\def\\myLiftN{%g}\n’,L); fprintf(fileID, ... ’\\def\\myCL{%g}\n’,C_L); fclose(fileID); M-file: example_1.m Output: file example_1_data.tex Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 18 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab Importing numbers stored on file - % -- FILE: example_1_data.tex \def\myAltitudeMT{11000} \def\myMassKG{350000} \def\myCruiseSpeedMTS{250} \def\myCruiseSpeedKMH{900} \def\myGravityAccelerationMTSsquared{9.81} \def\myWingSurfaceMTsquared{541.2} \def\myAirDensityKGMTcubed{0.363918} \def\myReferenceForceN{6.15476e+06} \def\myLiftN{3.4335e+06} \def\myCL{0.55786} ArsTEXnica Nº 0, Dicembre 2099 Gestione ‘quasi This set of macro definitions is simply loaded within example_1.tex with the command: \input{chapter_1/examples/example_1_data} \begin{myExample} before the macros are used. \noindent% Calcoliamo il of coefficiente di portanza di un velivolo B The \def primitive command TEX enables easy macro re-definitions. $V_\mathrm{cr}=\SI{\myCruiseSpeedKMH}{km/h}$, alla quot Agostino De Marco | guIt Si Gruppo utilizzatori Italiani di TEX | una IX guItmeeting, 2012 19 / 31una può assumere massaNapoli, $m=\SI{\myMassKG}{kg}$ ed Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad Where are we up to? 1. Introduction 2. Example of solved exercise 3. Example ‘engineered’ with an external tool – Matlab 4. Example ‘engineered’ with an external tool – Mathcad 5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 20 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad Problems solved with Mathcad Prime 2 Mathcad Prime 2 is a scientific worksheet soware primarily intended for the verification, validation, documentation and re-use of engineering calculations. Mathcad Express is a free version of Mathcad. ArsT Xnica Nº 0, Dicembre 2099 Agostino De Marco E Calculating the li coefficient with a Mathcad worksheet: PRELIMINARY OPERATIONS Out1 ≔ [[ 999 “myInitialValueA” ]] Initialize output matrix m [ mOut1 ≔ [ 999 PRELIMINARY OPERATIONS AIRCRAFT GENERAL DATA “myInitialValueA” ]] mTOT ≔ 350000 = ⎛⎝7.716(Boeing ⋅ 10 5 ⎞⎠ 747-400) Aircraft mass AIRCRAFT GENERAL DATA W ≔350000 mTOT ⋅ TOT≔ mTOT hASL ≔≔11000 W mTOT ⋅ TOT hASL ≔ 11000 Aircraft = ⎛⎝7.716 ⋅ 10 5 ⎞⎠ weightAircraft mass Above-Sea-Level Aircraft weight (ASL) flight altitude Above-Sea-Level (ASL) flight altitude AIR DENSITY CALCULATION ⋅ Rair ≔ 287 ⋅ ―― ⋅ γair ≔ 1.4 Initialize output matrix (Boeing 747-400) WTOT = ⎛⎝3.5 ⋅ 10 5 ⎞⎠ h = ⎝⎛3.609 ⋅ 105 4⎞ ⎞⎠ ⎛ WASL TOT = ⎝3.5 ⋅ 10 ⎠ hASL = ⎛⎝3.609 ⋅ 10 4 ⎞⎠ WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠ WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠ ISA atmospher model Perfect gas constant of air Air adiabatic index (specific heat coefficient ratio) Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 21 / 31 ⎛⎝7.716 ⎞⎠ esercizi Gestione AIRCRAFT ‘quasi numeri svolti | Example ‘engineered’ with an external tool – Mathcad mTOTautomatica’ ≔ 350000 =dei ⋅ 10 5 in Aircraft mass GENERAL DATA (Boeing 747-400) W ≔350000 mTOT ⋅ TOT≔ mTOT WTOT = ⎛⎝3.5 ⋅ 10 5 ⎞⎠ Aircraft = ⎛⎝7.716 ⋅ 10 5 ⎞⎠ weightAircraft mass WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠ Example with Mathcad – intermediate calculations hASL ≔≔11000 W mTOT ⋅ TOT hASL ≔ 11000 Above-Sea-Level Aircraft weight (ASL) flight altitude Above-Sea-Level (ASL) flight altitude AIR DENSITY CALCULATION ⋅ Rair ≔ 287 ⋅ ―― ⋅ h = ⎛⎝3.609 ⋅ 105 4⎞ ⎞⎠ ⎛ WASL TOT = ⎝3.5 ⋅ 10 ⎠ hASL = ⎛⎝3.609 ⋅ 10 ⎠ Perfect gas constant of air Air adiabatic index (specific heat coefficient ratio) LRISA ≔ −0.0065 ⋅ ― Lapse rate (LR), valid for troposhere only, up to 36000 ft TSL ≔ 288.16 ⋅ Temperature at sea level (SL) f_TISA ((h)) ≔ TSL + LRISA ⋅ h 2 Air temperature at altitude h ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ γair ⋅ Rair ⋅ f_TISA ((h)) ρSL ≔ 1.225 ⋅ ―― 3 Air sound speed at altitude h Air density at sea level −⎛――― + 1⎞ ⎝ LRISA ⋅ Rair ⎠ ⎛ f_TISA ((h)) ⎞ f_σISA ((h)) ≔ ⎜―――― ⎟ TSL ⎝ ⎠ ( )) ≔ ρSL ⋅ f_σISA (h ( )) f_ρISA (h Check results ρ ≔ f_ρISA ⎛⎝hASL⎞⎠ WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠ ISA atmospher model γair ≔ 1.4 f_aISA ((h)) ≔ 4⎞ Power term: Density ratio at altitude h Air density at altitude h ρ = 0.364 ―― 3 FLIGHT SPEED Vcr ≔ 900 WING DATA S ≔ 541.2 a ≔ f_aISA ⎛⎝hASL⎞⎠ = 295.049 ― Vcr Mach ≔ ―― = 0.847 a 2 ⎛ ⎞ −⎜―――― + 1⎟ = 4.257 ⎝ LRISA ⋅ Rair ⎠ W Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 Vcr = 250 ― 22 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad Check results ρ ≔ f_ρISA ⎛⎝hASL⎞⎠ a ≔ f_aISA ⎛⎝hASL⎞⎠ = 295.049 ― ρ = 0.364 ―― 3 Example with Mathcad – write data on file Vcr Mach ≔ ―― = 0.847 a FLIGHT SPEED Vcr ≔ 900 WING DATA SW ≔ 541.2 REFERENCE FORCE 1 Fr ≔ ―⋅ ρ ⋅ Vcr 2 ⋅ SW = ⎛⎝6.153 ⋅ 10 6 ⎞⎠ 2 Vcr = 250 ― 2 WTOT ⎛ ((Mach ⎡ Cround ⎤⎞ LIFT COEFFICIENT = 0.558 , 3)) “myCruiseMach” L ≔ ―― ⎜ ⎢ ⎥⎟ −1 ⎛ Fr , 2⎞⎠ “myCruiseSpeedKMH” ⎟ mOut1 ≔ stack ⎜mOut1 , ⎢ round ⎝Vcr ⋅ ⎥ −1 ⎛ ⎞ ⎛ ⎞ ⎜ ⎢ ⎥⎟ ⎜ ⎢ round ⎜Vcr ⋅ ⎜―⎟ , 2⎟ “myCruiseSpeedMS” ⎥⎟ ⎣ ⎦⎠ ⎝ ⎝ ⎝ ⎠ ⎠ STACK DATA-MACRO COUPLES 2 ⎛ ⎡ ⎛ ⎞ ⎤⎞ mOut1 ≔ stack ⎜mOut1 , ⎢ round ⎜ ⋅ ―, 2⎟ “myGravityAccelerationMTSsquared” ⎥⎟ ⎣ ⎦⎠ ⎝ ⎠−1 , 1⎞ “myMassKG” ⎤⎞ ⎛ ⎝Out1 , ⎡⎣ round ⎛m ≔ Out1 stack ⎦⎠ m ⎝m ⎝ TOT ⋅ ⎠ ⎛⎛ ⎡⎡ ⎛⎛ stack ≔≔ stack , ⎣,round ⎣ round⎝W ⎝STOT mOut1 mOut1 W⋅ ⋅ ⎝m⎝Out1 mOut1 ⎤⎦⎞ , 2, ⎞⎠1⎞⎠“myWingSurfaceMTsquared” “myLiftN” ⎤⎦⎞⎠ ⎠ −2−1 −1 ⎛ ⎡ ⎛ , 1⎞⎠ “myAltitudeMT” ⎤⎦⎞⎠ mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝hASL ⋅ −1 ⎛ ⎡ ⎛ , 3⎞⎠ “myReferenceForceN” ⎤⎦⎞⎠ mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝Fr ⋅ −1 ⎛ ⎛ ⎞ ⎤⎞ ⎡ ⎛ ⋅ ⎞ ⎜ ⎜ ⎟ ⎢ ⎥⎟ mOut1 ≔ stack mOut1 , round Rair ⋅ ⎜――⎟ , 3 “myISAAirGasConstNMTKGK” ⎜⎝ ⎛ ⎜⎝ ⎛ ⎢⎣ ⎡ ⎥⎦⎟⎠ ⎝⎞ ⋅ ⎠ ⎤⎟⎠⎞ mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝CL , 3⎠ “myCL” ⎦⎠ write numbers and TEX macro names ⎛ ⎡ ⎛ ⎞ ⎤⎞ ⎛ ⎞ ⎞⎠ res ≔≔ WRITETEXT a text file Out1 stack ⎜ Out1⎛⎝,“example_1_data.txt” ⎟ “myISALapseRateKMT” ⎟ ⎢ round ⎜LR ⋅ ⎜―⎟ ,, 5Out1 ⎥on ⎣ ⎦⎠ ⎝ ⎝ ⎝ ⎠ ⎠ ⎛ ⎡ WRITE OUTPUT FILES ⎛ ⎞ “myISAAirAdiabaticIndex” ⎤⎦⎞⎠ mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝γair , 2⎠ m . m ⎛ −1 ISA ⎡ ⎛ mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝TSL ⋅ −1 m , 3⎞⎠ “myISAAirTemperatureSeaLevelK” ⎤⎦⎞⎠ Figura 3: Foglio di calcolo Mathcad Prime 2 che genera un file di output testuale con i dati relativi all’esempio 1. Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 −1 23 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad Externalizing calculations to Mathcad main LATEX source pdflatex main.tex main.pdf final PDF of the book \input . example_1.tex LATEX source of the calculation example \parseMathcadOutput example_1_data.txt ⟨number⟩ ⟨tab⟩ ⟨TEX macro name⟩ Mathcad Prime 2 example_1.mcdx Mathcad worksheet producing numbers Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 24 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool H– Mathcad D �31;9 N m e;C Figura 6: Estratto dello svolgimento del tema d’esame della figura 5. I valori numerici co sono stati usati anche per costruire un grafico con il pacchetto pgfplots. Importing numbers stored on file by Mathcad Ala con flap deflessi fileilexample_1_data.txt Per quanto riguarda sistema di ipersostentazione, i dati assegnati permettono di ricavare agevolme 999 "myInitialValueA" per tutte le righe de con flap deflessi. Si ha: 350000 "myMassKG" del problema è ottenu 3432327.5 "myLiftN" Sflap 5;71 m2 possibilità ˛0L;W;flap D ˛0L;W C �˛0L D �0;018 rad C .�0;070 rad/ di program D �0;0 11000 "myAltitudeMT" S S dei file di testo e defi 287 "myISAAirGasConstNMTKGK" 1.4 "myISAAirAdiabaticIndex" macro con il comando Il valore del CM0;f per flap deflessi è calcolabile come: -0.0065 "myISALapseRateKMT" Ecco la porzione d � � � � � � � � 288.16 "myISAAirTemperatureSeaLevelK" CM0 f;flap D CM0 f C CM˛ f ˛0L;W;flap � ˛0L;W D �0;059 C 0;3552 rad�1 � .� ambolo, che definisced ArsT1.225 nica "myISAAirDensitySeaLevelKGMTcubed" X Nº 0, Dicembre 2099 Gestione ‘quasi automatica’ E 0.364 "myAirDensityKGMTcube" file formattati come e avendo ritenuto CM˛;f;flap � CM˛;f . Tale approssimazione può essere evitata se è nota la pendenza 0.847 "myCruiseMach" %% see: http://tex.stacke deflessi. La presenza dell’ala con ipersostentazione attivata determina sul momento di beccheggio de 900 "myCruiseSpeedKMH" � � %% Parse Mathcad outpu ancora più"myCruiseSpeedMS" forte che nel caso di ala con flap retratti CM˛;f;flap > CM˛;f . Si veda la figura 3. 250 la macro \parseMathcadOutput che accetta come\makeatletter Vanno segn 9.81 "myGravityAccelerationMTSsquared" Punto neutro \newread\myMathcadOutp A X (?) argomento il nome del file da leggere applicando LuaL 541.2 "myWingSurfaceMTsquared" E "#2"{ Il punto neutro è quel punto, tipicamente individuato sulla corda media aerodinamica T dell’ala, che \def\parseline#1 6153357.817 "myReferenceForceN" \newcommand{\parseMath coefficiente di ad momento di riga beccheggio delvuota. velivolo costante al variare dell’angolo d’attacco. mo \parseline ogni non sione l3fpDal cari 0.558 "myCL" è calcolato rispetto a un polo coincidente con il baricentro, il punto neutro \def\@tempb{\par}% è la posizione del baricent expl3 (?). Pertanto, il comando che sostituisce la chiamata \openin\myMathcadOut ciascuna riga ⟨T del filemacro un numero La In posizione del punto neutro a comparirà comandi bloccati xO N , intesaincome distanza dal This array of couples (⟨number⟩, name⟩) is parsed in\loop\unless\ifeof\m the adimensionale LATEX a \input all’inizio del file example_1.tex nella EXun aerodinamica, essere valutata sapendo che essa è collegata alla posizione x4.1 O cg del baricentro tram virgola fissapuò seguito da carattere di tabulazione Uso di \read\myMathcadOut source example_1.tex the command: figura è with ilstringa seguente: e da2una delimitata da una coppia di doppi \ifx\@tempa\@tempb CM˛ La prima pos \expandafter\par xO cg � xO N D apici ("). \parseMathcadOutput% CL˛ ;tot \fi interna al mo In questo caso il problema di automatizzazione {chapter_1/examples/example_1_data.txt} \repeat dove C il gradiente della rettadelicato di portanzadi del quelvelivolo completo,compilazione comprendente i con ;tot � CL˛ èall’autore che siL˛presenta è più \closein\myMathcadOu before the macros used. � �} loare risolto agevolmente in precedenza con d’esame Matlab. Nella figura 4 è riportato un tema d" diSH te di eseguire \makeatother �H CL˛ D CLPrime 1� ˛ ;W C CL ˛ ;H perLa versione attuale di Mathcad non d˛ in S Meccanica del divolo gli allievi della laurea composizione Agostino De Marco | guIt Gruppo utilizzatori Italiani TEX | IXper guItmeeting, Napoli, 2012 25 / 31 Ecco la porzione di codice, da inserire � � ˛0L;W D �0;059 C 0;3552 rad�1 � .�0;021 rad/ D �0;0664 nel pre(54) ambolo, che definisce una funzione di lettura dei Low-level TEX programming for \parseMathcadOutput file formattati come example_1_data.txt: one può essere evitata se è nota la pendenza C per la configurazione a flap Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad flap M˛;f;flap %% see: http://tex.stackexchange.com/questions/47519 vata determina sul momento di beccheggio della fusoliera un effetto instabilizzante � %% Parse Mathcad output > C . Si veda la figura 3. M˛;f;flap M˛;f \makeatletter \newread\myMathcadOutput ulla corda media aerodinamica dell’ala, che se assunto come polo dà luogo a un \def\parseline#1 "#2"{\@namedef{#2}{#1}} \newcommand{\parseMathcadOutput}[1]{% ante al variare dell’angolo d’attacco. Dal momento che il momento di beccheggio ro, il punto neutro \def\@tempb{\par}% è la posizione del baricentro che dà luogo a una stabilità neutra. \openin\myMathcadOutput=#1 umero come distanza adimensionale dal bordo d’attacco della corda media N , intesain \loop\unless\ifeof\myMathcadOutput ollegata alla posizione xO cg del baricentro tramite la seguente relazione: bulazione \read\myMathcadOutput to \@tempa di doppi \ifx\@tempa\@tempb\else CM˛ \expandafter\parseline\@tempa xO cg � xO N D (55) CL˛ ;tot \fi zzazione \repeat adi del quelvelivolo completo, comprendente i contributi dell’ala e del piano di coda: \closein\myMathcadOutput � �} Matlab. d" SH \makeatother �H 1� L ˛ ;H pernon d˛ S � 4;60 uale comando \newread un 2012. nuovo canale Forpiù details �seeIl the article on 14, October mA2rsTEXnicadefinisce (56) C 4;245 rad�1 � 1 � 0;361 � � 0;95 2 di lettura chiamato \myMathcadInput. Viene poi 19;04 m Agostino De Marco �1| guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 26 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Where are we up to? 1. Introduction 2. Example of solved exercise 3. Example ‘engineered’ with an external tool – Matlab 4. Example ‘engineered’ with an external tool – Mathcad 5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 27 / 31 Gestione ‘quasiDe automatica’ esercizi svolti | Example ‘engineered’ with"}" internal tools –ALuaL TEX X,nica LATEX3Nº Agostino Marco dei numeri in rsTAE "\\def\\myAltitudeMT{" .. h .. "\\def\\myAltitudeMT{" .. h .. "}" S= 0, Dicembre 2099 ) ) Vcr = tex.print( tex.print( A h= "\\def\\myMassKG{" .. m .. "}" "\\def\\myMassKG{" .. m .. "}" )\\ \documentclass{standalone} ) ρ= tex.print( \usepackage{mathtools,array,siunitx} $C_L$ Fr = tex.print( "\\def\\myWingSurfaceMTsquared{" .. S .. "}" \usepackage{luacode}% easier catcode management & \SI[round-precision=3]{\myCL}{} "\\def\\myWingSurfaceMTsquared{" .. S .. "}" L= )\\ \hline \begin{luacode*} ) tex.print( CL = function myExample1() \end{tabular} tex.print( "\\def\\myAirDensityKGMTcubed{" .. rho .. "}" Vcr = 900*1000/3600; -- m/s \end{document} "\\def\\myAirDensityKGMTcubed{" .. rho .. "}" ) h = 11000; -- m nella quale, ancora, i ) Il codice precedente va compilato con il pro tex.print( m = 350000; -- kg parametrizzati con del tex.print( "\\def\\myGravityAccelerationMTSsquared{" gramma lualatex e produce la seguente tabella S = 541.2; -- m^2 "\\def\\myGravityAccelerationMTSsquared{" Nel sorgente LATEX .. g .. "}" rho = 0.364; -- kg/m^3 .. g .. "}" ) Lua all’interno di un a g = 9.81; -- m/s^2 ) tex.print( m = 350000 W = m*g; -- N Lua kg definisce la funzio "\\def\\myLiftN{" ..SW=..541,2 "}" m2 Fr = 0.5*rho*S*Vcrˆ2; -- Ntex.print( accetta argomenti. Si "\\def\\myLiftN{" .. W .. "}" ) CL = W/Fr; Vcr = 250può m/sessere inserito anc ) tex.print( tex.print( h = 11000 mFr .. "}" tex.print( "\\def\\myReferenceForceN{" ..La "\\def\\myCruiseSpeedMTS{".. Vcr .. "}" funzione myExa "\\def\\myReferenceForceN{" ) .. Fr .. "}" ρ = 0,364 kg/m3 ) riabili necessarie ed ) tex.print( tex.print( Fr = 6,16 · 106 N Infine, tra "\\def\\myCL{" .. CL .. "}"li richiesti. "\\def\\myAltitudeMT{" ..tex.print( h .. "}" 6 L = 3,43 · 10 N "\\def\\myCL{" .. CL .. "}" ) ) la funzione tex.print CL = 0,558 ) end tex.print( ghe formattate (corris \end{luacode*} "\\def\\myMassKG{" .. m end .. "}" example_1_data.tex \end{luacode*} \begin{document} nella quale, ancora, i valori numerici sono stat ) \directlua{myExample1()}% definisce le macro Nel codice che gener tex.print( parametrizzati con delle macro. \renewcommand*{\arraystretch}{1.1} \begin{document} "\\def\\myWingSurfaceMTsquared{" .. S .. "}" l’ambiente document, AT X è stato Nel sorgente L inserito del codice E \begin{tabular}{@{}r@{${}={}$}l@{}} ... ) a Lua attraverso la m LuaLua all’interno \directlua{myExample1()}%\hline invoke function di un ambiente luacode. Il codice tex.print( di \directlua $m$Lua definisce la funzione mento \input{chapter_1/examples/example_1} "\\def\\myAirDensityKGMTcubed{" .. rho .. "}" myExample1() che non & \SI[round-precision=0]{\myMassKG}{kg} ... ) myExample1(), accetta argomenti. Si noti che l’ambiente pensat luacode \\ \end{document} tex.print( nire macro e comunica $S$può essere inserito anche nel preambolo. "\\def\\myGravityAccelerationMTSsquared{" ne. Dopo l’istruzione \ & \SI[round-precision=1] La funzione myExample1() definisce .. gDe.. "}"| g It Gruppo utilizzatori \renewcommand*{\arraystretch}{1.1} Agostino Marco Italiani di TEX | IX guItmeeting, Napoli, 2012 28 /le31 va u Using LuaLTEX $\rho$ Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 \fp_set:Nn \myAirDensityKGMTcubed{ & \calcSI[round-precision=3] Una possibile gestione in LATEX3 dell’esempio di \fn_rho_ISA{ {\myAirDensityKGMTcubed}{kg/m^3} calcolo di questo articolo è la seguente: \fp_use:N \myAltitudeMT \\ } \documentclass{article} $F_\mathrm{r}$ } & \calcSI[round-mode=figures, \fp_new:N \myReferenceForceN \usepackage{expl3}% in preamble scientific-notation=engineering, \fp_set:Nn \myReferenceForceN{ % ... round-precision=3] 0.5 * \fp_use:N \myAirDensityKGMTcubed {\myReferenceForceN}{N} * \fp_use:N \myCruiseSpeedMTS ^2 \ExplSyntaxOn \\ * \fp_use:N \myWingSurfaceMTsquared } % ISA density vs altitude $L$ \fp_new:N \myCL \cs_new:Npn \fn_rho_ISA #1 & \calcSI[round-mode=figures, \fp_set:Nn \myCL{ {1.225*((288.16 - 0.0065*#1)/288.16)^(4.257)} scientific-notation=engineering, \fp_use:N \myLiftN round-precision=3] / \fp_use:N \myReferenceForceN } \newcommand\myExampleFP{% {\myLiftN}{N} } \fp_new:N \myMassKG \\ % similar to siuntix macros, but able \fp_set:Nn \myMassKG{350000} $C_L$ % to manage expressions \fp_new:N \myAltitudeMT & \calcSI[round-precision=3]{\myCL}{} \NewDocumentCommand{ \calcnum } { o m } \fp_set:Nn \myAltitudeMT{11000} \\ \hline { \num[#1]{ \fp_to_scientific:n {#2} } } \fp_new:N \myCruiseSpeedMTS \end{tabular} \NewDocumentCommand{ \calcSI } { o m m } \fp_set:Nn \myCruiseSpeedMTS{900 *1000/3600} \end{document} { \SI[#1]{ \fp_to_scientific:n {#2} }{#3} } \fp_new:N \myWingSurfaceMTsquared \ExplSyntaxOff \fp_set:Nn \myWingSurfaceMTsquared{541.2} Using LATEX3 – package l3fp Questo sorgente compone la stessa tabella ri- \fp_new:N \myLiftN nica 14) AT Xdetails (more in ArsTEX prodotta con LuaL precedente. E al paragrafo \fp_set:Nn \myLiftN{ \fp_use:N \myMassKG * 9.81 } Si esamini la macro \myExampleFP che definisce \fp_new:N \myAirDensityKGMTcubed e assegna le variabili contenenti i dati attraverso \fp_set:Nn \myAirDensityKGMTcubed{ \fn_rho_ISA{ i comandi fp\_new:N e fp\_set:Nn di l3fp. Que\fp_use:N \myAltitudeMT sta macro valuta anche una funzione fn_rho_ISA } definita dall’utente per assegnare il valore della } \fp_new:N \myReferenceForceN densità dell’aria alla quota assegnata. \fp_set:Nn \myReferenceForceN{ Nel preambolo del documento sono definite due13 0.5 * \fp_use:N \myAirDensityKGMTcubed macro di utilità \calcnum e \calcSI con la sintassi * \fp_use:N \myCruiseSpeedMTS ^2 di LATEX3. Esse si basano sulle macro \num e \SI * \fp_use:N \myWingSurfaceMTsquared } \fp_new:N \myCL di siunitx ed accettano espressioni numeriche. Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 29 / 31 Invoke \myExampleFP in document to define and use all macros. A A EXnica Nº 0, Dicem Agostino De Marcodei numeri in esercizi svolti | \\ Gestione ‘quasi automatica’ Example ‘engineered’ with internal tools – LuaLATEX, rsT LTEX3 $V_\mathrm{cr}$ π & \calcSI[round-precision=3] sin = 0,707 {\myCruiseSpeedMTS}{m/s} 4 uasi automatica’ A di esempi di calcolo ed esercizi svolti Using LTEX3 – package l3fp \\ Si \documentclass{standalone} osservi che i comandi di expl3 devono es- $h$ round-precision=3]{\myReferenceForc & \calcSI[round-precision=0]{\myAltitudeMT}{m} sere racchiusi dalle macro \ExplSyntaxOn e \usepackage{mathtools,array,siunitx} \\ \begin{document} \\ \ExplSyntaxOff. \myExampleFP% invokes macros easier catcode management \usepackage{luacode}% $L$ $\rho$ Una possibile gestione in LATEX3 dell’esempio di \begin{luacode*} \renewcommand*{\arraystretch}{1.1} calcolo di questo articolo è la seguente: function myExample1() & \calcSI[round-precision=3] & \SI[round-mode=figures, {\myAirDensityKGMTcubed}{kg/m^3} scientific-notation=engineering, \begin{tabular}{@{}r@{${}={}$}l@{}} \\ \documentclass{article} \hline= 900*1000/3600; -- m/s Vcr round-precision=3]{\myLiftN}{N} $F_\mathrm{r}$ $m$= 11000; -- m & \calcSI[round-mode=figures, h \\ \usepackage{expl3}% in preamble & \calcSI[round-precision=0]{\myMassKG}{kg} scientific-notation=engineering, $C_L$ % ... m \\ = 350000; -- kg round-precision=3] $S$= 541.2; -- m^2 {\myReferenceForceN}{N} S & \SI[round-precision=3]{\myCL}{} \ExplSyntaxOn & \calcSI[round-precision=1] \\ = vs0.364; \\ \hline % ISArho density altitude -- kg/m^3 {\myWingSurfaceMTsquared}{m^2} $L$ g -- m/s^2 \end{tabular} \cs_new:Npn \fn_rho_ISA #1 \\ = 9.81; & \calcSI[round-mode=figures, {1.225*((288.16 - 0.0065*#1)/288.16)^(4.257)} $V_\mathrm{cr}$ scientific-notation=engineering, W = m*g; -N \end{document} & \calcSI[round-precision=3] round-precision=3] Fr = 0.5*rho*S*Vcrˆ2; -- N \newcommand\myExampleFP{% {\myCruiseSpeedMTS}{m/s} {\myLiftN}{N} CL \fp_new:N \myMassKG \\ = W/Fr; \\ \myMassKG{350000} $h$ $C_L$ s-\fp_set:Nn tex.print( \fp_new:N \myAltitudeMT &"\\def\\myCruiseSpeedMTS{".. \calcSI[round-precision=0]{\myAltitudeMT}{m} & \calcSI[round-precision=3]{\myCL}{} e \fp_set:Nn Vcr .. "}" \myAltitudeMT{11000} \\ \\ \hline ) \fp_new:N $\rho$ \myCruiseSpeedMTS \end{tabular} m = 350000 kg \myCruiseSpeedMTS{900 *1000/3600} & \calcSI[round-precision=3] \end{document} tex.print( di \fp_set:Nn \fp_new:N \myWingSurfaceMTsquared {\myAirDensityKGMTcubed}{kg/m^3} S = 541,2 m2 "\\def\\myAltitudeMT{" .. h .. "}" \fp_set:Nn \myWingSurfaceMTsquared{541.2} Questo sorgente compone la stessa tabella ri\\ ) \fp_new:N \myLiftN Vcr = 250 m/s $F_\mathrm{r}$ prodotta con LuaLATEX al paragrafo precedente. \fp_set:Nn \myLiftN{ \fp_use:N \myMassKG * 9.81 } & \calcSI[round-mode=figures, tex.print( Si esamini la macro \myExampleFP che definisce h = 11000 m \fp_new:N \myAirDensityKGMTcubed scientific-notation=engineering, "\\def\\myMassKG{" .. m .. "}" e assegna le variabili contenenti i dati attraverso \fp_set:Nn \myAirDensityKGMTcubed{ round-precision=3] ρ = 0,364 kg/m3 ) \fn_rho_ISA{ {\myReferenceForceN}{N} i comandi fp\_new:N e fp\_set:Nn di l3fp. Que\fp_use:N \myAltitudeMT Fr = 6,16 · 106 N \\ tex.print( sta macro valuta anche una funzione fn_rho_ISA } $L$ "\\def\\myWingSurfaceMTsquared{" .. S .. "}" definita dall’utente per assegnare il valore della L = 3,43 · 106 N } & \calcSI[round-mode=figures, ) \fp_new:N \myReferenceForceN densità dell’aria alla quota assegnata. scientific-notation=engineering, C L = 0,558 \fp_set:Nn \myReferenceForceN{ round-precision=3] tex.print( Nel preambolo del documento sono definite due (more details in ArsTEXnica 14) 0.5 * \fp_use:N \myAirDensityKGMTcubed {\myLiftN}{N} macro di utilità \calcnum e \calcSI con la sintassi "\\def\\myAirDensityKGMTcubed{" .. rho .. "}" * \\ \fp_use:N \myCruiseSpeedMTS ^2 A X3. Esse si basano sulle macro \num e \SI *) \fp_use:N \myWingSurfaceMTsquared } $C_L$ Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEdi X|L IXTgE 30 / 31 uItmeeting, Napoli, 2012 Il codice precedente va compilato co gramma lualatex e produce la seguente Note the custom macro \calcSI nella quale, ancora, i valori numerici s Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Conclusions Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 31 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Conclusions Exercises and calculation examples handled with both external (e.g. Matlab, Mathcad) and internal tools (LuaLATEX, LATEX3). Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 31 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Conclusions Exercises and calculation examples handled with both external (e.g. Matlab, Mathcad) and internal tools (LuaLATEX, LATEX3). Useful techniques for scientific book writers. Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 31 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Conclusions Exercises and calculation examples handled with both external (e.g. Matlab, Mathcad) and internal tools (LuaLATEX, LATEX3). Useful techniques for scientific book writers. The use of external tools makes the proposed method ‘quasi-automatic’. LuaLATEX or package l3fp enables a completely automatic approach. Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 31 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Conclusions Exercises and calculation examples handled with both external (e.g. Matlab, Mathcad) and internal tools (LuaLATEX, LATEX3). Useful techniques for scientific book writers. The use of external tools makes the proposed method ‘quasi-automatic’. LuaLATEX or package l3fp enables a completely automatic approach. For alternative approaches see: PythonTeX (experimental): https://github.com/gpoore/pythontex http://youtu.be/yIO4l0zHGjw Package bashful: http://texdoc.net/pkg/bashful Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 31 / 31 Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3 Conclusions Exercises and calculation examples handled with both external (e.g. Matlab, Mathcad) and internal tools (LuaLATEX, LATEX3). Useful techniques for scientific book writers. The use of external tools makes the proposed method ‘quasi-automatic’. LuaLATEX or package l3fp enables a completely automatic approach. For alternative approaches see: PythonTeX (experimental): https://github.com/gpoore/pythontex http://youtu.be/yIO4l0zHGjw Package bashful: http://texdoc.net/pkg/bashful Thank you for your aention. Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012 31 / 31