# Posts Tagged ‘Matlab’

## Quasar for Matlab/Octave users

This section gives an overview of various functions and operators in Matlab and Quasar. Please feel free to extend this page if you find something that is missing.

Quick hints (see reference manual for a complete description):

• Matrices are passed by reference rather than by value. If necessary, use the `copy(.)` function.
• `end` variable, like in `A(end,end)` is currently not supported.
• All functions work transparently on the GPU (in MATLAB you need to use special datatypes `GPUsingle`, `GPUdouble`, …)

## Arithmetic operators

 MATLAB/Octave Quasar Assignment a=1; b=2; a=1; b=2 Multiple assignment [a,b]=[1,2]; [a,b]=[1,2] Addition a+b a+b Subtraction a-b a-b Multiplication a*b a*b Division a/b a/b Power a^b a^b Remainder rem(a,b) periodize(a,b) Addition (atomic) a+=1 a+=1 Pointwise multiplication a.*b a.*b Pointwise division a./b a./b Pointwise power a.^b a.^b

## Relational operators

 MATLAB/Octave Quasar Equality a==b a==b Less than a < b a < b Greater than a > b a > b Less than or equal a <= b a <= b Greater than or equal a >= b a >= b Inequal a ~= b a != b

## Logical operators

 MATLAB/Octave Quasar Logical AND a && b a && b Logical OR a || b a || b Logical NOT ~a !a Logical XOR xor(a,b) xor(a,b) Bitwise AND a & b and(a,b) Bitwise OR a | b or(a,b) Bitwise NOT ~a not(a) Bitwise XOR xor(a,b) xor(a,b)

## Square root, logarithm

 MATLAB/Octave Quasar Square root sqrt(a) sqrt(a) Logarithm, base e log(a) log(a) Logarithm, base 2 log2(a) log2(a) Logarithm, base 10 log10(a) log10(a) Exponential function exp(a) exp(a)

## Rounding

 MATLAB/Octave Quasar Round round(a) round(a) Round up ceil(a) ceil(a) Round down floor(a) floor(a) Round towards zero fix(a) Not implemented yet Fractional part frac(a) frac(a)

## Mathematical constants

 MATLAB/Octave Quasar pi pi pi e exp(1) exp(1)

## Missing values (IEEE-754 floating point status flags)

 MATLAB/Octave Quasar Not a number NaN 0/0 +Infinity +inf 1/0 -Infinity -inf -1/0 Is not a number isnan(x) isnan(x) Is infinity isinf(x) isinf(x) Is finite isfinite(x) isfinite(x)

## Complex numbers

 MATLAB/Octave Quasar Imaginary unit i 1i or 1j Complex number 3+4i z=3+4i z=3+4i or z=complex(3,4) Modulus abs(z) abs(z) Argument arg(z) angle(z) Real part real(z) real(z) Imaginary part imag(z) imag(z) Complex conjugate conj(z) conj(z)

## Trigonometry

 MATLAB/Octave Quasar Sine sin(x) sin(x) Cosine cos(x) cos(x) Tangent tan(x) tan(x) Hyperbolic Sine sinh(x) sinh(x) Hyperbolic Cosine cosh(x) cosh(x) Hyperbolic Tangent tanh(x) tanh(x) Arcus Sine asin(x) asin(x) Arcus Cosine acos(x) acos(x) Arcus Tangent atan(x) atan(x) Arcus Hyperbolic Sine asinh(x) asinh(x) Arcus Hyperbolic Cosine acosh(x) acosh(x) Arcus Hyperbolic Tangent atanh(x) atanh(x)

