%-------------------------------------------------------------------------------
% CS100J, Spring 2001
% Thurs 4/19
% Lecture 24
%-------------------------------------------------------------------------------
% This file will run in MATLAB!
%-------------------------------------------------------------------------------
% Notation:
% + The percent symbol (%) means that MATLAB treats everything that follows as a
%   comment which is ignored by MATLAB.
% + Anything surrounded by dollar signs ($something$) means a portion of MATLAB
%   or a MATLAB command that you would enter.
% + menus: "->" means selecting a submenu
%   example) File->Set Path means "click on File menu then click on Set Path
%            submenu"
% + you might wish to uncomment one of the following two lines:
% more on   % turns pager on
% more off  % turns pager off
%-------------------------------------------------------------------------------
% Programming in MATLAB (Matrix Laboratory)
% + two places to put MATLAB statements:
%   - Command Window (workspace)
%   - Edit Window (M-File)
%
% Command Window
% + MATLAB's "main" window
%   - enter commands at prompt (>>)
%   - type a command and then press Return or Enter
%   - this is the "brain"
%     + carves up memory for programs
%     + acts upon commands and lines of code
% + The "brain" is called the MATLAB workspace or base workspace:
%   - processes and evaluates commands
%   - remembers variables and commands you have entered
% + key strokes for short cuts:
%   - recalling commands:       up and own arrow keys
%   - editing editing commands: left and right arrow keys, Backspace, Del,
%                               Home, something called "Emacs"
%   - interrupting evaluation:  Control-C (hold Ctr key and press c)
%-------------------------------------------------------------------------------
% + "Help" commands
    % helpinfo % very general help (help on ways to get help)
    % help     % get help on a command
    % helpwin  % window contain help
    % helpdesk % more extensive HTML help browser
    % lookfor  % search for keword
    % which    % look for commands and files
    % demo     % MATLAB demonstration
% + Command options
%   - enter $help$ <cmd> where <cmd> is the name of a command
%   - many commands have options that modify the command's behavior
%   - example)
      more
      more on
      more off
      echo on
      echo off
%   - most commands here have options not shown!
pause
clc
%-------------------------------------------------------------------------------
% + Handy commands:
    % more on  % turn on pager (spacebar)
    % clc      % clear screen
    % clear    % clear variable assignments
    % who      % check current variables (see also File-> Show Workspace menu)
    % whos     % long form of $who$
    % format   % set output preferences (see also File-> Preferences menu)
    % computer % type of computer
    % version  % version of MATLAB currently used
    % ver      % more explicit than $version$
    % diary    % save results of current session
%-------------------------------------------------------------------------------
% Edit Window
% + want to enter multiple commands
% + becomes tedious doing this in Command Window
% + store statements in separate file called M-File (also called script file)
%   (script because MATLAB will read and process each statement in succession)
% + create file, store statements, run "program" in Command Window
%   - create ASCII (also called text) files:
%     File->New->M-File or use text editor
%   - name of file is the program name 
%     example) blah.m has the name $blah$
%   - set path
%     + to load M-File into workspace, MATLAB need to know locaiton of file
%     + MATLAB has search path: a list of directories or folders where 
%       MATLAB looks to find commands which are stored in M-Files
%     + You may see path by entering $path$
%     + to add directory or folder to path, use File->Set Path, $editpath$, 
%       or $addpath$
%-------------------------------------------------------------------------------
%     examples: 
      % path       % what are currently known paths
      % editpath   % open pathbrowser to edit path
      % addpath    % command line method 
%   - miscellaneous directory commands:
      % pwd, cd    % show current working directory for Command Window
                   % place where MATLAB will store files by default
      % what       % M-Files in current directory
      % type       % show contents of M-File in Command Window
      % exist      % check if M-file exists
      % dir, ls    % show all files in current directory
%-------------------------------------------------------------------------------
% + saving work
%   - diary file:
%     % diary          % open text file named diary in current directory
%                      % save subsequent work in Command Window to diary file
%   - File->Print
% + variables and files
%   - saving:
%     + menu: File->Save Workspace As
%     + CW:   $save$ saves variables to file matlab.mat in MATLAB binary format
%             (unreadable to human, only MATLAB understands it)
%     + CW:   $save$ <file> saves variables to file called <file>
%     + CW:   $save$ <var1> <var2> ... saves jsut those variables
%     Many more options! see also "functional form" in $help save$
%   - loading:
%     + menu: File->Load Workspace
%     + CW:   $load$ (see $save$: many options!)
%   - deleting:
%     + CW:   $delete$
%-------------------------------------------------------------------------------
Language elements:

pause
clc
echo on

