Part 1
- 請寫一個 MATLAB 程式碼 testMat01.m,請依下列步驟進行此作業:
- 使用 randn 指令產生一個 10×10 的矩陣 A。
- 計算 B=(A+A')/2。請注意,B 一定是一個對稱矩陣。
- 計算矩陣 B 的固有向量 e1, e2, ... e10。
- 驗證在 i 不等於 j 的情況下,ei 和 ej 的內積必定為零。
- 我們可用數學證明:一個方陣的行列式值會等於其固有值的乘積。請寫一個 MATLAB 程式碼 testEig01.m,隨意產生 10 個 100×100 的方陣來驗證上述定理。
- 我們可用數學證明:一個方陣的主對角線的元素和,會等於其固有值的和。請寫一個 MATLAB 程式碼 testEig02.m,隨意產生 10 個 100×100 的方陣來驗證上述定理。
- Please use 3 lines of MATLAB statements to solve the following simultaneous linear equations: $$ \left\{ \begin{matrix} x+y+z=1\\ 3x-y-3z=4\\ x+5y-9z=0\\ \end{matrix} \right. $$
- 請寫一個 MATLAB 程式碼 lse01.m,使用 MATLAB的「左除」找出一點 P,使得 P 到下列三條直線的距離平方和為最小: $$ \left\{ \begin{matrix} 2x-y = 2\\ x-2y = -2\\ x+y = 1\\ \end{matrix} \right. $$ 請問 P 值為何?此時最小距離平方和是多少?
- 請寫一個 MATLAB 程式碼 lse02.m,採用 MATLAB 的「左除」運算,找出下列聯立方程式的最小平方解: $$ \left\{ \begin{matrix} 3x+2y = 1\\ x+3y = 4\\ 4x+2y = 3\\ x-y = 6\\ \end{matrix} \right. $$ 此時最小平方誤差是多少?
Part 2
- Definition of eigenvalues and eigenvectors: What is the definition of eigenvalues and eigenvectors of a square matrix A?
- Formula for eigenvalue decomposition: What is the formula for eigenvalue decomposition? (Please clearly define your notation.)
- 試用 MATLAB的「左除」運算,找出最接近下列五點的最小平方三次多項式:
(1, 5) (2, 3) (3, 4) (4, 7) (5, 2) 請畫出此多項式及這五點資料。(請使用 MATLAB的「左除」或「反斜線」,而不要直接使用 polyfit 指令。)- Sum of squared distances between a point and multiple planes: 請使用 MATLAB的「左除」找出空間中的一點 P,使得 P 到下列 4 個平面的距離平方和為最小: $$ \left\{ \begin{matrix} 2x-y+2z & = & 2\\ x-2y-2z & = & -2\\ x+y+z & = & 1\\ z & = & 5\\ \end{matrix} \right. $$ 請問 P 值為何?此時最小距離平方和是多少?
- Eigenvalue of same-column-sum matrix: Suppose that a square matrix A has its column sums all equal to k. Prove that k is an eigenvalue of A.
- Power method to compute page rank: As described in our slides, we can use the power method to find the page rank of a given connectivity matrix. That is, we can repeat $\mathbf{x}=A*\mathbf{x}$ until $\mathbf{x}$ converges to find the page rank, where $A$ is the transition probability matrix derived from the connectivity matrix. Write a function pageRankByPower.m to return the page rank, with the following usage:
[pagerank, iterCount]=pageRankByPower(G, p), whereMore specs are as follows:
- G: the given connectivity matrix
- p: the given probability of following a link in a page
- pagerank: the returned page rank
- iterCount: the iteration count of the power method
You can download the p-file pageRankByPower.p to test your function. Here is a test script with several test cases:
- Note that you can only use the power method to implement this function.
- The initial guess of the page rank should be a probability vector of uniform distribution.
- The maximum iteration count is 100. Once the maximum iteration count is reached, the current page rank is returned immediately.
- The iteration stops whenever max(abs(pr-prprev)) < eps, where pr is the current page rank and prprev is the page rank obtained at previous iteration.
- Ranking of sports teams: In this assignment, we shall use the concept of Google's PageRank for team ranking. During a sports season, we have four teams with the following result, with "m-n" indicating that there are m+n games between two teams, with m winning games for the left team and n winning games for the right team. (For instance, 3-1 between teams A and B indicates that A has 3 winning games while B has 1.) We shall use the following steps to explain how to find the strength (or team rank) of each team.
- We can use a matrix GD to respresent the result of "difference in winning games":
GD = [ 0 2 1 0 -2 0 -2 -2 -1 2 0 0 0 2 0 0]; where GD(i,j) is the no. of difference of winning games between team i and team j. For instance, GD(2,1)=1-3=-2, while GD(1,2)=3-1=2. (Note that GD is anti-symmetric.)- We want to find a voting (or recommendation) from each team to the others. Since the voting should be positive and bounded, one way to achieve this is by using a sigmoidal function:
A = 1./(1+exp(-GD)); A(1:5:end)=0; Then we can have the voting matrix:A = 0 0.8808 0.7311 0.5000 0.1192 0 0.1192 0.1192 0.2689 0.8808 0 0.5000 0.5000 0.8808 0.5000 0 where A(i,j) is the voting from team j to team i. Note that:
- A(i,j)=0.5 if two teams have the same number of winning games, such as A(4,1).
- A(i,j)<0.5 if team j is stronger than team i, so team j is giving weaker vote to team i. For instance, A(2,1)<0.5 since team 1 is stronger than team 2 by 2 games.
- A(i,j)>0.5 if team j is weaker than team i, so team j is giving stronger vote to team i. , such as A(3,2)>0.5 since team 2 is weaker than team 3 by 2 games.
- Next, we can convert the vote matrix A to be a transition probability matrix by dividing each column by its corresponding column sum. This can be achieved by
B = bsxfun(@rdivide, A, sum(A)); Then we have the transition probability matrix B, with each column summing to 1:B = 0 0.3333 0.5414 0.4467 0.1342 0 0.0883 0.1065 0.3028 0.3333 0 0.4467 0.5630 0.3333 0.3703 0 By following the same concept as Google's PageRank, the team rank x should satisfy $Bx=x$. That is, the team rank x is an eigenvector of matrix B with corresponding eigenvalue of 1.By following the above reasoning steps, write a function myTeamRank.m to return the team rank, with the following usage:
teamRank=myTeamRank(GD), whereYou can download the p-file myTeamRank.p to test your function. Here is a test script with several test cases:
- GD: the matrix of winning game difference
- teamRank: the returned team rank vector to show the strength of all teams
Hint:
- Note that it is almost impossible to have an eigenvalue of exact 1 after lengthy numerical computation. Instead, you can find the eigenvalue of maximum magnitude instead.
- In general, when using "if" statement for floating-point numbers, you need to be really careful. For instance, after lengthy computation, if you want to determine if x is equal to the square root of 2, it will be risky to write something like "if x==sqrt(2)". Instead, always try to allow some tolerance, for instance, "if abs(x-sqrt(2))<1e-5" is a better version. This will make your code more feasible and reliable.
- Since the final team rank is a probability vector, its elements should be positive and its summation should be equal to 1.
- More explanation on using MATLAB for team ranking can be found in this video.
MATLAB程式設計:進階篇