投影片 1 - WYK Intranet Home Directory Usage
Download
Report
Transcript 投影片 1 - WYK Intranet Home Directory Usage
An Introduction to Scilab
Tsing Nam Kiu 丁南僑
Department of Mathematics
The University of Hong Kong
2009 January 7
What is a Scilab?
Scilab is a mathematical software
Similar software: Matlab, Mathematica, Octave,
Euler Math Toolbox, Maxima, …
What is special about Scilab: free, highly
supported, powerful, many users, …
Home page of Scilab: www.scilab.org
A short introduction of Scilab:
http://hkumath.hku.hk~nkt/Scilab/IntroToScilab.html
Using Scilab as a calculator
+, – , * (multiplication), / (division), ^ (power)
Examples:
> (12.34 + 0.03) / (2.8 – 1.2 * 3)
> 2^3 or 2*2*2
> 2^– 3
> 2^100
> ans^(1/100)
Using Scilab as a calculator (2)
Commonly used functions:
cos, sin, tan, acos, asin, atan, sqrt, exp, log, log10
Solving quadratic equation x^2 – x+1=0:
> a = 1, b = – 1, c = 1
> (– a + sqrt(b^2 – 4*a*c))/(2*a)
> (– a – sqrt(b^2 – 4*a*c))/(2*a)
A smarter way to find roots of polynomials:
> p = poly([1 –1 1],"x","coeff")
> roots(p)
Using Scilab as a calculator (3)
special constants: %i, %pi, %e
> tan(%pi / 4)
> %e ( = exp(1) )
> (1+%i)*(1--%i)
Learning how to use Scilab and getting help:
Click on “?” on menu
> help command
See documentation on Scilab website
Vectors and matrices in Scilab
Data types: (real or complex) numbers, vectors,
matrices, polynomials, strings, functions, …
Vectors in Scilab:
> x = [0 1 2 – 3]
> y = [2; 4; 6; 8]
> z = [1 2 3 4] ’
’ is conjugate transpose of a matrix
> 3*x, y+z, y–z
> x+y, x+1
Vectors and matrices in Scilab (2)
Matrices in Scilab:
> A = [0 1 0 1; 2 3 –4 0]
>B=A’
> A * y, x * B, A * B, B * A, (B*A)^2
Special matrices (and vectors):
> ones(2,3), zeros(1,2), eye(3,3)
> rand, rand(3,2)
Empty vector or matrix: > a = [ ]
Building matrix by blocks:
> C = [A 2*A], x = [9 x 7], a = [a 1]
Solving linear equations
3 x1 + 2 x2 – x3 = 1
x1
+ x3 = 2
2 x1 – 2 x2 + x3 = – 1
To solve the above system of linear equations:
> A = [3 2 – 1 ; 1 0 1; 2 – 2 1]
> b = [1 2 – 1]’
> x = inv(A)*b
(inv is inverse of a matrix)
>x=A\b
Important remark: theoretically it does not make
sense to divide something by a matrix!
The colon “:” operator
> 1:10, 1:100, xx = 1:100;
Using “;” to suppress answer output
> sum(xx)
> 1:2:10, –3:3:11, 4:–1:1, 2:1:0,
> t = 0: 0.1: 2*%pi
> y = sin(t)
> plot(t,y), plot(t,sin(t),t,cos(t))
Task 1: plot the straight lines
y = x +1 and y = exp(x) on the same graph, from
x = – 2 to x = 2
Elements of vectors and matrices
Example
> v = rand(4,1)
> v(1), v(3), v([2 4]), v(4:-1:1), v($)
“$” means the last entry
Example
> A = [1 2 3 4 5; 6 7 8 9 10]
> A(2,3), A(1,:), A(:, 2), A(:, [4 2])
Exercises
Task 2: simulate tossing of a coin:
0 = head, 1 = tail.
functions to use: rand, round, …
Task 3: simulate tossing of 100 coins
Exercises (2)
Task 4: simulate throwing 3 dices, each dice has
outcome from 1 to 6 with equal probabilities;
functions to use: rand, floor, ceil, …
Task 5 (challenging!): simulate tossing a coin 100
times and find the longest run of consecutive H’s
or T’s in the resulting sequence;
functions to use: diff, find, max,
Programming in Scilab
Click on menu bar to open Scipad; then write your
scilab function file.
Format of a function:
function [out1, out2, ...] = name(in1, in2, ...)
(body of function definition; may have many lines)
endfunction
One file may contain more than one function.
To use the functions, you must load the function
file by choosing File -> Execute the file from the
menu.
Programming in Scilab (2)
A simple function to find the n-th term of the
Fibonnaci sequence 0, 1, 1, 2, 3, 5, 8, 13, 21, …
function k = fibo(n)
if n == 1, k = 0;
elseif n==2, k = 1;
else k = fibo(n-1) + fibo(n-2);
end
endfunction
Save the file as fibo.sci (or any other file name).
Execute it from Scilab menu bar
Try, say: > fibo(5), fibo(2), fibo(10), fibo(100)
Programming in Scilab (3)
An improved programme:
function K = fibonacci(n)
//function K = fibonacci(n)
//Gives the n-th term of the Fibonacci sequence ,1,1,2,3,5,8,13,...
if n==1, K = 0;
elseif n==2, K = 1;
elseif n>2 & int(n)==n
// check if n is an integer greater than 2
K = fibonacci(n-1) + fibonacci(n-2);
else disp('error! -- input is not a positive integer');
end
endfunction
Programming in Scilab (4)
Programming Task (challenging!): write a
programme to automate Task 5, which is to
perform the following experiment m times. The
experiment is to simulate tossing a coin n times
and find the longest run (k) of consecutive H’s or
T’s in the resulting sequence.
For each time you do the experiment, you’ll get a
number k. Therefore you should get m numbers
k1, k2, …, km at the end.
Inputs of the function are m, n; output is a vector
k = [ k1 k2 … km].
Recap
We have discussed and learned the following:
What Scilab is
Basic usage of Scilab (as a calculator)
Vectors and Matrices in Scilab
Solving linear equations
Simulation of some random events
Basic Scilab programming