fixed page breaking of code and exercises

This commit is contained in:
Jan Benda 2020-12-11 23:22:40 +01:00
parent 0380b7a96f
commit 0e30a01a45
13 changed files with 360 additions and 536 deletions

View File

@ -204,7 +204,7 @@ random walk\footnote{A random walk is a simple simulation of Brownian
(listing \ref{chaoticcode}) then in cleaner way (listing (listing \ref{chaoticcode}) then in cleaner way (listing
\ref{cleancode}) \ref{cleancode})
\begin{lstlisting}[label=chaoticcode, caption={Chaotic implementation of the random-walk.}] \begin{pagelisting}[label=chaoticcode, caption={Chaotic implementation of the random-walk.}]
num_runs = 10; max_steps = 1000; num_runs = 10; max_steps = 1000;
positions = zeros(max_steps, num_runs); positions = zeros(max_steps, num_runs);
@ -218,17 +218,14 @@ x = randn(1);
if x<0 if x<0
positions(step, run)= positions(step-1, run)+1; positions(step, run)= positions(step-1, run)+1;
elseif x>0 elseif x>0
positions(step,run)=positions(step-1,run)-1; positions(step,run)=positions(step-1,run)-1;
end end
end end
end end
\end{lstlisting} \end{pagelisting}
\pagebreak[4] \begin{pagelisting}[label=cleancode, caption={Clean implementation of the random-walk.}]
\begin{lstlisting}[label=cleancode, caption={Clean implementation of the random-walk.}]
num_runs = 10; num_runs = 10;
max_steps = 1000; max_steps = 1000;
positions = zeros(max_steps, num_runs); positions = zeros(max_steps, num_runs);
@ -243,7 +240,7 @@ for run = 1:num_runs
end end
end end
end end
\end{lstlisting} \end{pagelisting}
\section{Using comments} \section{Using comments}
@ -275,7 +272,6 @@ avoided:\\ \varcode{ x = x + 2; \% add two to x}\\
make it even clearer.}{Steve McConnell} make it even clearer.}{Steve McConnell}
\end{important} \end{important}
\pagebreak[4]
\section{Documenting functions} \section{Documenting functions}
All pre-defined \matlab{} functions begin with a comment block that All pre-defined \matlab{} functions begin with a comment block that
describes the purpose of the function, the required and optional describes the purpose of the function, the required and optional
@ -335,8 +331,7 @@ used within the context of another function \matlab{} allows to define
within the same file. Listing \ref{localfunctions} shows an example of within the same file. Listing \ref{localfunctions} shows an example of
a local function definition. a local function definition.
\pagebreak[3] \pageinputlisting[label=localfunctions, caption={Example for local
\lstinputlisting[label=localfunctions, caption={Example for local
functions.}]{calculateSines.m} functions.}]{calculateSines.m}
\emph{Local function} live in the same \entermde{m-File}{m-file} as \emph{Local function} live in the same \entermde{m-File}{m-file} as

View File

