{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Introduction to MATLAB/octave\n", "
jupyter
notebooks; these are installed on our cluster.\n",
"\n",
"This notebook is, in fact, running under an octave
kernel (see in the upper right corner).\n",
"\n",
"As the two environments are almost 100% syntax-compatible, we will always refer to the code as octave
, but almost everything will also be applicable to MATLAB environments."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Matrices and vectors\n",
"\n",
"One of the important quirks of octave
syntax is that its elementary object is a matrix. If in eXtrema
, separate types exist for vectors and matrices, octave
takes the view of vectors being a particular kind of a matrix, with one of the dimensions being of size 1. Thus it distinguishes between column and row vectors and many errors you encounter will likely have to do with failures to keep track and convert between the two types of vectors as appropriate.\n",
"\n",
"Here are a few different ways of creating and manipulating matrices and vectors."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"\n",
"\n",
"\n",
"\u001b[?2004h\n",
"\u001b[?2004l\n",
"\n",
"\n",
"\n",
"\u001b[?2004h\n",
"\u001b[?2004l\n",
"\n",
"\n",
"\n",
"\u001b[?2004h\n",
"\u001b[?2004l\n",
"A =\n",
"\n",
" 1 2 3\n",
" 4 5 6\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"B =\n",
"\n",
" 0.151246 0.207771 0.043157\n",
" 0.869332 0.604920 0.516304\n",
" 0.716739 0.482289 0.163340\n",
" 0.296572 0.161655 0.951600\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"I =\n",
"\n",
"Diagonal Matrix\n",
"\n",
" 1 0 0\n",
" 0 1 0\n",
" 0 0 1\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"Z =\n",
"\n",
" 0 0\n",
" 0 0\n",
"\n",
"\u001b[?2004h"
]
}
],
"source": [
"A = [ 1 2 3; 4 5 6]\n",
"B = rand(4,3)\n",
"I = eye(3)\n",
"Z = zeros(2,2)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"v =\n",
"\n",
" 1 2 3\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" 1\n",
" 2\n",
" 3\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"w =\n",
"\n",
" 4\n",
" 5\n",
" 6\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" 4 5 6\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"t =\n",
"\n",
" 0\n",
" 0\n",
" 0\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"s =\n",
"\n",
" 0 0 0 0 0 0 0 0\n",
"\n",
"\u001b[?2004h"
]
}
],
"source": [
"v = [1 2 3]\n",
"v'\n",
"w = [4;5;6]\n",
"w'\n",
"t = zeros(3,1)\n",
"s = zeros(1,8)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"ans = 32\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans = 32\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" 4 10 18\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" 4 10 18\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" 4 8 12\n",
" 5 10 15\n",
" 6 12 18\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" 4 8 12\n",
" 5 10 15\n",
" 6 12 18\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" -3 6 -3\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"\n",
" 3\n",
" -6\n",
" 3\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"warning: cross: taking cross product of column by row\n",
"warning: called from\n",
" cross at line 62 column 7\n",
"\n",
"ans =\n",
"\n",
" 3\n",
" -6\n",
" 3\n",
"\n",
"\u001b[?2004h"
]
}
],
"source": [
"v*w\n",
"1*4 + 2*5 + 3*6\n",
"v.*w'\n",
"[1*4 2*5 3*6]\n",
"v.*w\n",
"[1*4 2*4 3*4; 1*5 2*5 3*5; 1*6 2*6 3*6]\n",
"cross(v,w')\n",
"cross(w,v')\n",
"cross(w,v)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h"
]
}
],
"source": [
"system('rm -rf ~/5P10/Lab4');\n",
"system('mkdir -p ~/5P10/Lab4');"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h"
]
}
],
"source": [
"system('cp -r /work/5P10/Lectures/octave-tutorial ~/5P10/Lab4');\n",
"\n",
"### if you are NOT on one of our workstations, use the following:\n",
"### -r = --recursive\n",
"### -nH = --no-host-directories\n",
"### -np = --no-parent\n",
"### -R = --reject\n",
"#system('wget -r -nH -np --cut-dirs=3 -R \"index.html*\" http://www.physics.brocku.ca/Courses/5P10/Lectures/octave-tutorial/');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Elementary operations and interactions with octave\n",
"\n",
"There is no need to reproduce the essential introduction, as it exists:\n",
"\n",
" * a simple tutorial; and\n",
" * a comprehensive Reference Manual.\n",
"\n",
"Students are expected to work through the tutorial on their own, and learn how to use and search the online documentation. octaveBasic must be completed now, other parts of the tutorial will be reviewed later as needed, and completed as homework.\n",
"\n",
"A crucial part for us is the ability to read in, analyze and plot experimentala data. The rest of this notebook is dedicated to learning how to do this."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Created file '/home/edik/5P10/Lab4/VI.dat'.\n"
]
}
],
"source": [
"%%file ~/5P10/Lab4/VI.dat\n",
"# V I,mA\n",
" 0 0.468\n",
" 1 0.405\n",
" 2 0.342\n",
" 3 0.279\n",
" 4 0.216\n",
" 5 0.153\n",
" 6 0.090\n",
" 6.4 0.064"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The basic operation for this simple file is trivial: we know it's a text file, with one header line and two columns of floating-point data:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h"
]
}
],
"source": [
"## this syntax is simpler, but textread() has been declared obsolete\n",
"## [V,I] = textread('VI.dat',\"%f %f\",'headerlines',1);\n",
"\n",
"fp = fopen('~/5P10/Lab4/VI.dat','r');\n",
"data = textscan(fp,\"%f %f\",'HeaderLines',1);\n",
"V = data(:,1);\n",
"I = data(:,2);\n",
"fclose(fp);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In general, though, octave
has multiple ways of bringing in data, and can deal with a variety of file formats, some highly structured (like spreadheet files, for example). When little is known about the format of the data file, importdata()
is a useful tool. After a little digging through the file structure, the same result can be obtained: two column vectors, V and I."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"Variables visible from the current scope:\n",
"\n",
"variables in scope: top scope\n",
"\n",
" Attr Name Size Bytes Class\n",
" ==== ==== ==== ===== ===== \n",
" D 1x1 139 struct\n",
"\n",
"Total is 1 element using 139 bytes\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"ans =\n",
"{\n",
" [1,1] = data\n",
" [2,1] = textdata\n",
"}\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"V =\n",
"\n",
" 0\n",
" 1.0000\n",
" 2.0000\n",
" 3.0000\n",
" 4.0000\n",
" 5.0000\n",
" 6.0000\n",
" 6.4000\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"I =\n",
"\n",
" 0.468000\n",
" 0.405000\n",
" 0.342000\n",
" 0.279000\n",
" 0.216000\n",
" 0.153000\n",
" 0.090000\n",
" 0.064000\n",
"\n",
"\u001b[?2004h"
]
}
],
"source": [
"D = importdata('~/5P10/Lab4/VI.dat',' ',1);\n",
"\n",
"### the file is imported as one unified structure, so \"whos\" yields little insight\n",
"whos D\n",
"### the first step is to identify what is in the structure ...\n",
"fieldnames(D)\n",
"\n",
"#D.textdata\n",
"#D.data\n",
"\n",
"### ... and then follow down to locate and extract the data itself\n",
"V = D.data(:,1)\n",
"I = D.data(:,2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"ans =\n",
"{\n",
" [1,1] = fltk\n",
" [1,2] = gnuplot\n",
"}\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h"
]
}
],
"source": [
"available_graphics_toolkits()\n",
"graphics_toolkit(\"gnuplot\");"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"ans =\n",
"\n",
" 0 0\n",
" 1.0000 0.4050\n",
" 2.0000 0.6840\n",
" 3.0000 0.8370\n",
" 4.0000 0.8640\n",
" 5.0000 0.7650\n",
" 6.0000 0.5400\n",
" 6.4000 0.4096\n",
"\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"\n",
" Work your way through the remaining sections of the octave
tutorial.\n",
"
\n",
" Convert one of previously obtained graphs (the analysis of data from VI.dat or Cavendish.dat) from gnuplot
or eXtrema
to octave
. Demonstrate how to display multiple frames (one above or beside the other), annotate your figures clearly to communicate the same information (maximum of power, and the resistance at which this maximum occurs, or the period of oscillations, etc.)."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h\u001b[?2004l\n",
"\u001b[?2004h"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"