数学部分
这个系统可能总是被带到特征[值/向量]方程的规范形式:
**A***x* = λx
其中 A 是系统的矩阵,x = [x1; x2; ...; x100000]。以question为例,系统可以写成:
/ \ / \ / \
| 0 1 0 0 0 | | x1 | | x1 |
| 0 0 1 0 1 | | x2 | | x2 |
| 1 0 0 0 0 | x | x3 | = (1/alpha) | x3 |
| 0 0 1 0 0 | | x4 | | x4 |
| 0 1 0 1 0 | | x5 | | x5 |
\ / \ / \ /
这意味着您的特征值 λ = 1/α。当然,您应该注意复杂的特征值(除非您真的想考虑它们)。
Matlab 部分
这很符合您的品味和技能。您始终可以使用eig() 找到矩阵的特征值。最好使用稀疏矩阵(内存经济):
N = 100000;
A = sparse(N,N);
% Here's your code to set A's values
A_lambda = eig(A);
ieps= 0e-6; % below this threshold imaginary part is considered null
alpha = real(1 ./ (A_lambda(arrayfun(@(x) imag(x)<ieps, A_lambda)))); % Chose Real. Choose Life. Choose a job. Choose a career. Choose a family. Choose a f****** big television, choose washing machines, cars, compact disc players and electrical tin openers. Choose good health, low cholesterol, and dental insurance. Choose fixed interest mortgage repayments. Choose a starter home. Choose your friends. Choose leisurewear and matching luggage. Choose a three-piece suit on hire purchase in a range of f****** fabrics. Choose DIY and wondering who the f*** you are on a Sunday morning. Choose sitting on that couch watching mind-numbing, spirit-crushing game shows, stuffing f****** junk food into your mouth. Choose rotting away at the end of it all, pissing your last in a miserable home, nothing more than an embarrassment to the selfish, f***** up brats you spawned to replace yourself. Chose life.
% Now do your stuff with alpha here
但是,请注意这一点:数值求解大型特征值方程可能会给您期望实数的复数值。如果您一开始没有发现任何东西,请将您的 ieps 调整为合理的值。
要找到特征向量,只需从系统中取出一个,然后通过克莱默规则求解其余的。如果您愿意,可以将它们合二为一。