MATLAB 3 2 2012

37
% Inputs: % Coefficient matrix A % % Outputs: % an lower and upper triangular matrix; % Usage: % [l, u] = LUdecompCrout(a); % Notes: % % ************************************************************************ @ [R,C]=size(a); % starting the Gauss elimination procedure for i=1:R L(i,1) = a(i,1); U(i,i) = 1; end for j = 2:R U(1,j) = a(1,j)/L(1,1); end for i = 2:R for j = 2:i L(i,j) = a(i,j) - L(i,1:j-1)*U(1:j-1,j);

Transcript of MATLAB 3 2 2012

Page 1: MATLAB 3 2 2012

% Inputs:

% Coefficient matrix A

%

% Outputs:

% an lower and upper triangular matrix;

% Usage:

% [l, u] = LUdecompCrout(a);

% Notes:

%

% ************************************************************************@

[R,C]=size(a);

% starting the Gauss elimination procedure

for i=1:R

L(i,1) = a(i,1);

U(i,i) = 1;

end

for j = 2:R

U(1,j) = a(1,j)/L(1,1);

end

for i = 2:R

for j = 2:i

L(i,j) = a(i,j) - L(i,1:j-1)*U(1:j-1,j);

end

for j = i + 1:R

U(i,j) = (a(i,j) - L(i,1:i-1)*U(1:i-1,j))/L(i,i);

Page 2: MATLAB 3 2 2012

end

end

 

 

/////////////////////////////////////////////////////////////////////////////

 

function [x, iter]=GaussJacobiIte(a,b,err,x_1)

%Definition: GaussJacobiIte(a,b,err,x_1)

%*********************************************

%Inputs:

% Coefficient matrix a

% right side constant array b

% initial value: x_1

% error: err,

% limit of iteration:

%Outputs:

% Solution of linear system,x

% No. of iteration, iter

%Usage:

% [x,iter]=GaussJacobiIte(a,b,err,x_1);

%notes:

%

%**************

%The function solves a system of linear equations[a]{x}=[b] using

%Jacobi iterative method.

Page 3: MATLAB 3 2 2012

R=length(b);

%x=zeros(1,R);

DX=max(abs(x_1));

iter=1;

x=x_1;

while DX>err

iter=iter+1;

for i=1:R

sumax=0;

for j=1:R

if j ~=i

sumax=sumax+a(i,j)*x_1(j);

end

end

x(i)=1/a(i,i)*(b(i)-sumax);

end

% DX=max(abs((x-x_1)))

DX=norm(abs(x-x_1));%, pause

x_1 = x;

%if iter=5

% break %this part is used in lect_9

%end

%x_1 = lambda*x+(1-lambda)*x_1,iter

end

///////////////////////////////////////////////////////////////

 

Page 4: MATLAB 3 2 2012

A=[1 2 3; 7 3 1; 1 6 2]

A =

1 2 3

7 3 1

1 6 2

B=[20 13 0]'

B =

20

13

0

A1=[B,A(2,:),A(3,:)]

??? Error using ==> horzcat

CAT arguments dimensions are not consistent.

A1=[B,A(2,:)',A(3,:)']

A1 =

20 7 1

13 3 6

0 1 2

A1=[B,A(:,2),A(:.3)]

??? A1=[B,A(:,2),A(:.3)]

|

Error: Unexpected MATLAB expression.

A1=[B,A(:,2),A(:3)]

??? A1=[B,A(:,2),A(:3)]

|

Error: Unexpected MATLAB expression.

Page 5: MATLAB 3 2 2012

A1=[B,A(:,2),A(:,3)]

A1 =

20 2 3

13 3 1

0 6 2

A2=[A(:,1),B,A(:,3)]

A2 =

1 20 3

7 13 1

1 0 2

A3=[A(:,1),A(:,2),B]

A3 =

1 2 20

7 3 13

1 6 0

det(A1)

ans =

182.0000

det(A2)

ans =

-273