## Random numbers

 MATLAB/Octave Quasar Uniform distribution [0,1[ rand(1,10) rand(1,10) Gaussian distribution randn(1,10) randn(1,10) Complex Gaussian distribution randn(1,10)+1i*randn(1,10) complex(randn(1,10),randn(1,10))

## Vectors

 MATLAB/Octave Quasar Comment Row vector a=[1 2 3 4]; a=[1,2,3,4] Column vector a=[1; 2; 3; 4]; a=transpose([1,2,3,4]) Sequence 1:10 1..10 Sequence with steps 1:2:10 1..2..10 Decreasing sequence 10:-1:1 10..-1..1 Linearly spaced vectors linspace(1,10,5) linspace(1,10,5) Reverse reverse(a) reverse(a) import “system.q”

## Concatenation

Quasar notes: please avoid because this programming approach is not very efficient. More efficient is to create the resulting matrix using `zeros(x)`, then use slice accessors to fill in the different parts.

 MATLAB/Octave Quasar Comments Horizontal concatenation [a b] cat(a,b) import “system.q” Vertical concatenation [a; b] vertcat(a,b) import “system.q” Vertical concatenation with sequences [0:5; 6:11] vertcat(0..5,6..11) import “system.q” Repeating repmat(a,[1 2]) repmat(a,[1,2])

## Matrices

 MATLAB/Octave Quasar Comment The first 10 element X+Y a(1:10,1:10); a[0..9,0..9] Skip the first elements X+Y a(2:end,2:end); a[1..size(a,0)-1,1..size(a,1)-1] The last elements a(end,end) a[size(a,0..1)-1] 10th row a(10,:) a[9,:] 10th column a(:,10) a[:,9] Diagonal elements diag(a) diag(a) import “system.q” Matrix with diagonal 1,2,…,10 diag(1..10) diag(0..9) import “system.q” Reshaping reshape(a,[1 2 3]) reshape(a,[1,2,3]) Transposing transpose(a) transpose(a) Hermitian Transpose a’ herm_transpose(a) import “system.q” Copying matrices a=b a=copy(b) Matrices passed by reference for efficiency Flip upsize-down flipud(a) flipud(a) Flip left-right fliplr(a) fliplr(a)

## Matrix dimensions

 MATLAB/Octave Quasar Comments Number of elements numel(a) numel(a) Number of dimensions ndims(a) ndims(a) import “system.q” Size size(a) size(a) Size along 2nd dimension size(a,2) size(a,1) Size along 2nd & 3rd dimension [size(a,2),size(a,3)] size(a,1..2)

## Array/matrix creation

 MATLAB/Octave Quasar Comment Identity matrix eye(3) eye(3) Zero matrix zeros(2,3) zeros(2,3) Ones matrix ones(2,3) ones(2,3) Uninitialized matrix – uninit(2,3) Complex identity matrix complex(eye(3)) complex(eye(3)) Complex zero matrix complex(zeros(2,3)) czeros(2,3) Complex ones matrix complex(ones(2,3)) complex(ones(2,3)) Complex Uninitialized matrix – cuninit(2,3) Vector zeros(1,10) zeros(10) or vec(10) vec enables generic programming Matrix zeros(10,10) zeros(10,10) or mat(10,10) mat enables generic programming Cube zeros(10,10,10) zeros(10,10,10) or cube(10,10,10) cube enables generic programming

## Maximum and minimum

 MATLAB/Octave Quasar Maximum of two values max(a,b) max(a,b) Minimum of two values min(a,b) min(a,b) Maximum of a matrix max(max(a)) max(a) Minimum of a matrix along dimension X=1,2 min(a,[],X) min(a,X-1) Maximum of a matrix along dimension X=1,2 max(a,[],X) max(a,X-1)

## Matrix assignment

 MATLAB/Octave Quasar Comments Assigning a constant to a matrix slice a(:,1)=44; a[:,0]=44 Assigning a vector to a matrix row slice a(:,1)=0:99 a[:,0]=0..99 Assigning a vector to a matrix column slice a(1,:)=(0:99)’ a[0,:]=transpose(0..99) Replace all positive elements by one a(a>0)=1 a[a>0]=1 *New*

## Boundary handling, clipping (coordinate transforms)

 MATLAB/Octave Quasar Comments Periodic extension rem(x,N) periodize(x,N) Mirrored extension – mirror_ext(x,N) Clamping – clamp(x,N) returns 0 when x=N, otherwise x. Saturation between 0 and 1 – sat(x) returns 0 when x=1, otherwise x.

## Fourier transform

 MATLAB/Octave Quasar Comments 1D FFT fft(x) fft1(x) 2D FFT fft2(x) fft2(x) 3D FFT fftN(x) fft3(x) 1D inverse FFT ifft(x) ifft1(x) 2D inverse FFT ifft2(x) ifft2(x) 3D inverse FFT ifftN(x) ifft3(x) 1D fftshift fftshift(x) fftshift1(x) import “system.q” 2D fftshift fftshift(x) fftshift2(x) import “system.q”; Works correctly or images with size MxNx3 3D fftshift fftshift(x) fftshift3(x) import “system.q” 1D inverse fftshift ifftshift(x) ifftshift1(x) import “system.q” 2D inverse fftshift ifftshift(x) ifftshift2(x) import “system.q”; Works correctly or images with size MxNx3 3D inverse fftshift ifftshift(x) ifftshift3(x) import “system.q”

## Conversion between integer and floating point

 MATLAB/Octave Quasar To single single(x) float(x) 32-bit FP precision mode only To double double(x) float(x) 64-bit FP precision mode only To 32-bit signed integer int32(x) int(x) or int32(x) import “inttypes.q” To 16-bit signed integer int16(x) int16(x) import “inttypes.q” To 8-bit signed integer int8(x) int8(x) import “inttypes.q” To 32-bit unsigned integer uint32(x) uint32(x) import “inttypes.q” To 16-bit unsigned integer uint16(x) uint16(x) import “inttypes.q” To 8-bit unsigned integer uint8(x) uint8(x) import “inttypes.q”