@ -59,14 +59,14 @@ every opening parenthesis must be matched by a closing one or every
respective error messages are clear and the editor will point out and respective error messages are clear and the editor will point out and
highlight most syntax errors. highlight most syntax errors.
\begin{lstlisting}[label=syntaxerror, caption={Unbalanced parenthesis error.}] \begin{pagelisting}[label=syntaxerror, caption={Unbalanced parenthesis error.}]
>> mean(random_numbers >> mean(random_numbers
| |
Error: Expression or statement is incorrect--possibly unbalanced (, {, or [. Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.
Did you mean: Did you mean:
>> mean(random_numbers) >> mean(random_numbers)
\end{lstlisting} \end{pagelisting}
\subsection{Indexing error}\label{index_error} \subsection{Indexing error}\label{index_error}
Second on the list of common errors are the Second on the list of common errors are the
@ -125,7 +125,7 @@ dimensions. The command in line 7 works due to the fact, that matlab
automatically extends the matrix, if you assign values to a range automatically extends the matrix, if you assign values to a range
outside its bounds. outside its bounds.
\begin{lstlisting}[label=assignmenterror, caption={Assignment errors.}] \begin{pagelisting}[label=assignmenterror, caption={Assignment errors.}]
>> a = zeros(1, 100); >> a = zeros(1, 100);
>> b = 0:10; >> b = 0:10;
@ -136,7 +136,7 @@ outside its bounds.
>> size(a) >> size(a)
ans = ans =
110 1 110 1
\end{lstlisting} \end{pagelisting}
\subsection{Dimension mismatch error} \subsection{Dimension mismatch error}
Similarly, some arithmetic operations are only valid if the variables Similarly, some arithmetic operations are only valid if the variables
@ -154,7 +154,7 @@ in listing\,\ref{dimensionmismatch} does not throw an error but the
result is something else than the expected elementwise multiplication. result is something else than the expected elementwise multiplication.
% XXX Some arithmetic operations make size constraints, violating them leads to dimension mismatch errors. % XXX Some arithmetic operations make size constraints, violating them leads to dimension mismatch errors.
\begin{lstlisting}[label=dimensionmismatch, caption={Dimension mismatch errors.}] \begin{pagelisting}[label=dimensionmismatch, caption={Dimension mismatch errors.}]
>> a = randn(100, 1); >> a = randn(100, 1);
>> b = randn(10, 1); >> b = randn(10, 1);
>> a + b >> a + b
@ -171,7 +171,7 @@ result is something else than the expected elementwise multiplication.
>> size(c) >> size(c)
ans = ans =
100 10 100 10
\end{lstlisting} \end{pagelisting}
@ -239,7 +239,7 @@ but it requires a deep understanding of the applied functions and also
the task at hand. the task at hand.
% XXX Converting a series of spike times into the firing rate as a function of time. Many tasks can be solved with a single line of code. But is this readable? % XXX Converting a series of spike times into the firing rate as a function of time. Many tasks can be solved with a single line of code. But is this readable?
\begin{lstlisting}[label=easyvscomplicated, caption={One-liner versus readable code.}] \begin{pagelisting}[label=easyvscomplicated, caption={One-liner versus readable code.}]
% the one-liner % the one-liner
rate = conv(full(sparse(1, round(spike_times/dt), 1, 1, length(time))), kernel, 'same'); rate = conv(full(sparse(1, round(spike_times/dt), 1, 1, length(time))), kernel, 'same');
@ -248,7 +248,7 @@ rate = zeros(size(time));
spike_indices = round(spike_times/dt); spike_indices = round(spike_times/dt);
rate(spike_indices) = 1; rate(spike_indices) = 1;
rate = conv(rate, kernel, 'same'); rate = conv(rate, kernel, 'same');
\end{lstlisting} \end{pagelisting}
The preferred way depends on several considerations. (i) How deep is The preferred way depends on several considerations. (i) How deep is
your personal understanding of the programming language? (ii) What your personal understanding of the programming language? (ii) What
@ -291,7 +291,7 @@ example given in the \matlab{} help and assume that there is a
function \varcode{rightTriangle()} (listing\,\ref{trianglelisting}). function \varcode{rightTriangle()} (listing\,\ref{trianglelisting}).
% XXX Slightly more readable version of the example given in the \matlab{} help system. Note: The variable name for the angles have been capitalized in order to not override the matlab defined functions \code{alpha, beta,} and \code{gamma}. % XXX Slightly more readable version of the example given in the \matlab{} help system. Note: The variable name for the angles have been capitalized in order to not override the matlab defined functions \code{alpha, beta,} and \code{gamma}.
\begin{lstlisting}[label=trianglelisting, caption={Example function for unit testing.}] \begin{pagelisting}[label=trianglelisting, caption={Example function for unit testing.}]
function angles = rightTriangle(length_a, length_b) function angles = rightTriangle(length_a, length_b)
ALPHA = atand(length_a / length_b); ALPHA = atand(length_a / length_b);
BETA = atand(length_a / length_b); BETA = atand(length_a / length_b);
@ -300,7 +300,7 @@ function angles = rightTriangle(length_a, length_b)
angles = [ALPHA BETA GAMMA]; angles = [ALPHA BETA GAMMA];
end end
\end{lstlisting} \end{pagelisting}
This function expects two input arguments that are the length of the This function expects two input arguments that are the length of the
sides $a$ and $b$ and assumes a right angle between them. From this sides $a$ and $b$ and assumes a right angle between them. From this
@ -337,7 +337,7 @@ The test script for the \varcode{rightTriangle()} function
(listing\,\ref{trianglelisting}) may look like in (listing\,\ref{trianglelisting}) may look like in
listing\,\ref{testscript}. listing\,\ref{testscript}.
\begin{lstlisting}[label=testscript, caption={Unit test for the \varcode{rightTriangle()} function stored in an m-file testRightTriangle.m}] \begin{pagelisting}[label=testscript, caption={Unit test for the \varcode{rightTriangle()} function stored in an m-file testRightTriangle.m}]
tolerance = 1e-10; tolerance = 1e-10;
% preconditions % preconditions
@ -373,7 +373,7 @@ angles = rightTriangle(1, 1500);
smallAngle = (pi / 180) * angles(1); % radians smallAngle = (pi / 180) * angles(1); % radians
approx = sin(smallAngle); approx = sin(smallAngle);
assert(abs(approx - smallAngle) <= tolerance, 'Problem with small angle approximation') assert(abs(approx - smallAngle) <= tolerance, 'Problem with small angle approximation')
\end{lstlisting} \end{pagelisting}
In a test script we can execute any code. The actual test whether or In a test script we can execute any code. The actual test whether or
not the results match our predictions is done using the not the results match our predictions is done using the
@ -390,16 +390,16 @@ executed. We further define a \varcode{tolerance} variable that is
used when comparing double values (Why might the test on equality of used when comparing double values (Why might the test on equality of
double values be tricky?). double values be tricky?).
\begin{lstlisting}[label=runtestlisting, caption={Run the test!}] \begin{pagelisting}[label=runtestlisting, caption={Run the test!}]
result = runtests('testRightTriangle') result = runtests('testRightTriangle')
\end{lstlisting} \end{pagelisting}
During the run, \matlab{} will put out error messages onto the command During the run, \matlab{} will put out error messages onto the command
line and a summary of the test results is then stored within the line and a summary of the test results is then stored within the
\varcode{result} variable. These can be displayed using the function \varcode{result} variable. These can be displayed using the function
\code[table()]{table(result)}. \code[table()]{table(result)}.
\begin{lstlisting}[label=testresults, caption={The test results.}, basicstyle=\ttfamily\scriptsize] \begin{pagelisting}[label=testresults, caption={The test results.}, basicstyle=\ttfamily\scriptsize]
table(result) table(result)
ans = ans =
4x6 table 4x6 table
@ -411,7 +411,7 @@ _________________________________ ______ ______ ___________ ________ _____
'testR.../Test_IsoscelesTriangles' true false false 0.004893 [1x1 struct] 'testR.../Test_IsoscelesTriangles' true false false 0.004893 [1x1 struct]
'testR.../Test_30_60_90Triangle' true false false 0.005057 [1x1 struct] 'testR.../Test_30_60_90Triangle' true false false 0.005057 [1x1 struct]
'testR.../Test_SmallAngleApprox' true false false 0.0049 [1x1 struct] 'testR.../Test_SmallAngleApprox' true false false 0.0049 [1x1 struct]
\end{lstlisting} \end{pagelisting}
So far so good, all tests pass and our function appears to do what it So far so good, all tests pass and our function appears to do what it
is supposed to do. But tests are only as good as the programmer who is supposed to do. But tests are only as good as the programmer who
@ -479,11 +479,11 @@ stopped in debug mode (listing\,\ref{debuggerlisting}).
\end{figure} \end{figure}
\begin{lstlisting}[label=debuggerlisting, caption={Command line when the program execution was stopped in the debugger.}] \begin{pagelisting}[label=debuggerlisting, caption={Command line when the program execution was stopped in the debugger.}]
>> simplerandomwalk >> simplerandomwalk
6 for run = 1:num_runs 6 for run = 1:num_runs
K>> K>>
\end{lstlisting} \end{pagelisting}
When stopped in the debugger we can view and change the state of the When stopped in the debugger we can view and change the state of the
program at this point, we can also issue commands to try the next program at this point, we can also issue commands to try the next

View File

@ -10,7 +10,8 @@ pattern]{design pattern}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Looping over vector elements} \section{Looping over vector elements}
Iterating over vector elements by means of a \mcode{for}-loop is a very commen pattern: Iterating over vector elements by means of a \mcode{for}-loop is a very commen pattern:
\begin{lstlisting}[caption={\varcode{for}-loop for accessing vector elements by indices}]
\begin{pagelisting}[caption={\varcode{for}-loop for accessing vector elements by indices}]
x = [2:3:20]; % Some vector. x = [2:3:20]; % Some vector.
for i=1:length(x) % For loop over the indices of the vector. for i=1:length(x) % For loop over the indices of the vector.
i % This is the index (an integer number) i % This is the index (an integer number)
@ -22,12 +23,14 @@ for i=1:length(x) % For loop over the indices of the vector.
% as an argument to a function: % as an argument to a function:
do_something(x(i)); do_something(x(i));
end end
\end{lstlisting} \end{pagelisting}
\noindent
If the result of the computation within the loop are single numbers If the result of the computation within the loop are single numbers
that are to be stored in a vector, you should create this vector with that are to be stored in a vector, you should create this vector with
the right size before the loop: the right size before the loop:
\begin{lstlisting}[caption={\varcode{for}-loop for writing a vector}]
\begin{pagelisting}[caption={\varcode{for}-loop for writing a vector}]
x = [1.2 2.3 2.6 3.1]; % Some vector. x = [1.2 2.3 2.6 3.1]; % Some vector.
% Create a vector for the results, as long as the number of loops: % Create a vector for the results, as long as the number of loops:
y = zeros(length(x),1); y = zeros(length(x),1);
@ -38,13 +41,15 @@ for i=1:length(x)
end end
% Now the result vector can be further processed: % Now the result vector can be further processed:
mean(y); mean(y);
\end{lstlisting} \end{pagelisting}
\noindent
The computation within the loop could also result in a vector of some The computation within the loop could also result in a vector of some
length and not just a single number. If the length of this vector length and not just a single number. If the length of this vector
(here 10) is known beforehand, then you should create a matrix of (here 10) is known beforehand, then you should create a matrix of
appropriate size for storing the results: appropriate size for storing the results:
\begin{lstlisting}[caption={\varcode{for}-loop for writing rows of a matrix}]
\begin{pagelisting}[caption={\varcode{for}-loop for writing rows of a matrix}]
x = [2:3:20]; % Some vector. x = [2:3:20]; % Some vector.
% Create space for results - % Create space for results -
% as many rows as loops, as many columns as needed: % as many rows as loops, as many columns as needed:
@ -56,11 +61,13 @@ for i=1:length(x)
end end
% Process the results stored in matrix y: % Process the results stored in matrix y:
mean(y, 1) mean(y, 1)
\end{lstlisting} \end{pagelisting}
\noindent
Another possibility is that the result vectors (here of unknown size) Another possibility is that the result vectors (here of unknown size)
need to be combined into a single large vector: need to be combined into a single large vector:
\begin{lstlisting}[caption={\varcode{for}-loop for appending vectors}]
\begin{pagelisting}[caption={\varcode{for}-loop for appending vectors}]
x = [2:3:20]; % Some vector. x = [2:3:20]; % Some vector.
y = []; % Empty vector for storing the results. y = []; % Empty vector for storing the results.
for i=1:length(x) for i=1:length(x)
@ -72,14 +79,15 @@ for i=1:length(x)
end end
% Process the results stored in the vector z: % Process the results stored in the vector z:
mean(y) mean(y)
\end{lstlisting} \end{pagelisting}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Scaling and shifting random numbers, zeros, and ones} \section{Scaling and shifting random numbers, zeros, and ones}
Random number generators usually return random numbers of a given mean Random number generators usually return random numbers of a given mean
and standard deviation. Multiply those numbers by a factor to change their standard deviation and add a number to shift the mean. and standard deviation. Multiply those numbers by a factor to change their standard deviation and add a number to shift the mean.
\begin{lstlisting}[caption={Scaling and shifting of random numbers}]
\begin{pagelisting}[caption={Scaling and shifting of random numbers}]
% 100 random numbers drawn from a normal distribution % 100 random numbers drawn from a normal distribution
% with mean 0 and standard deviation 1: % with mean 0 and standard deviation 1:
x = randn(100, 1); x = randn(100, 1);
@ -89,18 +97,20 @@ x = randn(100, 1);
mu = 4.8; mu = 4.8;
sigma = 2.3; sigma = 2.3;
y = randn(100, 1)*sigma + mu; y = randn(100, 1)*sigma + mu;
\end{lstlisting} \end{pagelisting}
\noindent
The same principle can be useful for in the context of the functions The same principle can be useful for in the context of the functions
\mcode{zeros()} or \mcode{ones()}: \mcode{zeros()} or \mcode{ones()}:
\begin{lstlisting}[caption={Scaling and shifting of \varcode{zeros()} and \varcode{ones()}}]
\begin{pagelisting}[caption={Scaling and shifting of \varcode{zeros()} and \varcode{ones()}}]
x = -1:0.01:2; % Vector of x-values for plotting x = -1:0.01:2; % Vector of x-values for plotting
plot(x, exp(-x.*x)); plot(x, exp(-x.*x));
% Plot for the same x-values a horizontal line with y=0.8: % Plot for the same x-values a horizontal line with y=0.8:
plot(x, zeros(size(x))+0.8); plot(x, zeros(size(x))+0.8);
% ... or a line with y=0.5: % ... or a line with y=0.5:
plot(x, ones(size(x))*0.5); plot(x, ones(size(x))*0.5);
\end{lstlisting} \end{pagelisting}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -119,25 +129,26 @@ can plot the values of the $y$ vector against the ones of the $x$
vector. vector.
The following scripts compute and plot the function $f(x)=e^{-x^2}$: The following scripts compute and plot the function $f(x)=e^{-x^2}$:
\begin{lstlisting}[caption={Plotting a mathematical function --- very detailed}]
\begin{pagelisting}[caption={Plotting a mathematical function --- very detailed}]
xmin = -1.0; xmin = -1.0;
xmax = 2.0; xmax = 2.0;
dx = 0.01; % Step size dx = 0.01; % Step size
x = xmin:dx:xmax; % Vector with x-values. x = xmin:dx:xmax; % Vector with x-values.
y = exp(-x.*x); % No for loop! '.*' for multiplying the vector elements. y = exp(-x.*x); % No for loop! '.*' for multiplying the vector elements.
plot(x, y); plot(x, y);
\end{lstlisting} \end{pagelisting}
\begin{lstlisting}[caption={Plotting a mathematical function --- shorter}] \begin{pagelisting}[caption={Plotting a mathematical function --- shorter}]
x = -1:0.01:2; x = -1:0.01:2;
y = exp(-x.*x); y = exp(-x.*x);
plot(x, y); plot(x, y);
\end{lstlisting} \end{pagelisting}
\begin{lstlisting}[caption={Plotting a mathematical function --- compact}] \begin{pagelisting}[caption={Plotting a mathematical function --- compact}]
x = -1:0.01:2; x = -1:0.01:2;
plot(x, exp(-x.*x)); plot(x, exp(-x.*x));
\end{lstlisting} \end{pagelisting}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -146,28 +157,34 @@ For estimating probabilities or probability densities from histograms
we need to normalize them appropriately. we need to normalize them appropriately.
The \mcode{histogram()} function does this automatically with the appropriate arguments: The \mcode{histogram()} function does this automatically with the appropriate arguments:
\begin{lstlisting}[caption={Probability density with the \varcode{histogram()}-function}]
\begin{pagelisting}[caption={Probability density with the \varcode{histogram()}-function}]
x = randn(100, 1); % Some real-valued data. x = randn(100, 1); % Some real-valued data.
histogram(x, 'Normalization', 'pdf'); histogram(x, 'Normalization', 'pdf');
\end{lstlisting} \end{pagelisting}
\begin{lstlisting}[caption={Probability with the \varcode{histogram()}-function}]
\begin{pagelisting}[caption={Probability with the \varcode{histogram()}-function}]
x = randi(6, 100, 1); % Some integer-valued data. x = randi(6, 100, 1); % Some integer-valued data.
histogram(x, 'Normalization', 'probability'); histogram(x, 'Normalization', 'probability');
\end{lstlisting} \end{pagelisting}
\noindent
Alternatively one can normalize the histogram data as returned by the Alternatively one can normalize the histogram data as returned by the
\code{hist()}-function manually: \code{hist()}-function manually:
\begin{lstlisting}[caption={Probability density with the \varcode{hist()}- and \varcode{bar()}-function}]
\begin{pagelisting}[caption={Probability density with the \varcode{hist()}- and \varcode{bar()}-function}]
x = randn(100, 1); % Some real-valued data. x = randn(100, 1); % Some real-valued data.
[h, b] = hist(x); % Compute histogram. [h, b] = hist(x); % Compute histogram.
h = h/sum(h)/(b(2)-b(1)); % Normalization to a probability density. h = h/sum(h)/(b(2)-b(1)); % Normalization to a probability density.
bar(b, h); % Plot the probability density. bar(b, h); % Plot the probability density.
\end{lstlisting} \end{pagelisting}
\begin{lstlisting}[caption={Probability with the \varcode{hist()}- and \varcode{bar()}-function}]
\begin{pagelisting}[caption={Probability with the \varcode{hist()}- and \varcode{bar()}-function}]
x = randi(6, 100, 1); % Some integer-valued data. x = randi(6, 100, 1); % Some integer-valued data.
[h, b] = hist(x); % Compute histogram. [h, b] = hist(x); % Compute histogram.
h = h/sum(h); % Normalize to probability. h = h/sum(h); % Normalize to probability.
bar(b, h); % Plot the probabilities. bar(b, h); % Plot the probabilities.
\end{lstlisting} \end{pagelisting}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -2,7 +2,7 @@
\title{\textbf{\huge\sffamily\tr{Introduction to\\[1ex] Scientific Computing}% \title{\textbf{\huge\sffamily\tr{Introduction to\\[1ex] Scientific Computing}%
{Einf\"uhrung in die\\[1ex] wissenschaftliche Datenverarbeitung}}} {Einf\"uhrung in die\\[1ex] wissenschaftliche Datenverarbeitung}}}
\author{{\LARGE Jan Grewe \& Jan Benda}\\[5ex]Abteilung Neuroethologie\\[2ex]% \author{{\LARGE Jan Grewe \& Jan Benda}\\[5ex]Neuroethology Lab\\[2ex]%
\includegraphics[width=0.3\textwidth]{UT_WBMW_Rot_RGB}\vspace{3ex}} \includegraphics[width=0.3\textwidth]{UT_WBMW_Rot_RGB}\vspace{3ex}}
\date{WS 2020/2021\\\vfill% \date{WS 2020/2021\\\vfill%
@ -77,7 +77,7 @@
\setcounter{totalnumber}{2} \setcounter{totalnumber}{2}
% float placement fractions: % float placement fractions:
\renewcommand{\textfraction}{0.2} \renewcommand{\textfraction}{0.1}
\renewcommand{\topfraction}{0.9} \renewcommand{\topfraction}{0.9}
\renewcommand{\bottomfraction}{0.0} \renewcommand{\bottomfraction}{0.0}
\renewcommand{\floatpagefraction}{0.7} \renewcommand{\floatpagefraction}{0.7}
@ -209,6 +209,21 @@
\let\l@lstlisting\l@figure \let\l@lstlisting\l@figure
\makeatother \makeatother
% \lstinputlisting wrapped in a minipage to avoid page breaks:
\newcommand{\pageinputlisting}[2][]{\vspace{-2ex}\noindent\begin{minipage}[t]{1\linewidth}\lstinputlisting[#1]{#2}\end{minipage}}
%%%%% listing environment: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% usage:
%
% \begin{pagelisting}[label=listing1, caption={A script.}]
% >> x = 6
% \end{pagelisting}
%
% This is the lstlisting environment but wrapped in a minipage to avoid page breaks.
\lstnewenvironment{pagelisting}[1][]%
{\vspace{-2ex}\lstset{#1}\noindent\minipage[t]{1\linewidth}}%
{\endminipage}
%%%%% english, german, code and file terms: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% english, german, code and file terms: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{ifthen} \usepackage{ifthen}
@ -304,7 +319,7 @@
% %
\newboolean{showexercisesolutions} \newboolean{showexercisesolutions}
\setboolean{showexercisesolutions}{true} \setboolean{showexercisesolutions}{true}
\newcommand{\exercisesolutions}{here} % 0: here, 1: chapter, 2: end \newcommand{\exercisesolutions}{chapter} % 0: here, 1: chapter, 2: end
% we need this also as numbers: % we need this also as numbers:
\ifthenelse{\equal{\exercisesolutions}{end}}{\newcommand{\exercisesolutionsnum}{2}}{% \ifthenelse{\equal{\exercisesolutions}{end}}{\newcommand{\exercisesolutionsnum}{2}}{%
\ifthenelse{\equal{\exercisesolutions}{chapter}}{\newcommand{\exercisesolutionsnum}{1}}{% \ifthenelse{\equal{\exercisesolutions}{chapter}}{\newcommand{\exercisesolutionsnum}{1}}{%
@ -349,11 +364,12 @@
}{% }{%
\immediate\write\solutions{\unexpanded{\subsection}{Exercise \thechapter.\arabic{exercisef}}}% \immediate\write\solutions{\unexpanded{\subsection}{Exercise \thechapter.\arabic{exercisef}}}%
\immediate\write\solutions{\unexpanded{\label}{solution\arabic{chapter}-\arabic{exercisef}}}% \immediate\write\solutions{\unexpanded{\label}{solution\arabic{chapter}-\arabic{exercisef}}}%
\immediate\write\solutions{\unexpanded{\lstinputlisting[belowskip=0ex,aboveskip=0ex,% \immediate\write\solutions{\unexpanded{\begin{minipage}{1\linewidth}\lstinputlisting[belowskip=0ex,aboveskip=0ex,%
nolol=true, title={\textbf{Source code:} \protect\StrSubstitute{#1}{_}{\_}}]}{\codepath#1}}% nolol=true, title={\textbf{Source code:} \protect\StrSubstitute{#1}{_}{\_}}]}{\codepath#1}\unexpanded{\end{minipage}}}%
\ifthenelse{\equal{#2}{}}{}% \ifthenelse{\equal{#2}{}}{}%
{\immediate\write\solutions{\unexpanded{\lstinputlisting[language={},% {\immediate\write\solutions{\unexpanded{\begin{minipage}{1\linewidth}\lstinputlisting[language={},%
nolol=true, title={\textbf{Output:}}, belowskip=0ex, aboveskip=1ex]}{\codepath#2}}}% nolol=true, title={\textbf{Output:}}, belowskip=0ex, aboveskip=1ex]}{\codepath#2}\unexpanded{\end{minipage}}}}%
\immediate\write\solutions{\unexpanded{\vspace*{\fill}}}%
\immediate\write\solutions{}% \immediate\write\solutions{}%
}% }%
}% }%
@ -362,14 +378,18 @@
{ \hypersetup{hypertexnames=false}% { \hypersetup{hypertexnames=false}%
\ifthenelse{\equal{\exercisesource}{}}{}% \ifthenelse{\equal{\exercisesource}{}}{}%
{ \addtocounter{lstlisting}{-1}% { \addtocounter{lstlisting}{-1}%
\lstinputlisting[belowskip=0pt,aboveskip=1ex,nolol=true,% \par\noindent\begin{minipage}[t]{1\linewidth}%
\lstinputlisting[belowskip=1ex,aboveskip=-1ex,nolol=true,%
title={\textbf{Solution:} \exercisefile}]% title={\textbf{Solution:} \exercisefile}]%
{\exercisesource}% {\exercisesource}%
\end{minipage}%
\ifthenelse{\equal{\exerciseoutput}{}}{}% \ifthenelse{\equal{\exerciseoutput}{}}{}%
{ \addtocounter{lstlisting}{-1}% { \addtocounter{lstlisting}{-1}%
\par\noindent\begin{minipage}[t]{1\linewidth}%
\lstinputlisting[language={},title={\textbf{Output:}},% \lstinputlisting[language={},title={\textbf{Output:}},%
nolol=true,belowskip=0pt]% nolol=true,belowskip=0pt,aboveskip=-0.5ex]%
{\exerciseoutput}% {\exerciseoutput}%
\end{minipage}%
}% }%
}% }%
\hypersetup{hypertexnames=true}% \hypersetup{hypertexnames=true}%
@ -452,12 +472,12 @@
{ \captionsetup{singlelinecheck=off,hypcap=false,labelformat={empty},% { \captionsetup{singlelinecheck=off,hypcap=false,labelformat={empty},%
labelfont={large,sf,it,bf},font={large,sf,it,bf}} labelfont={large,sf,it,bf},font={large,sf,it,bf}}
\ifthenelse{\equal{#1}{}}% \ifthenelse{\equal{#1}{}}%
{ \begin{mdframed}[linecolor=importantline,linewidth=1ex,% { \begin{mdframed}[nobreak=true,linecolor=importantline,linewidth=1ex,%
backgroundcolor=importantback,font={\sffamily}]% backgroundcolor=importantback,font={\sffamily}]%
\setlength{\parindent}{0pt}% \setlength{\parindent}{0pt}%
\setlength{\parskip}{1ex}% \setlength{\parskip}{1ex}%
}% }%
{ \begin{mdframed}[linecolor=importantline,linewidth=1ex,% { \begin{mdframed}[nobreak=true,linecolor=importantline,linewidth=1ex,%
backgroundcolor=importantback,font={\sffamily},% backgroundcolor=importantback,font={\sffamily},%
frametitle={\captionof{iboxf}{#1}},frametitleaboveskip=-1ex,% frametitle={\captionof{iboxf}{#1}},frametitleaboveskip=-1ex,%
frametitlebackgroundcolor=importantline]% frametitlebackgroundcolor=importantline]%

View File

@ -3,7 +3,7 @@
\input{../../header} \input{../../header}
\lstset{inputpath=../code} \lstset{inputpath=../code}
\graphicspath{{images/}} \graphicspath{{figures/}}
\typein[\pagenumber]{Number of first page} \typein[\pagenumber]{Number of first page}
\typein[\chapternumber]{Chapter number} \typein[\chapternumber]{Chapter number}

View File

@ -148,7 +148,7 @@ or the color. For additional options consult the help.
The following listing shows a simple line plot with axis labeling and a title The following listing shows a simple line plot with axis labeling and a title
\lstinputlisting[caption={A simple plot showing a sinewave.}, \pageinputlisting[caption={A simple plot showing a sinewave.},
label=simpleplotlisting]{simple_plot.m} label=simpleplotlisting]{simple_plot.m}
@ -162,10 +162,10 @@ chosen, and star marker symbols is used. Finally, the name of the
curve is set to \emph{plot 1} which will be displayed in a legend, if curve is set to \emph{plot 1} which will be displayed in a legend, if
chosen. chosen.
\begin{lstlisting}[label=settinglineprops, caption={Setting line properties when calling \varcode{plot}.}] \begin{pagelisting}[label=settinglineprops, caption={Setting line properties when calling \varcode{plot}.}]
x = 0:0.1:2*pi; y = sin(x); plot( x, y, 'color', 'r', 'linestyle', x = 0:0.1:2*pi; y = sin(x); plot( x, y, 'color', 'r', 'linestyle',
':', 'marker', '*', 'linewidth', 1.5, 'displayname', 'plot 1') ':', 'marker', '*', 'linewidth', 1.5, 'displayname', 'plot 1')
\end{lstlisting} \end{pagelisting}
\begin{important}[Choosing the right color.] \begin{important}[Choosing the right color.]
Choosing the perfect color goes a little bit beyond personal Choosing the perfect color goes a little bit beyond personal
@ -277,7 +277,7 @@ the last one defines the output format (box\,\ref{graphicsformatbox}).
listing\,\ref{niceplotlisting}.}\label{spikedetectionfig} listing\,\ref{niceplotlisting}.}\label{spikedetectionfig}
\end{figure} \end{figure}
\begin{ibox}[t]{\label{graphicsformatbox}File formats for digital artwork.} \begin{ibox}[tp]{\label{graphicsformatbox}File formats for digital artwork.}
There are two fundamentally different types of formats for digital artwork: There are two fundamentally different types of formats for digital artwork:
\begin{enumerate} \begin{enumerate}
\item \enterm[bitmap]{Bitmaps} (\determ{Rastergrafik}) \item \enterm[bitmap]{Bitmaps} (\determ{Rastergrafik})
@ -322,7 +322,7 @@ the last one defines the output format (box\,\ref{graphicsformatbox}).
efficient. efficient.
\end{ibox} \end{ibox}
\lstinputlisting[caption={Script for creating the plot shown in \pageinputlisting[caption={Script for creating the plot shown in
\figref{spikedetectionfig}.}, \figref{spikedetectionfig}.},
label=niceplotlisting]{automatic_plot.m} label=niceplotlisting]{automatic_plot.m}
@ -380,7 +380,7 @@ draw the data. In the example we also provide further arguments to set
the size, color of the dots and specify that they are filled the size, color of the dots and specify that they are filled
(listing\,\ref{scatterlisting1}). (listing\,\ref{scatterlisting1}).
\lstinputlisting[caption={Creating a scatter plot with red filled dots.}, \pageinputlisting[caption={Creating a scatter plot with red filled dots.},
label=scatterlisting1, firstline=9, lastline=9]{scatterplot.m} label=scatterlisting1, firstline=9, lastline=9]{scatterplot.m}
We could have used plot for this purpose and set the marker to We could have used plot for this purpose and set the marker to
@ -395,8 +395,7 @@ manipulate the color we need to specify a length(x)-by-3 matrix. For
each dot we provide an individual color (i.e. the RGB triplet in each each dot we provide an individual color (i.e. the RGB triplet in each
row of the color matrix, lines 2-4 in listing\,\ref{scatterlisting2}) row of the color matrix, lines 2-4 in listing\,\ref{scatterlisting2})
\pageinputlisting[caption={Creating a scatter plot with size and color
\lstinputlisting[caption={Creating a scatter plot with size and color
variations. The RGB triplets define the respective color intensity variations. The RGB triplets define the respective color intensity
in a range 0:1. Here, we modify only the red color channel.}, in a range 0:1. Here, we modify only the red color channel.},
label=scatterlisting2, linerange={15-15, 21-23}]{scatterplot.m} label=scatterlisting2, linerange={15-15, 21-23}]{scatterplot.m}
@ -431,7 +430,7 @@ figures\,\ref{regularsubplotsfig}, \ref{irregularsubplotsfig}).
also below).}\label{regularsubplotsfig} also below).}\label{regularsubplotsfig}
\end{figure} \end{figure}
\lstinputlisting[caption={Script for creating subplots in a regular \pageinputlisting[caption={Script for creating subplots in a regular
grid \figref{regularsubplotsfig}.}, label=regularsubplotlisting, grid \figref{regularsubplotsfig}.}, label=regularsubplotlisting,
basicstyle=\ttfamily\scriptsize]{regular_subplot.m} basicstyle=\ttfamily\scriptsize]{regular_subplot.m}
@ -458,7 +457,7 @@ create a grid with larger numbers of columns and rows, and specify the
used cells of the grid by passing a vector as the third argument to used cells of the grid by passing a vector as the third argument to
\code{subplot()}. \code{subplot()}.
\lstinputlisting[caption={Script for creating subplots of different \pageinputlisting[caption={Script for creating subplots of different
sizes \figref{irregularsubplotsfig}.}, sizes \figref{irregularsubplotsfig}.},
label=irregularsubplotslisting, label=irregularsubplotslisting,
basicstyle=\ttfamily\scriptsize]{irregular_subplot.m} basicstyle=\ttfamily\scriptsize]{irregular_subplot.m}
@ -516,7 +515,7 @@ its properties. See the \matlab{} help for more information.
listing\,\ref{errorbarlisting} for A and C and listing\,\ref{errorbarlisting2} }\label{errorbarplot} listing\,\ref{errorbarlisting} for A and C and listing\,\ref{errorbarlisting2} }\label{errorbarplot}
\end{figure} \end{figure}
\lstinputlisting[caption={Illustrating estimation errors using error bars. Script that \pageinputlisting[caption={Illustrating estimation errors using error bars. Script that
creates \figref{errorbarplot}. A, B}, creates \figref{errorbarplot}. A, B},
label=errorbarlisting, firstline=13, lastline=31, label=errorbarlisting, firstline=13, lastline=31,
basicstyle=\ttfamily\scriptsize]{errorbarplot.m} basicstyle=\ttfamily\scriptsize]{errorbarplot.m}
@ -550,7 +549,7 @@ leading to invisibility and a value of one to complete
opaqueness. Finally, we use the normal plot command to draw a line opaqueness. Finally, we use the normal plot command to draw a line
connecting the average values (line 12). connecting the average values (line 12).
\lstinputlisting[caption={Illustrating estimation errors using a shaded area. Script that \pageinputlisting[caption={Illustrating estimation errors using a shaded area. Script that
creates \figref{errorbarplot} C.}, label=errorbarlisting2, creates \figref{errorbarplot} C.}, label=errorbarlisting2,
firstline=33, firstline=33,
basicstyle=\ttfamily\scriptsize]{errorbarplot.m} basicstyle=\ttfamily\scriptsize]{errorbarplot.m}
@ -575,7 +574,7 @@ listing\,\ref{annotationsplotlisting}. For more options consult the
listing\,\ref{annotationsplotlisting}}\label{annotationsplot} listing\,\ref{annotationsplotlisting}}\label{annotationsplot}
\end{figure} \end{figure}
\lstinputlisting[caption={Adding annotations to figures. Script that \pageinputlisting[caption={Adding annotations to figures. Script that
creates \figref{annotationsplot}.}, creates \figref{annotationsplot}.},
label=annotationsplotlisting, label=annotationsplotlisting,
basicstyle=\ttfamily\scriptsize]{annotations.m} basicstyle=\ttfamily\scriptsize]{annotations.m}
@ -632,7 +631,7 @@ Lissajous figure. The basic steps are:
\item Finally, close the file (line 31). \item Finally, close the file (line 31).
\end{enumerate} \end{enumerate}
\lstinputlisting[caption={Making animations and saving them as a \pageinputlisting[caption={Making animations and saving them as a
movie.}, label=animationlisting, firstline=16, lastline=36, movie.}, label=animationlisting, firstline=16, lastline=36,
basicstyle=\ttfamily\scriptsize]{movie_example.m} basicstyle=\ttfamily\scriptsize]{movie_example.m}

View File

@ -1,7 +1,7 @@
%!PS-Adobe-2.0 EPSF-2.0 %!PS-Adobe-2.0 EPSF-2.0
%%Title: pointprocessscetchA.tex %%Title: pointprocessscetchA.tex
%%Creator: gnuplot 5.2 patchlevel 8 %%Creator: gnuplot 4.6 patchlevel 4
%%CreationDate: Mon Dec 7 16:09:58 2020 %%CreationDate: Fri Dec 11 21:08:22 2020
%%DocumentFonts: %%DocumentFonts:
%%BoundingBox: 50 50 373 135 %%BoundingBox: 50 50 373 135
%%EndComments %%EndComments
@ -18,7 +18,6 @@ gnudict begin
/Dashlength 1 def /Dashlength 1 def
/Landscape false def /Landscape false def
/Level1 false def /Level1 false def
/Level3 false def
/Rounded true def /Rounded true def
/ClipToBoundingBox false def /ClipToBoundingBox false def
/SuppressPDFMark false def /SuppressPDFMark false def
@ -30,11 +29,11 @@ gnudict begin
% %
/vshift -73 def /vshift -73 def
/dl1 { /dl1 {
10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
} def } def
/dl2 { /dl2 {
10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul add } if Rounded { currentlinewidth 0.75 mul add } if
} def } def
/hpt_ 31.5 def /hpt_ 31.5 def
@ -48,7 +47,7 @@ gnudict begin
} if } if
} def } def
% %
% Gnuplot Prolog Version 5.2 (Dec 2017) % Gnuplot Prolog Version 4.6 (September 2012)
% %
%/SuppressPDFMark true def %/SuppressPDFMark true def
% %
@ -65,11 +64,11 @@ gnudict begin
/vpt2 vpt 2 mul def /vpt2 vpt 2 mul def
/hpt2 hpt 2 mul def /hpt2 hpt 2 mul def
/Lshow {currentpoint stroke M 0 vshift R /Lshow {currentpoint stroke M 0 vshift R
Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
/hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} /DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
@ -83,7 +82,7 @@ gnudict begin
/PL {stroke userlinewidth setlinewidth /PL {stroke userlinewidth setlinewidth
Rounded {1 setlinejoin 1 setlinecap} if} def Rounded {1 setlinejoin 1 setlinecap} if} def
3.8 setmiterlimit 3.8 setmiterlimit
% Classic Line colors (version 5.0) % Default Line colors
/LCw {1 1 1} def /LCw {1 1 1} def
/LCb {0 0 0} def /LCb {0 0 0} def
/LCa {0 0 0} def /LCa {0 0 0} def
@ -96,21 +95,19 @@ gnudict begin
/LC6 {0 0 0} def /LC6 {0 0 0} def
/LC7 {1 0.3 0} def /LC7 {1 0.3 0} def
/LC8 {0.5 0.5 0.5} def /LC8 {0.5 0.5 0.5} def
% Default dash patterns (version 5.0) % Default Line Types
/LTB {BL [] LCb DL} def
/LTw {PL [] 1 setgray} def /LTw {PL [] 1 setgray} def
/LTb {PL [] LCb DL} def /LTb {BL [] LCb DL} def
/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
/LT0 {PL [] LC0 DL} def /LT0 {PL [] LC0 DL} def
/LT1 {PL [2 dl1 3 dl2] LC1 DL} def /LT1 {PL [4 dl1 2 dl2] LC1 DL} def
/LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def /LT2 {PL [2 dl1 3 dl2] LC2 DL} def
/LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def /LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
/LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def /LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
/LT5 {PL [4 dl1 2 dl2] LC5 DL} def /LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
/LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def /LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
/LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def /LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
/LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def /LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
/SL {[] 0 setdash} def
/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
/Dia {stroke [] 0 setdash 2 copy vpt add M /Dia {stroke [] 0 setdash 2 copy vpt add M
hpt neg vpt neg V hpt vpt neg V hpt neg vpt neg V hpt vpt neg V
@ -305,7 +302,7 @@ gnudict begin
ColR ColG ColB setrgbcolor} def ColR ColG ColB setrgbcolor} def
/BoxColFill {gsave Rec PolyFill} def /BoxColFill {gsave Rec PolyFill} def
/PolyFill {gsave Density fill grestore grestore} def /PolyFill {gsave Density fill grestore grestore} def
/h {rlineto rlineto rlineto closepath gsave fill grestore stroke} bind def /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
% %
% PostScript Level 1 Pattern Fill routine for rectangles % PostScript Level 1 Pattern Fill routine for rectangles
% Usage: x y w h s a XX PatternFill % Usage: x y w h s a XX PatternFill
@ -332,14 +329,9 @@ gnudict begin
% %
/languagelevel where /languagelevel where
{pop languagelevel} {1} ifelse {pop languagelevel} {1} ifelse
dup 2 lt 2 lt
{/InterpretLevel1 true def {/InterpretLevel1 true def}
/InterpretLevel3 false def} {/InterpretLevel1 Level1 def}
{/InterpretLevel1 Level1 def
2 gt
{/InterpretLevel3 Level3 def}
{/InterpretLevel3 false def}
ifelse }
ifelse ifelse
% %
% PostScript level 2 pattern fill definitions % PostScript level 2 pattern fill definitions
@ -428,7 +420,6 @@ Level1 {Level1PatternFill} {Level2PatternFill} ifelse
/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
currentdict end definefont pop currentdict end definefont pop
%
Level1 SuppressPDFMark or Level1 SuppressPDFMark or
{} { {} {
/SDict 10 dict def /SDict 10 dict def
@ -438,39 +429,14 @@ systemdict /pdfmark known not {
SDict begin [ SDict begin [
/Title (pointprocessscetchA.tex) /Title (pointprocessscetchA.tex)
/Subject (gnuplot plot) /Subject (gnuplot plot)
/Creator (gnuplot 5.2 patchlevel 8) /Creator (gnuplot 4.6 patchlevel 4)
/Author (jan)
% /Producer (gnuplot) % /Producer (gnuplot)
% /Keywords () % /Keywords ()
/CreationDate (Mon Dec 7 16:09:58 2020) /CreationDate (Fri Dec 11 21:08:22 2020)
/DOCINFO pdfmark /DOCINFO pdfmark
end end
} ifelse } ifelse
%
% Support for boxed text - Ethan A Merritt Sep 2016
%
/InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put
userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put
/Boxing true def } def
/ExtendTextBox { dup type /stringtype eq
{ Boxing { gsave dup false charpath pathbbox
dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse
dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse
dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse
dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse
grestore } if }
{} ifelse} def
/PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M
TBx1 TBxmargin sub TBy2 TBymargin add L
TBx2 TBxmargin add TBy2 TBymargin add L
TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def
/DrawTextBox { PopTextBox stroke /Boxing false def} def
/FillTextBox { gsave PopTextBox fill grestore /Boxing false def} def
0 0 0 0 InitTextBox
/TBxmargin 20 def
/TBymargin 20 def
/Boxing false def
/textshow { ExtendTextBox Gshow } def
%
end end
%%EndProlog %%EndProlog
%%Page: 1 1 %%Page: 1 1
@ -484,33 +450,27 @@ newpath
2.000 UL 2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 1.000 UP
0.00 0.00 0.00 C LTb
1.000 UP
LCb setrgbcolor LCb setrgbcolor
LTb
1.000 UL 1.000 UL
[] 0 setdash LTb
gsave 6208 824 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill gsave 6208 824 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill
6208 824 M 6208 824 M
stroke
6208 824 N
0 -32 V 0 -32 V
121 32 V 121 32 V
-121 32 V -121 32 V
0 -32 V 0 -32 V
Z stroke
528 824 M 528 824 M
5680 0 V 5680 0 V
stroke stroke
2.000 UL
LTb LTb
0.00 0.00 0.00 C 0.00 0.00 0.00 C 10.000 UL
% Begin plot #1 LT0
10.000 UL LC0 setrgbcolor
LTb 0.00 0.00 0.00 C 910 573 M
LCb setrgbcolor
[] 0 setdash
0.00 0.00 0.00 C
910 573 M
0 503 V 0 503 V
1412 573 M 1412 573 M
0 503 V 0 503 V
@ -528,18 +488,12 @@ LCb setrgbcolor
0 503 V 0 503 V
5685 573 M 5685 573 M
0 503 V 0 503 V
1.000 UP
stroke stroke
LTw
% End plot #1
2.000 UL 2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C stroke
1.000 UP
2.000 UL
LTb
0.00 0.00 0.00 C
stroke
grestore grestore
end end
showpage showpage

View File

@ -1,7 +1,7 @@
%!PS-Adobe-2.0 EPSF-2.0 %!PS-Adobe-2.0 EPSF-2.0
%%Title: pointprocessscetchB.tex %%Title: pointprocessscetchB.tex
%%Creator: gnuplot 5.2 patchlevel 8 %%Creator: gnuplot 4.6 patchlevel 4
%%CreationDate: Mon Dec 7 16:09:59 2020 %%CreationDate: Fri Dec 11 21:08:22 2020
%%DocumentFonts: %%DocumentFonts:
%%BoundingBox: 50 50 373 237 %%BoundingBox: 50 50 373 237
%%EndComments %%EndComments
@ -18,7 +18,6 @@ gnudict begin
/Dashlength 1 def /Dashlength 1 def
/Landscape false def /Landscape false def
/Level1 false def /Level1 false def
/Level3 false def
/Rounded true def /Rounded true def
/ClipToBoundingBox false def /ClipToBoundingBox false def
/SuppressPDFMark false def /SuppressPDFMark false def
@ -30,11 +29,11 @@ gnudict begin
% %
/vshift -73 def /vshift -73 def
/dl1 { /dl1 {
10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
} def } def
/dl2 { /dl2 {
10.0 Dashlength userlinewidth gnulinewidth div mul mul mul 10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul add } if Rounded { currentlinewidth 0.75 mul add } if
} def } def
/hpt_ 31.5 def /hpt_ 31.5 def
@ -48,7 +47,7 @@ gnudict begin
} if } if
} def } def
% %
% Gnuplot Prolog Version 5.2 (Dec 2017) % Gnuplot Prolog Version 4.6 (September 2012)
% %
%/SuppressPDFMark true def %/SuppressPDFMark true def
% %
@ -65,11 +64,11 @@ gnudict begin
/vpt2 vpt 2 mul def /vpt2 vpt 2 mul def
/hpt2 hpt 2 mul def /hpt2 hpt 2 mul def
/Lshow {currentpoint stroke M 0 vshift R /Lshow {currentpoint stroke M 0 vshift R
Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
/hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} /DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
@ -83,7 +82,7 @@ gnudict begin
/PL {stroke userlinewidth setlinewidth /PL {stroke userlinewidth setlinewidth
Rounded {1 setlinejoin 1 setlinecap} if} def Rounded {1 setlinejoin 1 setlinecap} if} def
3.8 setmiterlimit 3.8 setmiterlimit
% Classic Line colors (version 5.0) % Default Line colors
/LCw {1 1 1} def /LCw {1 1 1} def
/LCb {0 0 0} def /LCb {0 0 0} def
/LCa {0 0 0} def /LCa {0 0 0} def
@ -96,21 +95,19 @@ gnudict begin
/LC6 {0 0 0} def /LC6 {0 0 0} def
/LC7 {1 0.3 0} def /LC7 {1 0.3 0} def
/LC8 {0.5 0.5 0.5} def /LC8 {0.5 0.5 0.5} def
% Default dash patterns (version 5.0) % Default Line Types
/LTB {BL [] LCb DL} def
/LTw {PL [] 1 setgray} def /LTw {PL [] 1 setgray} def
/LTb {PL [] LCb DL} def /LTb {BL [] LCb DL} def
/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
/LT0 {PL [] LC0 DL} def /LT0 {PL [] LC0 DL} def
/LT1 {PL [2 dl1 3 dl2] LC1 DL} def /LT1 {PL [4 dl1 2 dl2] LC1 DL} def
/LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def /LT2 {PL [2 dl1 3 dl2] LC2 DL} def
/LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def /LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
/LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def /LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
/LT5 {PL [4 dl1 2 dl2] LC5 DL} def /LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
/LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def /LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
/LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def /LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
/LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def /LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
/SL {[] 0 setdash} def
/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
/Dia {stroke [] 0 setdash 2 copy vpt add M /Dia {stroke [] 0 setdash 2 copy vpt add M
hpt neg vpt neg V hpt vpt neg V hpt neg vpt neg V hpt vpt neg V
@ -305,7 +302,7 @@ gnudict begin
ColR ColG ColB setrgbcolor} def ColR ColG ColB setrgbcolor} def
/BoxColFill {gsave Rec PolyFill} def /BoxColFill {gsave Rec PolyFill} def
/PolyFill {gsave Density fill grestore grestore} def /PolyFill {gsave Density fill grestore grestore} def
/h {rlineto rlineto rlineto closepath gsave fill grestore stroke} bind def /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
% %
% PostScript Level 1 Pattern Fill routine for rectangles % PostScript Level 1 Pattern Fill routine for rectangles
% Usage: x y w h s a XX PatternFill % Usage: x y w h s a XX PatternFill
@ -332,14 +329,9 @@ gnudict begin
% %
/languagelevel where /languagelevel where
{pop languagelevel} {1} ifelse {pop languagelevel} {1} ifelse
dup 2 lt 2 lt
{/InterpretLevel1 true def {/InterpretLevel1 true def}
/InterpretLevel3 false def} {/InterpretLevel1 Level1 def}
{/InterpretLevel1 Level1 def
2 gt
{/InterpretLevel3 Level3 def}
{/InterpretLevel3 false def}
ifelse }
ifelse ifelse
% %
% PostScript level 2 pattern fill definitions % PostScript level 2 pattern fill definitions
@ -428,7 +420,6 @@ Level1 {Level1PatternFill} {Level2PatternFill} ifelse
/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
currentdict end definefont pop currentdict end definefont pop
%
Level1 SuppressPDFMark or Level1 SuppressPDFMark or
{} { {} {
/SDict 10 dict def /SDict 10 dict def
@ -438,39 +429,14 @@ systemdict /pdfmark known not {
SDict begin [ SDict begin [
/Title (pointprocessscetchB.tex) /Title (pointprocessscetchB.tex)
/Subject (gnuplot plot) /Subject (gnuplot plot)
/Creator (gnuplot 5.2 patchlevel 8) /Creator (gnuplot 4.6 patchlevel 4)
/Author (jan)
% /Producer (gnuplot) % /Producer (gnuplot)
% /Keywords () % /Keywords ()
/CreationDate (Mon Dec 7 16:09:59 2020) /CreationDate (Fri Dec 11 21:08:22 2020)
/DOCINFO pdfmark /DOCINFO pdfmark
end end
} ifelse } ifelse
%
% Support for boxed text - Ethan A Merritt Sep 2016
%
/InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put
userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put
/Boxing true def } def
/ExtendTextBox { dup type /stringtype eq
{ Boxing { gsave dup false charpath pathbbox
dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse
dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse
dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse
dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse
grestore } if }
{} ifelse} def
/PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M
TBx1 TBxmargin sub TBy2 TBymargin add L
TBx2 TBxmargin add TBy2 TBymargin add L
TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def
/DrawTextBox { PopTextBox stroke /Boxing false def} def
/FillTextBox { gsave PopTextBox fill grestore /Boxing false def} def
0 0 0 0 InitTextBox
/TBxmargin 20 def
/TBymargin 20 def
/Boxing false def
/textshow { ExtendTextBox Gshow } def
%
end end
%%EndProlog %%EndProlog
%%Page: 1 1 %%Page: 1 1
@ -484,33 +450,27 @@ newpath
2.000 UL 2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 1.000 UP
0.00 0.00 0.00 C LTb
1.000 UP
LCb setrgbcolor LCb setrgbcolor
LTb
1.000 UL 1.000 UL
[] 0 setdash LTb
gsave 6208 3165 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill gsave 6208 3165 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill
6208 3165 M 6208 3165 M
stroke
6208 3165 N
0 -32 V 0 -32 V
121 32 V 121 32 V
-121 32 V -121 32 V
0 -32 V 0 -32 V
Z stroke -5680 0 R
528 3165 M
5680 0 V 5680 0 V
stroke stroke
2.000 UL
LTb LTb
0.00 0.00 0.00 C 0.00 0.00 0.00 C 10.000 UL
% Begin plot #1 LT0
10.000 UL LC0 setrgbcolor
LTb 0.00 0.00 0.00 C 910 3029 M
LCb setrgbcolor
[] 0 setdash
0.00 0.00 0.00 C
910 3029 M
0 272 V 0 272 V
502 -272 R 502 -272 R
0 272 V 0 272 V
@ -528,167 +488,99 @@ LCb setrgbcolor
0 272 V 0 272 V
5685 3029 M 5685 3029 M
0 272 V 0 272 V
1.000 UP
stroke stroke
LTw
% End plot #1
2.000 UL 2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 2.000 UL
1.000 UP
2.000 UL
LTb
0.00 0.00 0.00 C
2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 1.000 UP
0.00 0.00 0.00 C LTb
1.000 UP
LCb setrgbcolor LCb setrgbcolor
LTb
1.000 UL 1.000 UL
[] 0 setdash LTb
gsave 6208 2043 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill gsave 6208 2043 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill
6208 2043 M 6208 2043 M
stroke
6208 2043 N
0 -32 V 0 -32 V
121 32 V 121 32 V
-121 32 V -121 32 V
0 -32 V 0 -32 V
Z stroke -5680 0 R
528 2043 M
5680 0 V 5680 0 V
stroke
1.000 UL
[] 0 setdash
1291 1929 M 1291 1929 M
stroke
1291 1929 N
121 32 V 121 32 V
-121 32 V -121 32 V
-260 0 R -260 -64 R
stroke -121 32 V
1031 1993 N 121 32 V
910 1961 L 910 1961 M
121 -32 V
-121 32 R
502 0 V 502 0 V
stroke 590 -32 R
1.000 UL
[] 0 setdash
2002 1929 M
stroke
2002 1929 N
121 32 V 121 32 V
-121 32 V -121 32 V
-469 0 R -469 -64 R
stroke -121 32 V
1533 1993 N 121 32 V
-121 -32 V -121 -32 R
121 -32 V
-121 32 R
711 0 V 711 0 V
stroke 206 -22 R
1.000 UL
[] 0 setdash
2329 1939 M
stroke
2329 1939 N
84 22 V 84 22 V
-84 22 V -84 22 V
-122 0 R -122 -44 R
stroke -84 22 V
2207 1983 N 84 22 V
-84 -22 V -84 -22 R
84 -22 V
-84 22 R
290 0 V 290 0 V
stroke 216 -23 R
1.000 UL
[] 0 setdash
2629 1938 M
stroke
2629 1938 N
88 23 V 88 23 V
-88 23 V -88 23 V
-128 0 R -128 -46 R
stroke -88 23 V
2501 1984 N 88 23 V
-88 -23 V -88 -23 R
88 -23 V
-88 23 R
304 0 V 304 0 V
stroke 329 -32 R
1.000 UL
[] 0 setdash
3046 1929 M
stroke
3046 1929 N
121 32 V 121 32 V
-121 32 V -121 32 V
-208 0 R -208 -64 R
stroke -121 32 V
2838 1993 N 121 32 V
-121 -32 V -121 -32 R
121 -32 V
-121 32 R
450 0 V 450 0 V
stroke 745 -32 R
1.000 UL
[] 0 setdash
3912 1929 M
stroke
3912 1929 N
121 32 V 121 32 V
-121 32 V -121 32 V
-624 0 R -624 -64 R
stroke -121 32 V
3288 1993 N 121 32 V
-121 -32 V -121 -32 R
121 -32 V
-121 32 R
866 0 V 866 0 V
stroke 496 -32 R
1.000 UL
[] 0 setdash
4529 1929 M
stroke
4529 1929 N
121 32 V 121 32 V
-121 32 V -121 32 V
-375 0 R -375 -64 R
stroke -121 32 V
4154 1993 N 121 32 V
-121 -32 V -121 -32 R
121 -32 V
-121 32 R
617 0 V 617 0 V
stroke 914 -32 R
1.000 UL
[] 0 setdash
5564 1929 M
stroke
5564 1929 N
121 32 V 121 32 V
-121 32 V -121 32 V
-793 0 R -793 -64 R
stroke -121 32 V
4771 1993 N 121 32 V
-121 -32 V -121 -32 R
121 -32 V
-121 32 R
1035 0 V 1035 0 V
stroke stroke
2.000 UL
LTb LTb
0.00 0.00 0.00 C 0.00 0.00 0.00 C 10.000 UL
% Begin plot #1 LT0
10.000 UL LC0 setrgbcolor
LTb 0.00 0.00 0.00 C 910 1907 M
LCb setrgbcolor
[] 0 setdash
0.00 0.00 0.00 C
910 1907 M
0 272 V 0 272 V
502 -272 R 502 -272 R
0 272 V 0 272 V
@ -706,100 +598,74 @@ LCb setrgbcolor
0 272 V 0 272 V
5685 1907 M 5685 1907 M
0 272 V 0 272 V
1.000 UP
stroke stroke
LTw
% End plot #1
2.000 UL 2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 2.000 UL
1.000 UP
2.000 UL
LTb
0.00 0.00 0.00 C
2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 528 268 M
0.00 0.00 0.00 C
528 268 M
-63 0 V -63 0 V
stroke stroke
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 528 460 M
0.00 0.00 0.00 C
528 460 M
-63 0 V -63 0 V
stroke stroke
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 528 652 M
0.00 0.00 0.00 C
528 652 M
-63 0 V -63 0 V
stroke stroke
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 528 844 M
0.00 0.00 0.00 C
528 844 M
-63 0 V -63 0 V
stroke stroke
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 528 1036 M
0.00 0.00 0.00 C
528 1036 M
-63 0 V -63 0 V
stroke stroke
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 528 1228 M
0.00 0.00 0.00 C
528 1228 M
-63 0 V -63 0 V
stroke stroke
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 2.000 UL
0.00 0.00 0.00 C
2.000 UL
LTb LTb
LCb setrgbcolor LCb setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 528 1276 M
0.00 0.00 0.00 C
528 1276 M
528 220 L 528 220 L
5801 0 R 5801 0 R
0 1056 R 0 1056 R
-5801 0 R -5801 0 R
1.000 UP 1.000 UP
stroke stroke
LTb
LCb setrgbcolor LCb setrgbcolor
LTb
1.000 UL 1.000 UL
[] 0 setdash LTb
gsave 6208 268 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill gsave 6208 268 N 0 -32 V 121 32 V -121 32 V 0 -32 V 1 PolyFill
6208 268 M 6208 268 M
stroke
6208 268 N
0 -32 V 0 -32 V
121 32 V 121 32 V
-121 32 V -121 32 V
0 -32 V 0 -32 V
Z stroke
528 268 M 528 268 M
5680 0 V 5680 0 V
stroke stroke
2.000 UL
LTb LTb
0.00 0.00 0.00 C 0.00 0.00 0.00 C 3.000 UL
% Begin plot #1 LT0
3.000 UL LC0 setrgbcolor
LTb 0.00 0.00 0.00 C 528 268 M
LCb setrgbcolor
[] 0 setdash
0.00 0.00 0.00 C
528 268 M
382 0 V 382 0 V
0 96 R 0 96 R
502 0 V 502 0 V
@ -819,17 +685,12 @@ LCb setrgbcolor
1035 0 V 1035 0 V
0 96 R 0 96 R
533 0 V 533 0 V
stroke
LTw
% End plot #1
% Begin plot #2
1.500 UP 1.500 UP
stroke
2.000 UL 2.000 UL
LTb LT0
LCb setrgbcolor LC0 setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 910 268 CircleF
0.00 0.00 0.00 C
910 268 CircleF
1412 364 CircleF 1412 364 CircleF
2123 460 CircleF 2123 460 CircleF
2413 556 CircleF 2413 556 CircleF
@ -838,16 +699,11 @@ LCb setrgbcolor
4033 844 CircleF 4033 844 CircleF
4650 940 CircleF 4650 940 CircleF
5685 1036 CircleF 5685 1036 CircleF
LTw
% End plot #2
% Begin plot #3
1.000 UP 1.000 UP
2.000 UL 2.000 UL
LTb LT0
LCb setrgbcolor LC0 setrgbcolor
[] 0 setdash 1.00 1.00 1.00 C 910 268 CircleF
1.00 1.00 1.00 C
910 268 CircleF
1412 364 CircleF 1412 364 CircleF
2123 460 CircleF 2123 460 CircleF
2413 556 CircleF 2413 556 CircleF
@ -856,16 +712,11 @@ LCb setrgbcolor
4033 844 CircleF 4033 844 CircleF
4650 940 CircleF 4650 940 CircleF
5685 1036 CircleF 5685 1036 CircleF
LTw
% End plot #3
% Begin plot #4
1.500 UP 1.500 UP
2.000 UL 2.000 UL
LTb LT0
LCb setrgbcolor LC0 setrgbcolor
[] 0 setdash 0.00 0.00 0.00 C 910 364 CircleF
0.00 0.00 0.00 C
910 364 CircleF
1412 460 CircleF 1412 460 CircleF
2123 556 CircleF 2123 556 CircleF
2413 652 CircleF 2413 652 CircleF
@ -874,17 +725,11 @@ LCb setrgbcolor
4033 940 CircleF 4033 940 CircleF
4650 1036 CircleF 4650 1036 CircleF
5685 1132 CircleF 5685 1132 CircleF
LTw
% End plot #4
2.000 UL
LTb
LCb setrgbcolor
[] 0 setdash
1.000 UP 1.000 UP
2.000 UL 2.000 UL
LTb LTb
0.00 0.00 0.00 C LCb setrgbcolor
stroke 0.00 0.00 0.00 C stroke
grestore grestore
end end
showpage showpage

View File

@ -1,4 +1,5 @@
a = [2 4 6 8 10]; % row vector with five elements a = [2 4 6 8 10]; % row vector with five elements
s = size(a) % store the return value of size() in a new variable s = size(a) % store the return value of size() in a new variable
s(2) % get the second element of s, i.e. the length along the 2nd dimension s(2) % get the second element of s,
% i.e. the length along the 2nd dimension
size(a, 2) % the shortcut size(a, 2) % the shortcut

View File

@ -1,3 +1,3 @@
s = 1 10 s = 1 5
ans = 10 ans = 5
ans = 10 ans = 5

View File

@ -60,7 +60,8 @@ variable.
In \matlab{} variables can be created at any time on the command line In \matlab{} variables can be created at any time on the command line
or any place in a script or function. Listing~\ref{varListing1} shows or any place in a script or function. Listing~\ref{varListing1} shows
three different ways of creating a variable: three different ways of creating a variable:
\begin{lstlisting}[label=varListing1, caption={Creating variables.}]
\begin{pagelisting}[label=varListing1, caption={Creating variables.}]
>> x = 38 >> x = 38
x = x =
38 38
@ -72,7 +73,7 @@ y =
>> z = 'A' >> z = 'A'
z = z =
A A
\end{lstlisting} \end{pagelisting}
Line 1 can be read like: ``Create a variable with the name \varcode{x} Line 1 can be read like: ``Create a variable with the name \varcode{x}
and assign the value 38''. The equality sign is the so called and assign the value 38''. The equality sign is the so called
@ -93,8 +94,7 @@ information but it is not suited to be used in programs (see
also the \code{who} function that returns a list of all defined also the \code{who} function that returns a list of all defined
variables, listing~\ref{varListing2}). variables, listing~\ref{varListing2}).
\newpage \begin{pagelisting}[label=varListing2, caption={Requesting information about defined variables and their types.}]
\begin{lstlisting}[label=varListing2, caption={Requesting information about defined variables and their types.}]
>>class(x) >>class(x)
ans = ans =
double double
@ -110,7 +110,7 @@ x y z
x 1x1 8 double x 1x1 8 double
y 0x0 0 double y 0x0 0 double
z 1x1 2 char z 1x1 2 char
\end{lstlisting} \end{pagelisting}
\begin{important}[Naming conventions] \begin{important}[Naming conventions]
There are a few rules regarding variable names. \matlab{} is There are a few rules regarding variable names. \matlab{} is
@ -120,7 +120,6 @@ x y z
variable names. variable names.
\end{important} \end{important}
\pagebreak[4]
\subsection{Working with variables} \subsection{Working with variables}
We can certainly work, i.e. do calculations, with variables. \matlab{} We can certainly work, i.e. do calculations, with variables. \matlab{}
knows all basic \entermde[Operator!arithmetic]{Operator!arithmetischer}{arithmetic operators} knows all basic \entermde[Operator!arithmetic]{Operator!arithmetischer}{arithmetic operators}
@ -131,7 +130,7 @@ such as \code[Operator!arithmetic!1add@+]{+},
\code[Operator!arithmetic!5pow@\^{}]{\^{}}. Listing~\ref{varListing3} \code[Operator!arithmetic!5pow@\^{}]{\^{}}. Listing~\ref{varListing3}
shows their use. shows their use.
\begin{lstlisting}[label=varListing3, caption={Working with variables.}] \begin{pagelisting}[label=varListing3, caption={Working with variables.}]
>> x = 1; >> x = 1;
>> x + 10 >> x + 10
ans = ans =
@ -149,13 +148,12 @@ ans =
z = z =
3 3
>> z = z * 5; >> z = z * 5
>> z
z = z =
15 15
>> clear z % deleting a variable >> clear z % deleting a variable
\end{lstlisting} \end{pagelisting}
Note: in lines 2 and 10 the variables have been used without changing Note: in lines 2 and 10 the variables have been used without changing
their values. Whenever the value of a variable should change, the their values. Whenever the value of a variable should change, the
@ -271,8 +269,8 @@ step-sizes unequal to 1. Line 5 can be read like: ``Create a variable
\varcode{b} and assign the values from 0 to 9 in increasing steps of \varcode{b} and assign the values from 0 to 9 in increasing steps of
1.''. Line 9 reads: ``Create a variable \varcode{c} and assign the 1.''. Line 9 reads: ``Create a variable \varcode{c} and assign the
values from 0 to 10 in steps of 2''. values from 0 to 10 in steps of 2''.
\pagebreak
\begin{lstlisting}[label=generatevectorslisting, caption={Creating simple row-vectors.}] \begin{pagelisting}[label=generatevectorslisting, caption={Creating simple row-vectors.}]
>> a = [0 1 2 3 4 5 6 7 8 9] % Creating a row-vector >> a = [0 1 2 3 4 5 6 7 8 9] % Creating a row-vector
a = a =
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
@ -284,7 +282,7 @@ b =
>> c = (0:2:10) >> c = (0:2:10)
c = c =
0 2 4 6 8 10 0 2 4 6 8 10
\end{lstlisting} \end{pagelisting}
The length of a vector, that is the number of elements, can be The length of a vector, that is the number of elements, can be
requested using the \code{length()} or \code{numel()} requested using the \code{length()} or \code{numel()}
@ -292,14 +290,14 @@ functions. \code{size()} provides the same information in a slightly,
yet more powerful way (listing~\ref{vectorsizeslisting}). The above yet more powerful way (listing~\ref{vectorsizeslisting}). The above
used vector \varcode{a} has the following size: used vector \varcode{a} has the following size:
\begin{lstlisting}[label=vectorsizeslisting, caption={Size of a vector.}] \begin{pagelisting}[label=vectorsizeslisting, caption={Size of a vector.}]
>> length(a) >> length(a)
ans = ans =
10 10
>> size(a) >> size(a)
ans = ans =
1 10 1 10
\end{lstlisting} \end{pagelisting}
The answer provided by the \code{size()} function demonstrates that The answer provided by the \code{size()} function demonstrates that
vectors are nothing else but 2-dimensional matrices in which one vectors are nothing else but 2-dimensional matrices in which one
@ -310,7 +308,7 @@ create a column-vector and how the \code[Operator!Matrix!']{'} ---
operator is used to transpose the column-vector into a row-vector operator is used to transpose the column-vector into a row-vector
(lines 14 and following). (lines 14 and following).
\begin{lstlisting}[label=columnvectorlisting, caption={Column-vectors.}] \begin{pagelisting}[label=columnvectorlisting, caption={Column-vectors.}]
>> b = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] % Creating a column-vector >> b = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] % Creating a column-vector
b = b =
1 1
@ -333,7 +331,7 @@ b =
>> size(b) >> size(b)
ans = ans =
1 10 1 10
\end{lstlisting} \end{pagelisting}
\subsubsection{Accessing elements of a vector} \subsubsection{Accessing elements of a vector}
@ -354,7 +352,7 @@ number of elements irrespective of the type of vector.
Elements of a vector are accessed via their index. This process is Elements of a vector are accessed via their index. This process is
called \entermde{Indizierung}{indexing}. called \entermde{Indizierung}{indexing}.
In \matlab{} the first element has the index one. In \matlab{} the first element in a vector has the index one.
The last element's index equals the length of the vector. The last element's index equals the length of the vector.
\end{important} \end{important}
@ -365,8 +363,8 @@ individual values by providing a single index or use the
\code[Operator!Matrix!:]{:} notation to access multiple values with a \code[Operator!Matrix!:]{:} notation to access multiple values with a
single command. single command.
\begin{lstlisting}[label=vectorelementslisting, caption={Access to individual elements of a vector.}] \begin{pagelisting}[label=vectorelementslisting, caption={Access to individual elements of a vector.}]
>> a = (11:20) >> a = (11:20) % generate a vector
a = a =
11 12 13 14 15 16 17 18 19 20 11 12 13 14 15 16 17 18 19 20
@ -376,14 +374,14 @@ ans = 11
ans = 15 ans = 15
>> a(end) % the last element >> a(end) % the last element
ans = 20 ans = 20
\end{lstlisting} \end{pagelisting}
\begin{lstlisting}[caption={Access to multiple elements.}, label=vectorrangelisting] \begin{pagelisting}[caption={Access to multiple elements.}, label=vectorrangelisting]
>> a([1 3 5]) % 1., 3. and 5. element >> a([1 3 5]) % 1., 3. and 5. element
ans = ans =
11 13 15 11 13 15
>> a(2:4) % all elements with the indices 2 to 4 >> a(2:4) % elements at indices 2 to 4
ans = ans =
12 13 14 12 13 14
@ -394,7 +392,7 @@ ans =
>> a(:) % all elements as row-vector >> a(:) % all elements as row-vector
ans = ans =
11 12 13 14 15 16 17 18 19 20 11 12 13 14 15 16 17 18 19 20
\end{lstlisting} \end{pagelisting}
\begin{exercise}{vectorsize.m}{vectorsize.out} \begin{exercise}{vectorsize.m}{vectorsize.out}
Create a row-vector \varcode{a} with 5 elements. The return value of Create a row-vector \varcode{a} with 5 elements. The return value of
@ -403,13 +401,13 @@ ans =
\end{exercise} \end{exercise}
\begin{important}[The : (colon) operator] \begin{important}[The : (colon) operator]
The colon \code[Operator!colon@:]{:} operator is often used when working with vectors. It has multiple purposes. The colon \code[Operator!colon@:]{:} operator is often used when working with vectors. It has multiple purposes.\vspace{-1ex}
\begin{enumerate} \begin{enumerate}
\item In the simplest form, \code{x = a:b} with \code{a} and \code{b} being two numbers, it creates \item In the simplest form, \code{x = a:b} with \code{a} and \code{b} being two numbers, it generates
a vector \code{x} containing the numbers \code{a} to \code{b} in integer steps. In \matlab{} the borders $a$ and $b$ are included $[a, b]$ or $a\leq x \leq b$. a vector \code{x} containing the numbers \code{a} to \code{b} inclusively in integer steps.
\item In the form \code{x = a:c:b} the vector \code{x} uses a \emph{stepsize} of \code{c} to create the range of numbers. \item In the form \code{x = a:c:b} the vector \code{x} uses a \emph{stepsize} of \code{c} to generate the range of numbers.
\item When used in the context of indexing such as \code{x(:)} all elements of the vector x are accessed.
\item As vectors are often used for indexing in other vectors one use the colon operator to create such vectors implicitely, e.g. \varcode{x(1:2:end)} to access every seond element of \code{x}. \item As vectors are often used for indexing in other vectors one use the colon operator to create such vectors implicitely, e.g. \varcode{x(1:2:end)} to access every seond element of \code{x}.
\item Indexing with a single colon, e.g. \code{x(:)}, returns all elements of the vector \code{x} as a row vector.
\end{enumerate} \end{enumerate}
\end{important} \end{important}
@ -423,7 +421,7 @@ how vectors and scalars can be combined with the operators \code[Operator!arithm
\code[Operator!arithmetic!4div@/]{/} \code[Operator!arithmetic!4div@/]{/}
\code[Operator!arithmetic!5powe@.\^{}]{.\^}. \code[Operator!arithmetic!5powe@.\^{}]{.\^}.
\begin{lstlisting}[caption={Calculating with vectors and scalars.},label=vectorscalarlisting] \begin{pagelisting}[caption={Calculations with vectors and scalars.},label=vectorscalarlisting]
>> a = (0:2:8) >> a = (0:2:8)
a = a =
0 2 4 6 8 0 2 4 6 8
@ -447,7 +445,7 @@ ans =
>> a .^ 2 % exponentiation >> a .^ 2 % exponentiation
ans = ans =
0 4 16 36 64 0 4 16 36 64
\end{lstlisting} \end{pagelisting}
When doing calculations with scalars and vectors the same mathematical When doing calculations with scalars and vectors the same mathematical
operation is done to each element of the vector. In case of, e.g. an operation is done to each element of the vector. In case of, e.g. an
@ -460,7 +458,7 @@ element-wise operations of two vectors, e.g. each element of vector
layout (row- or column vectors). Addition and subtraction are always layout (row- or column vectors). Addition and subtraction are always
element-wise (listing~\ref{vectoradditionlisting}). element-wise (listing~\ref{vectoradditionlisting}).
\begin{lstlisting}[caption={Element-wise addition and subtraction of two vectors.},label=vectoradditionlisting] \begin{pagelisting}[caption={Element-wise addition and subtraction of two vectors.},label=vectoradditionlisting]
>> a = [4 9 12]; >> a = [4 9 12];
>> b = [4 3 2]; >> b = [4 3 2];
>> a + b % addition >> a + b % addition
@ -479,7 +477,7 @@ Matrix dimensions must agree.
>> a + d % both vectors must have the same layout! >> a + d % both vectors must have the same layout!
Error using + Error using +
Matrix dimensions must agree. Matrix dimensions must agree.
\end{lstlisting} \end{pagelisting}
Element-wise multiplication, division, or raising a vector to a given power requires a Element-wise multiplication, division, or raising a vector to a given power requires a
different operator with a preceding '.'. \matlab{} defines the different operator with a preceding '.'. \matlab{} defines the
@ -489,7 +487,7 @@ following operators for element-wise operations on vectors
\code[Operator!arithmetic!5powe@.\^{}]{.\^{}} \code[Operator!arithmetic!5powe@.\^{}]{.\^{}}
(listing~\ref{vectorelemmultiplicationlisting}). (listing~\ref{vectorelemmultiplicationlisting}).
\begin{lstlisting}[caption={Element-wise multiplication, division and \begin{pagelisting}[caption={Element-wise multiplication, division and
exponentiation of two vectors.},label=vectorelemmultiplicationlisting] exponentiation of two vectors.},label=vectorelemmultiplicationlisting]
>> a .* b % element-wise multiplication >> a .* b % element-wise multiplication
ans = ans =
@ -509,7 +507,7 @@ Matrix dimensions must agree.
>> a .* d % Both vectors must have the same layout! >> a .* d % Both vectors must have the same layout!
Error using .* Error using .*
Matrix dimensions must agree. Matrix dimensions must agree.
\end{lstlisting} \end{pagelisting}
The simple operators \code[Operator!arithmetic!3mul@*]{*}, The simple operators \code[Operator!arithmetic!3mul@*]{*},
\code[Operator!arithmetic!4div@/]{/} and \code[Operator!arithmetic!4div@/]{/} and
@ -519,7 +517,7 @@ matrix-operations known from linear algebra (Box~
of a row-vectors $\vec a$ with a column-vector $\vec b$ the of a row-vectors $\vec a$ with a column-vector $\vec b$ the
scalar-poduct (or dot-product) $\sum_i = a_i b_i$. scalar-poduct (or dot-product) $\sum_i = a_i b_i$.
\begin{lstlisting}[caption={Multiplication of vectors.},label=vectormultiplicationlisting] \begin{pagelisting}[caption={Multiplication of vectors.},label=vectormultiplicationlisting]
>> a * b % multiplication of two vectors >> a * b % multiplication of two vectors
Error using * Error using *
Inner matrix dimensions must agree. Inner matrix dimensions must agree.
@ -536,14 +534,13 @@ ans =
16 12 8 16 12 8
36 27 18 36 27 18
48 36 24 48 36 24
\end{lstlisting} \end{pagelisting}
\pagebreak[4]
To remove elements from a vector an empty value To remove elements from a vector an empty value
(\code[Operator!Matrix!{[]}]{[]}) is assigned to the respective (\code[Operator!Matrix!{[]}]{[]}) is assigned to the respective
elements: elements:
\begin{lstlisting}[label=vectoreraselisting, caption={Deleting elements of a vector.}]
\begin{pagelisting}[label=vectoreraselisting, caption={Deleting elements of a vector.}]
>> a = (0:2:8); >> a = (0:2:8);
>> length(a) >> length(a)
ans = 5 ans = 5
@ -556,7 +553,7 @@ a = 4 8
>> length(a) >> length(a)
ans = 2 ans = 2
\end{lstlisting} \end{pagelisting}
In addition to deleting of vector elements one also add new elements In addition to deleting of vector elements one also add new elements
or concatenate two vectors. When performing a concatenation the two or concatenate two vectors. When performing a concatenation the two
@ -718,7 +715,7 @@ remapping, but can be really helpful
rows in each column and so on.}\label{matrixlinearindexingfig} rows in each column and so on.}\label{matrixlinearindexingfig}
\end{figure} \end{figure}
\begin{lstlisting}[label=matrixLinearIndexing, caption={Lineares indexing in matrices.}] \begin{pagelisting}[label=matrixLinearIndexing, caption={Lineares indexing in matrices.}]
>> x = randi(100, [3, 4, 5]); % 3-D matrix filled with random numbers >> x = randi(100, [3, 4, 5]); % 3-D matrix filled with random numbers
>> size(x) >> size(x)
ans = ans =
@ -735,17 +732,17 @@ ans =
>> min(x(:)) % or even simpler >> min(x(:)) % or even simpler
ans = ans =
4 4
\end{lstlisting} \end{pagelisting}
\matlab{} defines functions that convert subscript indices to linear indices and back (\code{sub2ind()} and \code{ind2sub()}). \matlab{} defines functions that convert subscript indices to linear indices and back (\code{sub2ind()} and \code{ind2sub()}).
\begin{ibox}[tp]{\label{matrixmultiplication} The matrix--multiplication.} \begin{ibox}[t]{\label{matrixmultiplication} The matrix--multiplication.}
The matrix--multiplication from linear algebra is \textbf{not} an The matrix--multiplication from linear algebra is \textbf{not} an
element--wise multiplication of each element in a matrix \varcode{A} element--wise multiplication of each element in a matrix \varcode{A}
and the respective element of matrix \varcode{B}. It is something and the respective element of matrix \varcode{B}. It is something
completely different. Confusing element--wise and completely different. Confusing element--wise and
matrix--multiplication is one of the most common mistakes in matrix--multiplication is one of the most common mistakes in
\matlab{}. \linebreak \matlab{}.
The matrix--multiplication of two 2-D matrices is only possible if The matrix--multiplication of two 2-D matrices is only possible if
the number of columns in the first matrix agrees with the number of the number of columns in the first matrix agrees with the number of
@ -795,8 +792,7 @@ box~\ref{matrixmultiplication}). To do a matrix-multiplication the
inner dimensions of the matrices must agree inner dimensions of the matrices must agree
(box~\ref{matrixmultiplication}). (box~\ref{matrixmultiplication}).
\pagebreak[4] \begin{pagelisting}[label=matrixOperations, caption={Two kinds of multiplications of matrices.}]
\begin{lstlisting}[label=matrixOperations, caption={Two kinds of multiplications of matrices.}]
>> A = randi(5, [2, 3]) % 2-D matrix >> A = randi(5, [2, 3]) % 2-D matrix
A = A =
1 5 3 1 5 3
@ -822,7 +818,7 @@ ans =
10 15 20 10 15 20
24 23 35 24 23 35
16 17 25 16 17 25
\end{lstlisting} \end{pagelisting}
\section{Boolean expressions} \section{Boolean expressions}
@ -854,7 +850,7 @@ synonymous for the logical values 1 and
0. Listing~\ref{logicaldatatype} exemplifies the use of the logical 0. Listing~\ref{logicaldatatype} exemplifies the use of the logical
data type. data type.
\begin{lstlisting}[caption={The logical data type. Please note that the actual \matlab{} output looks a little different.}, label=logicaldatatype] \begin{pagelisting}[caption={The logical data type. Please note that the actual \matlab{} output looks a little different.}, label=logicaldatatype]
>> true >> true
ans = 1 ans = 1
>> false >> false
@ -871,7 +867,7 @@ ans = 0
ans = 1 1 1 1 ans = 1 1 1 1
>> logical([1 2 3 4 0 0 10]) >> logical([1 2 3 4 0 0 10])
ans = 1 1 1 1 0 0 1 ans = 1 1 1 1 0 0 1
\end{lstlisting} \end{pagelisting}
\varcode{true} and \varcode{false} are reserved keywords that evaluate \varcode{true} and \varcode{false} are reserved keywords that evaluate
to the logical values 1 and 0, respectively. If you want to create a to the logical values 1 and 0, respectively. If you want to create a
@ -884,7 +880,7 @@ code of each character in ``test'' is non-zero value, thus, the result
of casting it to logical is a vector of logicals. A similar thing of casting it to logical is a vector of logicals. A similar thing
happens upon casting a vector (or matrix) of numbers to logical. Each happens upon casting a vector (or matrix) of numbers to logical. Each
value is converted to logical and the result is true for all non-zero value is converted to logical and the result is true for all non-zero
values (line 21). values (line 15).
Knowing how to represent true and false values in \matlab{} using the Knowing how to represent true and false values in \matlab{} using the
logical data type allows us to take a step towards more complex logical data type allows us to take a step towards more complex
@ -922,8 +918,8 @@ stored in variable \varcode{b}?''.
The result of such questions is then given as a logical The result of such questions is then given as a logical
value. Listing~\ref{relationaloperationslisting} shows examples using relational operators. value. Listing~\ref{relationaloperationslisting} shows examples using relational operators.
\pagebreak
\begin{lstlisting}[caption={Relational Boolean expressions.}, label=relationaloperationslisting] \begin{pagelisting}[caption={Relational Boolean expressions.}, label=relationaloperationslisting]
>> true == logical(1) >> true == logical(1)
ans = 1 ans = 1
>> false ~= logical(1) >> false ~= logical(1)
@ -941,7 +937,7 @@ ans = 0 0 1 0 0
ans = 0 1 0 0 1 ans = 0 1 0 0 1
>> [2 0 0 5 0] >= [1 0 3 2 0] >> [2 0 0 5 0] >= [1 0 3 2 0]
ans = 1 1 0 1 1 ans = 1 1 0 1 1
\end{lstlisting} \end{pagelisting}
Testing the relations between numbers and scalar variables is straight Testing the relations between numbers and scalar variables is straight
forward. When comparing vectors, the relational operator will be forward. When comparing vectors, the relational operator will be
@ -1038,7 +1034,7 @@ for implementing such
expressions. Listing~\ref{logicaloperatorlisting} shows a few expressions. Listing~\ref{logicaloperatorlisting} shows a few
examples and respective illustrations are shown in figure~\ref{logicaloperationsfig}. examples and respective illustrations are shown in figure~\ref{logicaloperationsfig}.
\begin{lstlisting}[caption={Boolean expressions.}, label=logicaloperatorlisting] \begin{pagelisting}[caption={Boolean expressions.}, label=logicaloperatorlisting]
>> x = rand(1) % create a single random number in the range [0, 1] >> x = rand(1) % create a single random number in the range [0, 1]
x = 0.3452 x = 0.3452
>> x > 0.25 & x < 0.75 >> x > 0.25 & x < 0.75
@ -1049,7 +1045,7 @@ x = 0.4920, 0.9106, 0.7218, 0.8749, 0.1574, 0.0201, 0.9107, 0.8357, 0.0357, 0.47
ans = 1 0 1 0 0 0 0 0 0 1 ans = 1 0 1 0 0 0 0 0 0 1
>> x < 0.25 | x > 0.75 >> x < 0.25 | x > 0.75
ans = 0 1 0 1 1 1 1 1 1 0 ans = 0 1 0 1 1 1 1 1 1 0
\end{lstlisting} \end{pagelisting}
\begin{figure}[ht] \begin{figure}[ht]
\includegraphics[]{logical_operations} \includegraphics[]{logical_operations}
@ -1064,7 +1060,6 @@ ans = 0 1 0 1 1 1 1 1 1 0
data.}\label{logicaloperationsfig} data.}\label{logicaloperationsfig}
\end{figure} \end{figure}
\pagebreak
\begin{important}[Assignment and equality operators] \begin{important}[Assignment and equality operators]
The assignment operator \code[Operator!Assignment!=]{=} and the The assignment operator \code[Operator!Assignment!=]{=} and the
relational equality operator \code[Operator!relational!==]{==} are relational equality operator \code[Operator!relational!==]{==} are
@ -1093,7 +1088,7 @@ elements of \varcode{x} where the Boolean expression \varcode{x < 0}
evaluates to true and store the result in the variable evaluates to true and store the result in the variable
\varcode{x\_smaller\_zero}''. \varcode{x\_smaller\_zero}''.
\begin{lstlisting}[caption={Logical indexing.}, label=logicalindexing1] \begin{pagelisting}[caption={Logical indexing.}, label=logicalindexing1]
>> x = randn(1, 6) % a vector with 6 random numbers >> x = randn(1, 6) % a vector with 6 random numbers
x = x =
-1.4023 -1.4224 0.4882 -0.1774 -0.1961 1.4193 -1.4023 -1.4224 0.4882 -0.1774 -0.1961 1.4193
@ -1110,7 +1105,7 @@ elements_smaller_zero =
>> elements_smaller_zero = x(x < 0) >> elements_smaller_zero = x(x < 0)
elements_smaller_zero = elements_smaller_zero =
-1.4023 -1.4224 -0.1774 -0.1961 -1.4023 -1.4224 -0.1774 -0.1961
\end{lstlisting} \end{pagelisting}
\begin{exercise}{logicalVector.m}{logicalVector.out} \begin{exercise}{logicalVector.m}{logicalVector.out}
Create a vector \varcode{x} containing the values 0--10. Create a vector \varcode{x} containing the values 0--10.
@ -1119,8 +1114,7 @@ elements_smaller_zero =
\item Display the content of \varcode{y} in the command window. \item Display the content of \varcode{y} in the command window.
\item What is the data type of \varcode{y}? \item What is the data type of \varcode{y}?
\item Return only those elements \varcode{x} that are less than 5. \item Return only those elements \varcode{x} that are less than 5.
\end{enumerate} \end{enumerate}\vspace{-1ex}
\pagebreak[4]
\end{exercise} \end{exercise}
\begin{figure}[t] \begin{figure}[t]
@ -1142,7 +1136,6 @@ segment of data of a certain time span (the stimulus was on,
\begin{exercise}{logicalIndexingTime.m}{} \begin{exercise}{logicalIndexingTime.m}{}
Assume that measurements have been made for a certain time. Usually Assume that measurements have been made for a certain time. Usually
measured values and the time are stored in two vectors. measured values and the time are stored in two vectors.
\begin{itemize} \begin{itemize}
\item Create a vector that represents the recording time \varcode{t \item Create a vector that represents the recording time \varcode{t
= 0:0.001:10;}. = 0:0.001:10;}.
@ -1150,9 +1143,9 @@ segment of data of a certain time span (the stimulus was on,
that has the same length as \varcode{t}. The values stored in that has the same length as \varcode{t}. The values stored in
\varcode{x} represent the measured data at the times in \varcode{x} represent the measured data at the times in
\varcode{t}. \varcode{t}.
\item Use logical indexing to select those values that have been \item Use logical indexing to select values that have been
recorded in the time span from 5--6\,s. recorded in the time span 5--6\,s.
\end{itemize} \end{itemize}\vspace{-1ex}
\end{exercise} \end{exercise}
\begin{ibox}[ht]{\label{advancedtypesbox}Advanced data types} \begin{ibox}[ht]{\label{advancedtypesbox}Advanced data types}
@ -1230,7 +1223,7 @@ As the name already suggests loops are used to execute the same parts
of the code repeatedly. In one of the earlier exercises the factorial of of the code repeatedly. In one of the earlier exercises the factorial of
five has been calculated as depicted in listing~\ref{facultylisting}. five has been calculated as depicted in listing~\ref{facultylisting}.
\begin{lstlisting}[caption={Calculation of the factorial of 5 in five steps}, label=facultylisting] \begin{pagelisting}[caption={Calculation of the factorial of 5 in five steps}, label=facultylisting]
>> x = 1; >> x = 1;
>> x = x * 2; >> x = x * 2;
>> x = x * 3; >> x = x * 3;
@ -1239,7 +1232,7 @@ five has been calculated as depicted in listing~\ref{facultylisting}.
>> x >> x
x = x =
120 120
\end{lstlisting} \end{pagelisting}
This kind of program solves the taks but it is rather repetitive. The only This kind of program solves the taks but it is rather repetitive. The only
thing that changes is the increasing factor. The repetition of such thing that changes is the increasing factor. The repetition of such
@ -1279,7 +1272,7 @@ a certain purpose. The \varcode{for}-loop is closed with the keyword
\code{end}. Listing~\ref{looplisting} shows a simple version of such a \code{end}. Listing~\ref{looplisting} shows a simple version of such a
for-loop. for-loop.
\begin{lstlisting}[caption={Example of a \varcode{for}-loop.}, label=looplisting] \begin{pagelisting}[caption={Example of a \varcode{for}-loop.}, label=looplisting]
>> for x = 1:3 % head >> for x = 1:3 % head
disp(x) % body disp(x) % body
end end
@ -1288,7 +1281,7 @@ for-loop.
1 1
2 2
3 3
\end{lstlisting} \end{pagelisting}
\begin{exercise}{factorialLoop.m}{factorialLoop.out} \begin{exercise}{factorialLoop.m}{factorialLoop.out}
@ -1308,11 +1301,11 @@ keyword \code{while} that is followed by a Boolean expression. If this
can be evaluated to true, the code in the body is executed. The loop can be evaluated to true, the code in the body is executed. The loop
is closed with an \code{end}. is closed with an \code{end}.
\begin{lstlisting}[caption={Basic structure of a \varcode{while} loop.}, label=whileloop] \begin{pagelisting}[caption={Basic structure of a \varcode{while} loop.}, label=whileloop]
while x == true % head with a Boolean expression while x == true % head with a Boolean expression
% execute this code if the expression yields true % execute this code if the expression yields true
end end
\end{lstlisting} \end{pagelisting}
\begin{exercise}{factorialWhileLoop.m}{} \begin{exercise}{factorialWhileLoop.m}{}
Implement the factorial of a number \varcode{n} using a \varcode{while}-loop. Implement the factorial of a number \varcode{n} using a \varcode{while}-loop.
@ -1367,7 +1360,7 @@ expression to provide a default case. The last body of the
\varcode{if} - \varcode{elseif} - \varcode{else} statement has to be \varcode{if} - \varcode{elseif} - \varcode{else} statement has to be
finished with the \code{end} (listing~\ref{ifelselisting}). finished with the \code{end} (listing~\ref{ifelselisting}).
\begin{lstlisting}[label=ifelselisting, caption={Structure of an \varcode{if} statement.}] \begin{pagelisting}[label=ifelselisting, caption={Structure of an \varcode{if} statement.}]
if x < y % head if x < y % head
% body I, executed only if x < y % body I, executed only if x < y
elseif x > y elseif x > y
@ -1375,7 +1368,7 @@ elseif x > y
else else
% body III, executed only if the previous conditions did not match % body III, executed only if the previous conditions did not match
end end
\end{lstlisting} \end{pagelisting}
\begin{exercise}{ifelse.m}{} \begin{exercise}{ifelse.m}{}
Draw a random number and check with an appropriate \varcode{if} Draw a random number and check with an appropriate \varcode{if}
@ -1403,7 +1396,7 @@ that were not explicitly stated above (listing~\ref{switchlisting}).
As usual the \code{switch} statement needs to be closed with an As usual the \code{switch} statement needs to be closed with an
\code{end}. \code{end}.
\begin{lstlisting}[label=switchlisting, caption={Structure of a \varcode{switch} statement.}] \begin{pagelisting}[label=switchlisting, caption={Structure of a \varcode{switch} statement.}]
mynumber = input('Enter a number:'); mynumber = input('Enter a number:');
switch mynumber switch mynumber
case -1 case -1
@ -1413,7 +1406,7 @@ switch mynumber
otherwise otherwise
disp('something else'); disp('something else');
end end
\end{lstlisting} \end{pagelisting}
\subsubsection{Comparison \varcode{if} and \varcode{switch} -- statements} \subsubsection{Comparison \varcode{if} and \varcode{switch} -- statements}
@ -1437,7 +1430,7 @@ skip the execution of the body under certain circumstances, one can
use the keywords \code{break} and \code{continue} use the keywords \code{break} and \code{continue}
(listings~\ref{continuelisting} and \ref{continuelisting}). (listings~\ref{continuelisting} and \ref{continuelisting}).
\begin{lstlisting}[caption={Stop the execution of a loop using \varcode{break}.}, label=breaklisting] \begin{pagelisting}[caption={Stop the execution of a loop using \varcode{break}.}, label=breaklisting]
>> x = 1; >> x = 1;
while true while true
if (x > 3) if (x > 3)
@ -1450,9 +1443,9 @@ use the keywords \code{break} and \code{continue}
1 1
2 2
3 3
\end{lstlisting} \end{pagelisting}
\begin{lstlisting}[caption={Skipping iterations using \varcode{continue}.}, label=continuelisting] \begin{pagelisting}[caption={Skipping iterations using \varcode{continue}.}, label=continuelisting]
for x = 1:5 for x = 1:5
if(x > 2 & x < 5) if(x > 2 & x < 5)
continue; continue;
@ -1463,7 +1456,7 @@ end
1 1
2 2
5 5
\end{lstlisting} \end{pagelisting}
\begin{exercise}{logicalIndexingBenchmark.m}{logicalIndexingBenchmark.out} \begin{exercise}{logicalIndexingBenchmark.m}{logicalIndexingBenchmark.out}
Above we claimed that logical indexing is faster and much more Above we claimed that logical indexing is faster and much more
@ -1535,11 +1528,11 @@ has one \entermde{Argument}{argument} $x$ that is transformed into the
function's output value $y$. In \matlab{} the syntax of a function function's output value $y$. In \matlab{} the syntax of a function
declaration is very similar (listing~\ref{functiondefinitionlisting}). declaration is very similar (listing~\ref{functiondefinitionlisting}).
\begin{lstlisting}[caption={Declaration of a function in \matlab{}}, label=functiondefinitionlisting] \begin{pagelisting}[caption={Declaration of a function in \matlab{}}, label=functiondefinitionlisting]
function [y] = functionName(arg_1, arg_2) function [y] = functionName(arg_1, arg_2)
% ^ ^ ^ % ^ ^ ^
% return value argument_1, argument_2 % return value argument_1, argument_2
\end{lstlisting} \end{pagelisting}
The keyword \code{function} is followed by the return value(s) (it can The keyword \code{function} is followed by the return value(s) (it can
be a list \varcode{[]} of values), the function name and the be a list \varcode{[]} of values), the function name and the
@ -1572,7 +1565,7 @@ The following listing (\ref{badsinewavelisting}) shows a function that
calculates and displays a bunch of sine waves with different amplitudes. calculates and displays a bunch of sine waves with different amplitudes.
\begin{lstlisting}[caption={Bad example of a function that displays a series of sine waves.},label=badsinewavelisting] \begin{pagelisting}[caption={Bad example of a function that displays a series of sine waves.},label=badsinewavelisting]
function myFirstFunction() % function head function myFirstFunction() % function head
t = (0:0.01:2); t = (0:0.01:2);
frequency = 1.0; frequency = 1.0;
@ -1583,7 +1576,7 @@ function myFirstFunction() % function head
hold on; hold on;
end end
end end
\end{lstlisting} \end{pagelisting}
\varcode{myFirstFunction} (listing~\ref{badsinewavelisting}) is a \varcode{myFirstFunction} (listing~\ref{badsinewavelisting}) is a
prime-example of a bad function. There are several issues with it's prime-example of a bad function. There are several issues with it's
@ -1644,7 +1637,7 @@ define (i) how to name the function, (ii) which information it needs
Having defined this we can start coding Having defined this we can start coding
(listing~\ref{sinefunctionlisting}). (listing~\ref{sinefunctionlisting}).
\begin{lstlisting}[caption={Function that calculates a sine wave.}, label=sinefunctionlisting] \begin{pagelisting}[caption={Function that calculates a sine wave.}, label=sinefunctionlisting]
function [time, sine] = sinewave(frequency, amplitude, t_max, t_step) function [time, sine] = sinewave(frequency, amplitude, t_max, t_step)
% Calculate a sinewave of a given frequency, amplitude, % Calculate a sinewave of a given frequency, amplitude,
% duration and temporal resolution. % duration and temporal resolution.
@ -1662,7 +1655,7 @@ function [time, sine] = sinewave(frequency, amplitude, t_max, t_step)
time = (0:t_step:t_max); time = (0:t_step:t_max);
sine = sin(frequency .* time .* 2 .* pi) .* amplitude; sine = sin(frequency .* time .* 2 .* pi) .* amplitude;
end end
\end{lstlisting} \end{pagelisting}
\paragraph{II. Plotting a single sine wave} \paragraph{II. Plotting a single sine wave}
@ -1689,7 +1682,7 @@ specification of the function:
With this specification we can start to implement the function With this specification we can start to implement the function
(listing~\ref{sineplotfunctionlisting}). (listing~\ref{sineplotfunctionlisting}).
\begin{lstlisting}[caption={Function for the graphical display of data.}, label=sineplotfunctionlisting] \begin{pagelisting}[caption={Function for the graphical display of data.}, label=sineplotfunctionlisting]
function plotFunction(x_data, y_data, name) function plotFunction(x_data, y_data, name)
% Plots x-data against y-data and sets the display name. % Plots x-data against y-data and sets the display name.
% %
@ -1701,7 +1694,7 @@ function plotFunction(x_data, y_data, name)
% name : the displayname % name : the displayname
plot(x_data, y_data, 'displayname', name) plot(x_data, y_data, 'displayname', name)
end end
\end{lstlisting} \end{pagelisting}
\paragraph{III. One script to rule them all} \paragraph{III. One script to rule them all}
@ -1728,7 +1721,7 @@ Again, we need to specify what needs to be done:
The implementation is shown in listing~\ref{sinesskriptlisting}. The implementation is shown in listing~\ref{sinesskriptlisting}.
\begin{lstlisting}[caption={Control script for the plotting of sine waves.},label=sinesskriptlisting] \begin{pagelisting}[caption={Control script for the plotting of sine waves.},label=sinesskriptlisting]
amplitudes = 0.25:0.25:1.25; amplitudes = 0.25:0.25:1.25;
frequency = 2.0; frequency = 2.0;
duration = 10.0; % seconds duration = 10.0; % seconds
@ -1744,11 +1737,11 @@ for i = 1:length(amplitudes)
end end
hold off hold off
legend('show') legend('show')
\end{lstlisting} \end{pagelisting}
\pagebreak[4]
\begin{exercise}{plotMultipleSinewaves.m}{} \begin{exercise}{plotMultipleSinewaves.m}{}
Extend the program to plot also a range of frequencies. Extend the program to plot also a range of frequencies.
\pagebreak[4]
\end{exercise} \end{exercise}