det(A3)

ans =

728.0000

det(A)

ans =

Page 6: MATLAB 3 2 2012

91

D1=det(A1)

D1 =

182.0000

D1=det(A1)

D1 =

182.0000

D2=det(A2)

D2 =

-273

D3=det(A3)

D3 =

728.0000

D=det(A)

D =

91

x1=D1/D

x1 =

2.0000

x2=D2/D

x2 =

-3

x3=D3/D

x3 =

8.0000

/////////////////////////////////////////////////

Page 7: MATLAB 3 2 2012

 

clear

A=[-2 2 1;2 1 6;-1 -2 0]

A =

-2 2 1

2 1 6

-1 -2 0

[V,D]=eig(A)

V =

-0.8944 0.2942 - 0.1698i 0.2942 + 0.1698i

0.4472 0.7845 0.7845

-0.0000 -0.0981 + 0.5095i -0.0981 - 0.5095i

D =

-3.0000 0 0

0 1.0000 + 3.4641i 0

0 0 1.0000 - 3.4641i

A=[-2 2 1;2 1 -6;-1 -2 0]

A =

-2 2 1

2 1 -6

-1 -2 0

[V,D]=eig(A)

V =

-0.9451 0.2032 -0.8944

0.2924 0.8758 0.4472

-0.1462 -0.4379 -0.0000

Page 8: MATLAB 3 2 2012

D =

-2.4641 0 0

0 4.4641 0

0 0 -3.0000

A=[-2 2 -3;2 1 -6;-1 -2 0]

A =

-2 2 -3

2 1 -6

-1 -2 0

[V,D]=eig(A)

V =

-0.9526 0.4082 0.0516

0.2722 0.8165 0.8229

-0.1361 -0.4082 0.5658

D =

-3.0000 0 0

0 5.0000 0

0 0 -3.0000

/////////////////////////////////////////////////////

function y = GaussElim(a,b)

%Definition: GaussElim

%*********************************************************************

%Inputs:

%Coefficient matrix A

% right side constant array B

%Outputs:

Page 9: MATLAB 3 2 2012

%solution to the linear system;

%Usage:

%y = GaussElim_(a, b)

%Notes:

%The function solves a system of linear equations

% using Gauss elimination method

%**********************************************************************

%This function determines the upper triangle of an input matrix using Gauss

%elimination method

ab= [a,b];

[R,C] = size(ab);

%call the user defined function to perform row elementary operation

ab_upper = GaussElim_f(ab);

y = zeros(R,1);

y(R) = ab_upper(R,C)/ab_upper(R,R);

%start the back substitution

for i = R-1:-1:1

y(i) = (ab_upper(i,C) - ab_upper(i,i+1:R)*y(i+1:R))/ab_upper(i,i)

end

///////////////////////////////////

function x = partic(A, b)

% partic Particular solution of Ax=b.

%

% x = partic(A, b) returns a particular solution to Ax=b.

% This particular solution has all free variables set to zero.

Page 10: MATLAB 3 2 2012

% An empty vector is returned if Ax=b is not solvable.

%

% See also slash as in A\b .

[m, n] = size(A);

[Rd, pivcol] = rref([A b]);

r = length(pivcol);

%

% If the last column of the augmented matrix [A b]

% is a pivot column, then Ax=b has no solution.

%

if max(pivcol) == n+1

x = [];

else

%

% The values of the pivot variables are in the

% last column (which is called d) of Rd.

% The free variables are zero in this particular solution.

%

x = zeros(n, 1);

d = Rd(:, n+1);

x(pivcol) = d(1:r);

end

%copy paste :x = partic(A, b)???

/////////////////////////////////////////////////

 

function x = GaussPivot(a,b)

Page 11: MATLAB 3 2 2012

%Definition: GaussPivot(a,b)

%*********************************************************************

%Inputs:

% Coefficient matrix a

% and right side constant array b

%Outputs:

% Solution of linear system;

%Usage:

