matlab spring18 02 -...
Post on 14-Aug-2019
218 Views
Preview:
TRANSCRIPT
COMP110031
MATLAB�� �����
���������
chenyang@fudan.edu.cn
beginsadventurethe
��Slides��• http://user.informatik.uni-goettingen.de/~ychen/MATLAB/
• ��elearning�������� ��
3
��$�
4
�� ��
1- 3.8 "����MATLAB��� (Ch2)
2- 3.15 �#�MATLAB���
3- 3.22 ���� (Ch3)
4- 3.29 ��������
6- 4.12 MATLAB���� (Ch4)
7- 4.19 ���MATLAB ��8- 4.26 ����� (Ch5)
9- 5.3 �#�����
10- 5.10 M���������!�I/O (Ch18)
11- 5.17 �#�M���������!�I/O
12- 5.24 � ��
13- 5.31 �#�� ��
�,�;
• *>�3+15)�3+29)�4+19)�5+3)�5+17)�5+31)
• �3�<=.�97�$�12�,'
• �,��? ��,����)��12:00��!
• 4� 5�(0-�&%�"��• �&�@��: 2�6� 8elearning (��.m, .txt, .pdf, .doc/#)
5
��
1. � �2. ����3. ������4. ���5. ���
6
1. -4)• -�Array��!%'�*�&�+�element�&9��-�& �."��7��6/&��51���$�+&,��index��2) 3�+��&����
• �0 -���� ��&(8#��
7
�#��
• �MATLAB��%�����"[]" �*�","� �" "���";"���#�
• ��$�#���'�"��*�� �)'�,���'�+���)'�,�
– Note:�,!�-�&����(
8
�������
>> A=[]A =
[]>> B=[1 2 3]B =
1 2 3>> C=[1,2,3]C =
1 2 3
>> D=[1;2;3]D =
123
>> E=B'E =
123
9
����������
MATLAB������� ����X=a:step:b (� step������step=1)
>> A=3:7A =
3 4 5 6 7
>> B=2.1:0.1:2.5B =
2.1000 2.2000 2.3000 2.4000 2.5000
>> C=3.1:-1.5:-3C =
3.1000 1.6000 0.1000 -1.4000 -2.9000
>> D=1:-1:6D =
Empty matrix: 1-by-0
10
Step��1
Step���
������#�linspacey=linspace(a, b)�&����%�(y� ��"�a�����"�b������100�"�!��
>> linspace(2, 101)ans =
Columns 1 through 162 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Columns 17 through 3218 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33�����$�%'��
Columns 97 through 10098 99 100 101
11
��������linspace ( )y=linspace(a,b,n)�"���!�$y�������a�� �����b������n��������
>> linspace(1, 2, 5)ans =
1.0000 1.2500 1.5000 1.7500 2.0000>> linspace(1, 3, 1)ans =
3
12
�n<2��y=linspace(a,b,n)#�����b
���� ���logspacey=logspace(a, b)���������y�������10a��������10b������50�������
>> logspace(1, 2)ans =
Columns 1 through 910.0000 10.4811 10.9854 11.5140 12.0679 12.6486 13.2571 13.8950 14.5635
Columns 10 through 1815.2642 15.9986 16.7683 17.5751 18.4207 19.3070 20.2359 21.2095 22.2300
Columns 19 through 2723.2995 24.4205 25.5955 26.8270 28.1177 29.4705 30.8884 32.3746 33.9322
Columns 28 through 3635.5648 37.2759 39.0694 40.9492 42.9193 44.9843 47.1487 49.4171 51.7947
Columns 37 through 4554.2868 56.8987 59.6362 62.5055 65.5129 68.6649 71.9686 75.4312 79.0604
Columns 46 through 5082.8643 86.8511 91.0298 95.4095 100.0000
13
���������logspace (�)
y=logspace(a,b,n)������ �y�������10a��������10b������n�������
>> logspace(1, 2, 5)ans =
10.0000 17.7828 31.6228 56.2341 100.0000
14
�����
>> A=[2 4 6 8]A =
2 4 6 8>> A(1)ans =
2>> A(1:3)ans =
2 4 6
>> A(2:end)ans =
4 6 8>> A(end:-1:1)ans =
8 6 4 2>> A([1 3])ans =
2 6
15
�����
�����
>> A=[2 4 6 8]A =
2 4 6 8
>> A(3)=5A =
2 4 5 8
>> A([1 4])=[9 9]A =
9 4 5 9
16
������
• �������• �������• ������
17
������
>> A=[1,2,3]A =
1 2 3>> B=[4,5,6]B =
4 5 6
>> A+Bans =
5 7 9
>> A+3ans =
4 5 6
>> A-Bans =
-3 -3 -3
18
�����
������
�����
B
• A".*" "./". B
• ��� B=
• ��� B=
• /
19
�������
>> A=[1,3,5]A =
1 3 5
>> B=[2,4,6]B =
2 4 6
>> A.*B %���ans =
2 12 30
>> A*5 %�������ans =
5 15 25
20
������
>> A=[6,7,8]A =
6 7 8>> B=[1,2,2]B =
1 2 2>> A./B %�������ans =
6.0000 3.5000 4.0000>> A.\B %�������ans =
0.1667 0.2857 0.2500>> A./3 %������ans =
2.0000 2.3333 2.6667>> A/3ans =
2.0000 2.3333 2.6667
21
�����
>> A=[1,2,3]A =
1 2 3
>> B=[2,4,6]B =
2 4 6
>> A.^B % ���ans =
1 16 729
>> A.^3 % ��������ans =
1 8 27
>> 3.^A % �� ��ans =
3 9 27
22
�����
C=dot(A, B)
>> A=[2,3,5]A =
2 3 5
>> B=[1,2,3]B =
1 2 3
>> dot(A, B)ans =
23
23
��sum(A.*B)�� ������
������������
�$��"+!
• �$�"+!��<, >, <=, >=, ==, ~=• +!��–����*-�(�� ��$��,��*���$��)�#��' �*&��
–�%��"+!&��������*��$(�����$��$�#�0�1
24
��������
>> A=[1, 3, 5, 7, 9]A =
1 3 5 7 9>> B=[3, 4, 5, 6, 7]B =
3 4 5 6 7>> A>=5ans =
0 0 1 1 1>> A==Bans =
0 0 1 0 0>> A>Bans =
0 0 0 1 1
25
�)!634'
• �)634'%�& ��| ��~ 9• 4'��
– 98�(#� 10$�8�(�� 00$– ����27�-�"&!�)��5��2���)"�.�(��,��2+�
– �*!634'+��������2�)-�"�!�)��)��(0�1
– �4'(a&b)��a�b 98��#�4'+�1– �4'(a|b)���1a�b���98��4'+�1– 94'(~a)��/a0�4'+�1�a98�4'+�0
26
��������
>> A=[0 1 2 3 4]A =
0 1 2 3 4>> B=[4 3 2 1 0]B =
4 3 2 1 0>> A&Bans =
0 1 1 1 0>> A|Bans =
1 1 1 1 1>> ~Bans =
0 0 0 0 1
27
2.����
• ����• �����• ��� ��
28
��ABC
29
�����
30
hilb(n): ����n*n�����invhilb(n):����n*n�������
>> hilb(3)ans =
1.0000 0.5000 0.33330.5000 0.3333 0.25000.3333 0.2500 0.2000
>> invhilb(3)ans =
9 -36 30-36 192 -18030 -180 180
Hi, j =1
i+ j −1H =
1 12
13
14
12
13
14
15
13
14
15
16
14
15
16
17
!
"
##########
$
%
&&&&&&&&&&
>> hilb(3)*invhilb(3)ans =
1.0000 0.0000 -0.00000 1.0000 0
0.0000 -0.0000 1.0000
�����
toeplitz(k, r): ������������1��k�����r�����������toeplitz(c):� �c������������
>> toeplitz([1 3 5], [1 2 3])ans =
1 2 33 1 25 3 1
>> toeplitz([2 4 6])ans =
2 4 64 2 46 4 2
31
�� �
pascal(n):��n��Pascal ��������Pascal���>> pascal(4)ans =
1 1 1 11 2 3 41 3 6 101 4 10 20
32
q �+�� � 1261,)'"$ -q B·��� � 1654,($��&�-
*�%�������!���������#�!�������������
����
vander(v):����������� ��v���A(i,j)=v(i)^(n-j)���n=length(v)
>> vander([1 2 3])ans =
1 1 14 2 19 3 1
33ü �� ������
!"#$" ⋯!&#$" ⋯
!" 1!& 1
⋯ ⋯!##$" ⋯
⋯ 1!# 1
0~1��������
rand(n): ��n*n�0~1���������rand(n, m):��n*m�0~1��������
34
>> rand(3)ans =
0.8147 0.9134 0.27850.9058 0.6324 0.54690.1270 0.0975 0.9575
>> rand(2, 3)ans =
0.9649 0.9706 0.48540.1576 0.9572 0.8003
��������
randn(n): ��n*n����0����1�����
randn(n, m):��n*m����0����1�����
35
>> randn(3)ans =
-0.2050 1.4090 -1.2075-0.1241 1.4172 0.71721.4897 0.6715 1.6302
>> randn(2, 3)ans =
0.4889 0.7269 0.29391.0347 -0.3034 -0.7873
����
magic(n): ��n*n�����
36
>> magic(3)ans =
8 1 63 5 74 9 2
>> magic(4)ans =
16 2 3 135 11 10 89 7 6 124 14 15 1
�����
• C=[A B]�� �����AB• C=[A; B]�� �����AB
37
>> A=ones(2)A =
1 11 1
>> B=eye(2)B =
1 00 1
>> [A B]ans =
1 1 1 01 1 0 1
>> [A; B]ans =
1 11 11 00 1
ü �����cat��
�������
>> A=magic(3)A =
8 1 63 5 74 9 2
>> A(2, :)=[]A =
8 1 64 9 2
>> A(:, 1)=[]A =
1 69 2
38
ü ����
ü ����
����
>> A=magic(3)A =
8 1 63 5 74 9 2
>> A'ans =
8 3 41 5 96 7 2
>> B=[2 1+3i; 1-2i 1]B =
2.0000 + 0.0000i 1.0000 + 3.0000i1.0000 - 2.0000i 1.0000 + 0.0000i
>> B'ans =
2.0000 + 0.0000i 1.0000 + 2.0000i1.0000 - 3.0000i 1.0000 + 0.0000i
>> B.'ans =
2.0000 + 0.0000i 1.0000 - 2.0000i1.0000 + 3.0000i 1.0000 + 0.0000i
39
' ����.' ��
3.�������• ������• ������• ������• ������• ������• ����� �• ����� �• �������
40
������
• C=A�B� �C����Cmn=Amn�Bmn
• C=A�x� �C����Cmn=Amn�x
• ���A+B=B+A• ��A+(B+C)=(A+B)+C
41
��������
>> A=ones(2)A =
1 11 1
>> B=eye(2)B =
1 00 1
>> A+Bans =
2 11 2
>> A+B+1ans =
3 22 3
>> A-Bans =
0 11 0
42
������
• x�����A������������
– 1A=A– x(A+B)=xA+xB– (x+y)A=xA+yA– (xy)A=x(yA)=y(xA)
43
��������
>> A=ones(3)A =
1 1 11 1 11 1 1
>> B=[1 2 3; 4 5 6; 7 8 9]B =
1 2 34 5 67 8 9
>> 2*A+2*Bans =
4 6 810 12 1416 18 20
44
� �� ���
• � ������������������
–���(A*B)*C=A*(B*C)–�����A*(B+C)=A*B+A*C–�����(B+C)*A=B*A+C*A– �� �����E*A=A*E=A
45
�������
>> A=[1 2 3; 4 5 6]A =
1 2 34 5 6
>> B=ones(2)B =
1 11 1
>> A*BError using * Inner matrix dimensions must agree.
>> B*Aans =
5 7 95 7 9
46
�����
C=An=n�A��
>> A=[1 0; 1 2]A =
1 01 2
>> A^2ans =
1 03 4
>> A^3ans =
1 07 8
47
����� �
• ind=find(X): ���X�����������������
• [row, col]=find(X): ���X�����������������ij
48
� �������
>> A=[1 0; 1 2]A =
1 01 2
>> find(A)ans =
124
>> find(A>1)ans =
4
>> [m,n]=find(A)m =
122
n =112
49
��
������
• sort(A):���A����������• sort(A, dim):�dim=1�����������dim=2���������
• sort(…, mode)�mode�ascend� �����������descend� �����
50
��� ����
>> A=rand(3)A =
0.7060 0.0462 0.69480.0318 0.0971 0.31710.2769 0.8235 0.9502
>> sort(A)ans =
0.0318 0.0462 0.31710.2769 0.0971 0.69480.7060 0.8235 0.9502
>> sort(A, 1)ans =
0.0318 0.0462 0.31710.2769 0.0971 0.69480.7060 0.8235 0.9502
>> sort(A, 2)ans =
0.0462 0.6948 0.70600.0318 0.0971 0.31710.2769 0.8235 0.9502
51
����
����
������
>> A=rand(3)A =
0.7060 0.0462 0.69480.0318 0.0971 0.31710.2769 0.8235 0.9502
>> sort(A, 'descend')ans =
0.7060 0.8235 0.95020.2769 0.0971 0.69480.0318 0.0462 0.3171
>> sort(A, 2, 'descend')ans =
0.7060 0.6948 0.04620.3171 0.0971 0.03180.9502 0.8235 0.2769
52
�����
����
� �����
• sum(A): �� A��������� A�������� �
• sum(A, dim): dim=1����� A������dim=2����� A������
• cumsum���sum���������
53
��� �����
>> A=[1 2 3; 1 1 1; 2 2 2]A =
1 2 31 1 12 2 2
>> sum(A)ans =
4 5 6
>> sum(A, 2)ans =
636
>> cumsum(A)ans =
1 2 32 3 44 5 6
>> cumsum(A, 2)ans =
1 3 61 2 32 4 6
>> sum(sum(A))ans =
15
54
��A�� ��
��� ��
��� ��
� ����
• prod(A): �� A�������� A�������� �
• prod(A, dim): dim=1����� A������dim=2����� A�����
• cumprod���prod���������
55
��������
>> A=[1 2; 3 4]A =
1 23 4
>> prod(A)ans =
3 8
>> prod(A, 2)ans =
212
>> cumprod(A)ans =
1 23 8
>> cumprod(A, 2)ans =
1 23 12
56
�����
• diff(X):���/ ���–�X���diff(X)=[X(2)-X(1) X(3)-X(2) ... X(n)-
X(n-1)]• diff([1 2 4])=[1 2]
–�X� ��[X(2:n,:) - X(1:n-1,:)]– diff(X, N)�N��– diff(X, N, dim): dim=1��� ��������dim=2��� �������
57
�������
>> a=[1 2 3; 4 5 6; 7 8 9]a =
1 2 34 5 67 8 9
>> diff(a)ans =
3 3 33 3 3
>> diff(a, 2)ans =
0 0 0
58
>> diff(a, 1, 2)ans =
1 11 11 1
N=1, dim=2��������
4.���
• ���• �����• ���• ������• ��QR��• ����
59
����
• ���� �������������� ������������������MATLAB���rank()�������
60
>> A=[1 2; 2 4]A =
1 22 4
>> rank(A)ans =
1
>> B=[1 2; 3 4]B =
1 23 4
>> rank(B)ans =
2
������
det(A)����A����
>> A=[1 2; 3 4]A =
1 23 4
>> det(A)ans =
-2
61
det( a bc d
!
"#
$
%&) = ad − bc
��
����� �����: trace(X)
>> A=[1 2; 3 4]A =
1 23 4
>> trace(A)ans =
5
62
�������
• ��A�����Q� Q'*Q=I����Q�������������A�����������������Q���A� ����
• ��orth(A)
63
>> A=[1 2; 3 4]A =
1 23 4
>> Q=orth(A)Q =
-0.4046 -0.9145-0.9145 0.4046
>> Q'*Qans =
1.0000 -0.0000-0.0000 1.0000
�����������
• E=eig(A) ���A�����������E• [X,D]=eig(A) ���A�����������D���X�X������������AX=XD
64
>> A=[1 3 5; 1 2 3; 3 4 6]A =
1 3 51 2 33 4 6
>> eig(A)ans =
9.9909-1.08330.0924
>> [X, D]=eig(A)X =
-0.5420 -0.8695 0.2021-0.3540 -0.1694 -0.8555-0.7622 0.4639 0.4766
D =9.9909 0 0
0 -1.0833 00 0 0.0924
���QR�[Q, R]=qr(A)�QR����A�������Q��������R���
>> A=[1 2 3; 1 2 2; 2 2 1]A =
1 2 31 2 22 2 1
>> [Q, R]=qr(A)Q =
-0.4082 -0.5774 -0.7071-0.4082 -0.5774 0.7071-0.8165 0.5774 -0.0000
R =-2.4495 -3.2660 -2.8577
0 -1.1547 -2.30940 0 -0.7071
65
��>> Q*Q'ans =
1.0000 0.0000 0.00000.0000 1.0000 -0.00000.0000 -0.0000 1.0000
Cholesky��LU��� ������p98-p104
����
• norm(X): �X�2����X'X����������
66
>> A=[1 2 3; 4 5 6; 7 8 9]A =
1 2 34 5 67 8 9
>> norm(A)ans =
16.8481
>> eig(A'*A)ans =
0.00001.1414
283.8586
>> sqrt(283.8586)ans =
16.8481
5.�
• � �����• � ���• � ���
67
� ������
• MATLAB�����������������
68
A =
1 0 0 00 0 0 90 2 0 00 3 0 0
!
"
####
$
%
&&&&
���l (1, 1) 1l (2, 4) 9l (3, 2) 2l (4, 2) 3
sparse(A) A
sparse(m, n) m*nfull(S) S
69
>> a=sparse([1 0 0; 0 2 0; 0 0 3])a =
(1,1) 1(2,2) 2(3,3) 3
�������
>> A=[1 0 0; 0 2 0; 0 0 3]A =
1 0 00 2 00 0 3
>> B=sparse(A)ans =
(1,1) 1(2,2) 2(3,3) 3
>> full(B)ans =
1 0 00 2 00 0 3
70
���
���
����� �
nnz():������� ���nonzeros(): ������� �
>> A=sparse([1 0 3; 5 0 0; 0 0 0])A =
(1,1) 1(2,1) 5(1,3) 3
>> nnz(A)ans =
3
>> nonzeros(A)ans =
153
71
�����������
72
� ��
speye(m, n) �������
spones(X) �"!���1������with the same sparsity structure as X�sprand(X) �"!�������� �������
sprandn(X) �"!���#���� �������
>> speye(3, 2)ans =
(1,1) 1(2,2) 1
>> full(speye(3, 2))ans =
1 00 10 0
>> spones([1 2; 0 1])ans =
(1,1) 1(1,2) 1(2,2) 1
>> sprand([1 2; 0 1])ans =
(1,1) 0.6324(1,2) 0.0975(2,2) 0.2785
>> sprandn([1 2; 0 1])ans =
(1,1) 0.3426(1,2) 3.5784(2,2) 2.7694
�������
• �������������������������������
• �������������• �����������
73
>> A=[1 2; 3 4]A =
1 23 4
>> B=sparse([1 0; 0 1])B =
(1,1) 1(2,2) 1
>> A+Bans =
2 23 5
>> B*2ans =
(1,1) 2(2,2) 2
�� �����
• �� �������– nnz��������ncol�� ���– 16 * nnz + 8 * ncol + 8 bytes (on a 64-bit machine)– 12 * nnz + 4 * ncol + 4 bytes (on a 32-bit machine)
74
http://www.mathworks.com/help/matlab/matlab_prog/strategies-for-efficient-use-of-memory.html
-)+5*���(�1�
• 64�$��(8+8)*nnz+8*(ncol+1)– (8+8)*nnz���"��'�76�/*2�&����!
– 8*(ncol+1) ���(ncol+1)� 4��� ��.���.��…�.n�*�8�#�*.n+1� 4� �.n�*���3,+5*0%
75
>> A = eye(1000);>> As = sparse(A); % Sparse matrix with only nonzero elements>> whos
Name Size Bytes Class AttributesA 1000x1000 8000000 double As 1000x1000 24008 double sparse
http://matlab.izmiran.ru/help/techdoc/math/sparse3.html
�����������
0 10 020 0 00 0 00 0 30
76
2 20 1 10 4 10
4*3����nnz=3, ncol=3
��� ��� ��� ����
(���,���)
� ����
>> a=[0 10 0; 20 0 0; 0 0 0; 0 0 30];>> b=sparse(a);>> whosName Size Bytes Class Attributesa 4x3 96 doubleb 4x3 80 double sparse
top related