% Examples of tokens and expressions

    %============%
    % Separators %
    %============%
    % blank spaces 
    % you may supply as many as you wish between language elements
    % do not separate within a command: example) he   lp
    % example that works:  
     
      help    help  % lots of spaces inserted and no change in behavior
      pause         % special 
      clc           
      
    %==========%
    % Comments %
    %==========%
    % MATLAB ignores anything following a % sign on the SAME line

      pause
      
    %=========% 
    % Numbers %
    %=========%

      1       % integer (whole number)
      1.1     % floating point number (decimal)
      1e2     % floating point number (scientific notation)
      27i     % imaginary
      27j     % imaginary

      pause
      
    %===========%
    % Operators %
    %===========%
      1+2     % add
      1-2     % subtract
      1*2     % times
      1/2     % divide
      1^2     % power
      
      pause
      
    % Operator precedence
    % Operator associativity 
    % ----------------------
      mostly the same rules

    % More information
    % ----------------
      help arith
      help ops
      help slash
      help relop

    %===========%
    % Variables %
    %===========%
    % token that stores another quantity in memory
    % acts like a placeholder for a value  
    % example) $x = 1$ stores the value of $1$ in variable $x$
    % rules: 
    % + case-sensitive (for example, $A$ does not mean $a$!)
    % + only 31 characters (can go more, but extras are ignored)
    % + start with a letter
    % + characters may include digits (0-9) and the underscore (_)
    % examples) x, x1, x_1

    % assignments
    % -----------
    % To store a value in a variable, use an assignment statement
    % Syntax: $var = expression$
    % MATLAB evaluates the expression, carves out a portion of memory, and 
    % stores the value of the expression in $var$.
    % Other features:
    % + You may not use unassigned varibles. 
    % + The equals sign (=) means ASSIGN in MATLAB, not equals!
    % + When talking of algorithms, write an assignment with an arrow.
    %   example) "x <- 1" in English means $x = 1$ in MATLAB.
    %
    % More examples of assignments:
      % x         % $x$ is not assigned a value, so MATLAB cannot evaluate
      x = 1       % assign $1$ to $x$
      x = 2       % you change a variable's assignment
      x           % once assigned, you may check a variable's assignment

    % recalling variable values
    % -------------------------
    % You may use assigned variables in expressions.
    % Until you clear variables, restart MATLAB, or assign new values,
    % variable values remain in memory as long as your current MATLAB session
    % keeps running.
    % example)
      x = 1       % assign 1 to $x$
      y = 2       % assign 2 to $y$
      z = x+y     % evaluate $x + y$ and store the result (3) in $z$
      x = 4       % assign $x$ to a new value
      z           % $z$ is still 3 and NOT 4+2 because $z$
                  % was already assigned BEFORE $x$ changed to 4

    % predefined variables
    % --------------------
    % MATLAB comes with useful value already built-in for your convenience!
      ans         % default name for evaluated expressions without assignments
      pi          % numerical pi
      eps         % smallest number that can be added to 1 to make number bigger
                  % than 1
      inf         % positive infinity
      NaN         % not-a-number (ex: 0/0)
      nan         % not-a-number (ex: 0/0)
      i           % imaginary number (square root of -1)
      j           % imaginary number (square root of -1)
      realmin     % smallest usable positive number in MATLAB
      realmax     % smallest usable negative number in MATLAB
    % You may actually change these values (usually with $eps$)
      eps=0.1     % Assign $eps$ to a new value (0.1)
    % To restore a predefined variable's value, see $clear$ below.
  
    % clearing variables
    % ------------------
    % Sometimes you might wish to clear an assigned variable's value.
    % You may restart MATLAB with $clear$
      clear       % you may clear all variables of assignments 
    % To clear just one variable, enter $clear var$:
      x = 1       % assign 1 to $x$
      clear x     % unassign $x$
      % x         % test value of $x$
    % Use $clear$ to restore predefined variable values.
    % You may also enter $clear var$ to clear a specific variable:
      eps =0.1    % change value of $eps$
      clear eps   % restore $eps$
      eps         % see default value (2.2204e-16)

    %=============%
    % Punctuation %
    %=============%
    % comments:           %
    % suppress output:    ;
    % separate statments: ,
    % For a full list, see
      help punct
    % examples)
      1+1 % Hi!   % evaluate 1+1 and ignore the comment
      a = 1;      % assign 1 to $a$ and suppress output
      a           % check the value of $a$ (MATLAB will say 1)
      a=1, b=2    % you may use a comma to separate statements
                  % on the same input line

    %==========%
    % Keywords %
    %==========%
    % also called reserved words
    % part of the language
    % cannot change meaning using assignments
    % if, end, while, for (and more to come!)
    % Keywords are involved with programming in a big way....

    %=========%
    % Strings %
    %=========%
    % Strings are collections of individual characters (usually ASCII)
    % They are not names and not keywords.
    % Strings are used for processing text files and providing labels.

    % To create a string surround characters with single forward quotes:
      'hello, I am a string!' % enter a string

    % You may also assign a string to a variable:
      x = 'blah, blah, blah'  % assign a string to $x$

    % Characters inside strings have numerical ASCII codes.
    % To find out a string's numerical codes, use $double(string)$:
      x = 'abc';  % assign a string to $x$
      double(x)   % determine the string's numerical character codes
    
    % Much more to say on this subject also....

    %===========%
    % Functions %
    %===========%
    % A function is an expression with the syntax $name(args)$,
    % where $args$ is a sequence of variables separated by commas.

    % Entering a function tells MATLAB to run another program that performs
    % the tasks the function represents.
    % example) 
      sqrt(4) % take the square root of 4
              % MATLAB reports that the answer is 2
   
    % You may include a function in an expression.
    % MATLAB performs the desired tasks in the function. If the function
    % produces a value (known as returning a value), MATLAB substitutes the
    % returned value for the function.
    % example)
      1 + sqrt(4) % add 1 to square root of 4
                  % MATLAB will replace sqrt(4) with 2 and then add 2 to 1
      
    % Some functions in MATLAB take may no arguments:
      help

    % Much more to say on functions....
%-------------------------------------------------------------------------------