% s = GaussPivot(a,b);

%Notes:

%The function solves a system of linear equations [a]{x}=[b] using

%elimination method with pivoting.

%***********************************************************

ab=[a,b];

[R,C]=size(ab);

%starting the Gauss elimination procedure

for j=1:R-1

%Pivoting section starts

if ab(j,j) ==0 % < 10^-12

for k = j + 1:R

if ab(k,j) ~= 0

abTemp = ab(j,:);

ab(j,:) = ab(k,:);

ab(k,:) = abTemp;

break

end

Page 12: MATLAB 3 2 2012

end

end

%Pivoting section ends

%Elimination procedure starts

for i = j+1:R

ab(i,j:C) = ab(i,j:C)-ab(i,j)/ab(j,j)*ab(j,j:C);

end

%Gauss elimination procedure ends

end

x = zeros(R,1);

x(R) = ab(R,C)/ab(R,R);

%start the back substitution

for i = R-1:-1:1

x(i) = (ab(i,C) - ab(i,i+1:R)*x(i+1:R))/ab(i,i);

end

%end the back substitution

////////////////////////////////////////

function [x,err]=GaussJordanElim(A,b)

% Definition: [x,err]=GaussJordanElim(A,b)

% ************************************************************************@

% Inputs:

% Coefficient matrix A

% and right side constant array b

% Outputs:

% Solution of linear system; and an intermediate housekeeping variable

Page 13: MATLAB 3 2 2012

% error

% Usage:

% [x,err]=GaussJordanElim(A,b);

% Notes:

% There are also two specific user defined function inside this function

% ************************************************************************@

% The function solves a system of linear equations [a]{x}=[b] using Gauss

% elimination method.

[n,m]=size(A); % size of matrix A

err =0;

x=zeros(n,1);

if n ~= m

disp('error: n~=m');

err = 1;

end

if length(b) ~= n

disp('error: wrong size of b');

err = 2;

else

if size(b,2) ~= 1

b=b';

end

if size(b,2) ~= 1

disp('error: b is a matrix');

Page 14: MATLAB 3 2 2012

err = 3;

end

end

if err == 0

Aa=[A,b];

for i=1:n

[Aa(i:n,i:n+1),err]=gauss_pivot(Aa(i:n,i:n+1));

if err == 0

Aa(1:n,i:n+1)=gauss_jordan_step(Aa(1:n,i:n+1),i); %, pause

end

end

x=Aa(:,n+1);

end

A=0;

%----------------------------------------------------

function A1=gauss_jordan_step(A,i)

[n,m]=size(A); % size of matrix A

A1=A;

s=A1(i,1);

A1(i,:) = A(i,:)/s;

k=[[1:i-1],[i+1:n]];

for j=k

s=A1(j,1);

A1(j,:)=A1(j,:)-A1(i,:)*s;

end

%----------------------------------------------------------

Page 15: MATLAB 3 2 2012

function [A1,err]=gauss_pivot(A)

[n,m]=size(A); % size of matrix A

A1=A;

err = 0; % error flag

if A1(1,1) == 0

check = logical(1); % logical(1) - TRUE

i = 1;

while check

i = i + 1;

if i > n

disp('error: matrix is singular');

err = 1;

check = logical(0);

else

if A(i,1) ~= 0 & check

check = logical(0);

b=A1(i,:); % next three operations exchange rows 1 and i

A1(i,:)=A1(1,:);

A1(1,:)=b;

end

end

end

end

/////////////////////////////////////////////////

 

function y = GaussElim_f(a)

Page 16: MATLAB 3 2 2012

%Definition: GaussElim_f

%*********************************************************************

%Inputs:

%Coefficient matrix A

%Outputs:

%upper triangular matrix;

%Usage:

%x = GaussElim_f(a)

%Notes:

%

%**********************************************************************

%This function determines the upper triangle of an input matrix using Gauss

%elimination method

[R,C] = size(a); %determines the dimension of a matrix starting the Gauss

%elimination procedure

for j = 1:R-1

for i = j + 1:R

a(i,j:C) = a(i,j:C)-a(i,j)/a(j,j)*a(j,j:C)

end

end

y=a;

////////////////////////////////////////////////////////////////////////

A=[3 -1 2;1 2 3;2 -2 -1]

A =

3 -1 2

Page 17: MATLAB 3 2 2012

1 2 3

2 -2 -1

B=[12 11 2]'

B =

12

11

2

[L, U] = LUdecompCrout(A)

??? Undefined function or method 'LUdecompCrout' for input arguments of type

'double'.

[L, U] = LUdecompCrout(A)

L =

3.0000 0 0

1.0000 2.3333 0

2.0000 -1.3333 -1.0000

U =

1.0000 -0.3333 0.6667

0 1.0000 1.0000

0 0 1.0000

a=[2 0 1;0 2 -1;1 -1 4]

a =

2 0 1

0 2 -1

1 -1 4

b=[1 2 -1]

Page 18: MATLAB 3 2 2012

b =

1 2 -1

V=diag(a)

V =

2

2

4

D=diag(V)

D =

2 0 0

0 2 0

0 0 4

A_off=a-D

A_off =

0 0 1

0 0 -1

1 -1 0

inv(D0

??? inv(D0

|

Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.

inv(D)

ans =

0.5000 0 0

0 0.5000 0

Page 19: MATLAB 3 2 2012

0 0 0.2500

[x, iter]=GaussJacobiIte(a,b,err,x_1)

??? Undefined function or variable 'err'.

[x, iter]=GaussJacobiIte(a,b,err,x_1)

??? Undefined function or variable 'err'.

[x, iter]=GaussJacobiIte(a,b,10^-3,x_1)

??? Undefined function or variable 'x_1'.

x_1=[0 0 0]

x_1 =

0 0 0

[x, iter]=GaussJacobiIte(a,b,10^-3,x_1)

x =

0 0 0

iter =

1

x_1=[0 0 1]

x_1 =

0 0 1

[x, iter]=GaussJacobiIte(a,b,10^-3,x_1)

x =

0 0 1

iter =

2

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0 0 1

Page 20: MATLAB 3 2 2012

iter =

2

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0.5000 1.0000 -0.2500

iter =

3

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0.5834 0.9166 -0.1664

iter =

13

x_1=[0 1 0]

x_1 =

0 1 0

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0.5830 0.9170 -0.1665

iter =

11

x_1=[1 0 0]

x_1 =

1 0 0

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0.5835 0.9165 -0.1666

Page 21: MATLAB 3 2 2012

iter =

13

x_1=[1 1 1]

x_1 =

1 1 1

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0.5834 0.9166 -0.1664

iter =

13

x_1=[1 1 0]

x_1 =

1 1 0

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0.5835 0.9165 -0.1665

iter =

11

x_1=[0 1 1]

x_1 =

0 1 1

[x, iter]=GaussJacobiIte(a,b,0.001,x_1)

x =

0.5833 0.9167 -0.1664

iter =

13

Page 22: MATLAB 3 2 2012

A = [4 -2 -3 6; -6 7 6.5 -6; 1 7.5 6.25 5.5; -12 22 15.5 -1]

A =

4.0000 -2.0000 -3.0000 6.0000

-6.0000 7.0000 6.5000 -6.0000

1.0000 7.5000 6.2500 5.5000

-12.0000 22.0000 15.5000 -1.0000

B=[12 -6.5 16 17]'

B =

12.0000

-6.5000

16.0000

17.0000

[x, iter]=GaussJacobiIte(A,B,0.001,x_1)

??? Attempted to access x_1(4); index out of bounds because numel(x_1)=3.

Error in ==> GaussJacobiIte at 30

sumax=sumax+a(i,j)*x_1(j);

x_1=[0 0 0]

x_1 =

0 0 0

[x, iter]=GaussJacobiIte(A,B,0.001,x_1)

x =

0 0 0

iter =

1

A

Page 23: MATLAB 3 2 2012

A =

4.0000 -2.0000 -3.0000 6.0000

-6.0000 7.0000 6.5000 -6.0000

1.0000 7.5000 6.2500 5.5000

-12.0000 22.0000 15.5000 -1.0000

[x, iter]=GaussJacobiIte(A,B,0.001,x_1)

x =

0 0 0

iter =

1

A\B

ans =

2.0000

4.0000

-3.0000

0.5000

x_1=[0 0 0 0]

x_1 =

0 0 0 0

[x, iter]=GaussJacobiIte(A,B,0.001,x_1)

x =

0 0 0 0

iter =

1

x_1=[0 0 0 1]

x_1 =

Page 24: MATLAB 3 2 2012

0 0 0 1

[x, iter]=GaussJacobiIte(A,B,0.001,x_1)

x =

-Inf Inf NaN -Inf

iter =

426

x_1=[0 0 1 1]

x_1 =

0 0 1 1

[x, iter]=GaussJacobiIte(A,B,0.001,x_1)

x =

NaN NaN NaN NaN

iter =

427

A\B

ans =

2.0000

4.0000

-3.0000

0.5000

x_1=[0 0 1 0]

x_1 =

0 0 1 0

[x, iter]=GaussJacobiIte(A,B,0.001,x_1)

x =

NaN NaN NaN NaN

Page 25: MATLAB 3 2 2012

iter =

427

x_1=[2 1 1 0]

x_1 =

2 1 1 0

[x, iter]=GaussJacobiIte(A,B,0.0001,x_1)

x =

NaN NaN NaN NaN

iter =

427

x_1=[2 1 -2 3]

x_1 =

2 1 -2 3

[x, iter]=GaussJacobiIte(A,B,0.0001,x_1)

x =

Inf -Inf NaN Inf

iter =

425

A=[9 -4 -2 0;-4 17 -6 -3;-2 -6 14 -6;0 -3 -6 11]

A =

9 -4 -2 0

-4 17 -6 -3

-2 -6 14 -6

0 -3 -6 11

B=[24;-16;0;18]

B =

Page 26: MATLAB 3 2 2012

24

-16

0

18

[x, iter]=GaussJacobiIte(A,B,0.1,x_1)

x =

3.8284 1.4148 2.5474 3.3691

iter =

13

A\B

ans =

4.0343

1.6545

2.8452

3.6395

A

A =

9 -4 -2 0

-4 17 -6 -3

-2 -6 14 -6

0 -3 -6 11

x_1

x_1 =

2 1 -2 3

x_1=[0 0 0 0]

x_1 =

Page 27: MATLAB 3 2 2012

0 0 0 0

[x, iter]=GaussJacobiIte(A,B,0.1,x_1)

x =

0 0 0 0

iter =

1

A\B

ans =

4.0343

1.6545

2.8452

3.6395

x_1=[0 0 0 1]

x_1 =

0 0 0 1

[x, iter]=GaussJacobiIte(A,B,0.1,x_1)

x =

3.8286 1.4149 2.5490 3.3687

iter =

14

x_1=[0 0 0 1]

x_1 =

0 0 0 1

[x, iter]=GaussJacobiIte(A,B,0.0001,x_1)

x =

4.0341 1.6543 2.8449 3.6393

Page 28: MATLAB 3 2 2012

iter =

53

A\B

ans =

4.0343

1.6545

2.8452

3.6395

3/13Gauss Elim code notes>> help size SIZE Size of array. D = SIZE(X), for M-by-N matrix X, returns the two-element row vector D = [M,N] containing the number of rows and columns in the matrix. For N-D arrays, SIZE(X) returns a 1-by-N vector of dimension lengths. Trailing singleton dimensions are ignored. [M,N] = SIZE(X) for matrix X, returns the number of rows and columns in X as separate output variables. [M1,M2,M3,...,MN] = SIZE(X) for N>1 returns the sizes of the first N dimensions of the array X. If the number of output arguments N does not equal NDIMS(X), then for: N > NDIMS(X), SIZE returns ones in the "extra" variables, i.e., outputs NDIMS(X)+1 through N. N < NDIMS(X), MN contains the product of the sizes of dimensions N through NDIMS(X). M = SIZE(X,DIM) returns the length of the dimension specified by the scalar DIM. For example, SIZE(X,1) returns the number of rows. If DIM > NDIMS(X), M will be 1. When SIZE is applied to a Java array, the number of rows returned is the length of the Java array and the number of columns is always 1. When SIZE is applied to a Java array of arrays, the

Page 29: MATLAB 3 2 2012

result describes only the top level array in the array of arrays. Example: If X = rand(2,3,4); then d = size(X) returns d = [2 3 4] [m1,m2,m3,m4] = size(X) returns m1 = 2, m2 = 3, m3 = 4, m4 = 1 [m,n] = size(X) returns m = 2, n = 12 m2 = size(X,2) returns m2 = 3 See also length, ndims, numel.

>> A

A =

5 1 2 1 4 -2 2 3 8

>> [R,C] = size(A)

R =

3

C =

3////////////////////////////////////////>> help zero --- help for DynamicSystem/zero ---

ZERO Computes the transmission zeros of linear systems. Z = ZERO(SYS) returns the transmission zeros of the dynamic system SYS. Zero values are expressed in the reciprocal of the time units of SYS (for example, 1/minute if SYS.TimeUnit = 'minutes'). [Z,GAIN] = ZERO(SYS) also returns the transfer function gain (in the zero-pole-gain sense) for SISO models SYS. [Z,...] = ZERO(SYS,J1,...,JN) computes the transmission zeros of the model with subscripts (J1,...,JN) in the model array SYS.

Page 30: MATLAB 3 2 2012

See also damp, pole, pzmap, iopzmap, zpk, lti, DynamicSystem.

>> y = zeros(R,1)

y =

0 0 0

>> y = zeros(R,2)

y =

0 0 0 0 0 0

>> y = zeros(3,2)

y =

0 0 0 0 0 0

>> y = zeros(5,2)

y =

0 0 0 0 0 0 0 0 0 0

//////////////////////>> [A,B]

Page 31: MATLAB 3 2 2012

ans =

5 1 2 19 1 4 -2 -2 2 3 8 39

///////////////////////////////////>> R-1:-1:1

ans =

2 1

>> [10:-1:3]

ans =

10 9 8 7 6 5 4 3

>> [10:1:30]

ans =

Columns 1 through 12

10 11 12 13 14 15 16 17 18 19 20 21

Columns 13 through 21

22 23 24 25 26 27 28 29 30

//////////////////////////////////////For>> help for FOR Repeat statements a specific number of times. The general form of a FOR statement is: FOR variable = expr, statement, ..., statement END The columns of the expression are stored one at a time in the variable and then the following statements, up to the END, are executed. The expression is often of the form X:Y, in which case its columns are simply scalars. Some examples (assume N has already been assigned a value).

Page 32: MATLAB 3 2 2012

for R = 1:N for C = 1:N A(R,C) = 1/(R+C-1); end end Step S with increments of -0.1 for S = 1.0: -0.1: 0.0, do_some_task(S), end Set E to the unit N-vectors for E = eye(N), do_some_task(E), end Long loops are more memory efficient when the colon expression appears in the FOR statement since the index vector is never created. The BREAK statement can be used to terminate the loop prematurely. See also parfor, if, while, switch, break, continue, end, colon.

Reference page in Help browser doc for

>> for R = 1:5 for C = 1:5 A(R,C) = 1/(R+C-1); end end>> A(R,C)

ans =

0.1111

>> (1/(1+1-1))

ans =

1

>> (2/(2+2-1))

ans =

0.6667