声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 11827|回复: 23

[C/C++] [分享]求矩阵特征值和特征向量的一个小程序

[复制链接]
发表于 2005-9-20 10:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
代码较长,如果不能执行,就是要建立结构体,大家试试吧,希望能用。

//////////////////////////////////////////////////////////////////////
// 实对称三对角阵的全部特征值与特征向量的计算
//
// 参数:
// 1. double dblB[] - 一维数组,长度为矩阵的阶数,传入对称三对角阵的主对角线元素;
// 返回时存放全部特征值。
// 2. double dblC[] - 一维数组,长度为矩阵的阶数,前n-1个元素传入对称三对角阵的次对角线元素
// 3. CMatrix& mtxQ - 如果传入单位矩阵,则返回实对称三对角阵的特征值向量矩阵;
// 如果传入MakeSymTri函数求得的矩阵A的豪斯荷尔德变换的乘积矩阵Q,则返回矩阵A的
// 特征值向量矩阵。其中第i列为与数组dblB中第j个特征值对应的特征向量。
// 4. int nMaxIt - 迭代次数,默认值为60
// 5. double eps - 计算精度,默认值为0.000001
//
// 返回值:BOOL型,求解是否成功
//////////////////////////////////////////////////////////////////////
  1. BOOL CMatrix::SymTriEigenv(double dblB[], double dblC[], CMatrix& mtxQ, int nMaxIt /*= 60*/, double eps /*= 0.000001*/)
  2. {
  3. int i,j,k,m,it,u,v;
  4. double d,f,h,g,p,r,e,s;

  5. // 初值
  6. int n = mtxQ.GetNumColumns();
  7. dblC[n-1]=0.0;
  8. d=0.0;
  9. f=0.0;

  10. // 迭代计算

  11. for (j=0; j<=n-1; j++)
  12. {
  13. it=0;
  14. h=eps*(fabs(dblB[j])+fabs(dblC[j]));
  15. if (h>d)
  16. d=h;

  17. m=j;
  18. while ((m<=n-1)&&(fabs(dblC[m])>d))
  19. m=m+1;

  20. if (m!=j)
  21. {
  22. do
  23. {
  24. if (it==nMaxIt)
  25. return FALSE;

  26. it=it+1;
  27. g=dblB[j];
  28. p=(dblB[j+1]-g)/(2.0*dblC[j]);
  29. r=sqrt(p*p+1.0);
  30. if (p>=0.0)
  31. dblB[j]=dblC[j]/(p+r);
  32. else
  33. dblB[j]=dblC[j]/(p-r);

  34. h=g-dblB[j];
  35. for (i=j+1; i<=n-1; i++)
  36. dblB=dblB-h;

  37. f=f+h;
  38. p=dblB[m];
  39. e=1.0;
  40. s=0.0;
  41. for (i=m-1; i>=j; i--)
  42. {
  43. g=e*dblC;
  44. h=e*p;
  45. if (fabs(p)>=fabs(dblC))
  46. {
  47. e=dblC/p;
  48. r=sqrt(e*e+1.0);
  49. dblC[i+1]=s*p*r;
  50. s=e/r;
  51. e=1.0/r;
  52. }
  53. else
  54. {
  55. e=p/dblC;
  56. r=sqrt(e*e+1.0);
  57. dblC[i+1]=s*dblC*r;
  58. s=1.0/r;
  59. e=e/r;
  60. }

  61. p=e*dblB-s*g;
  62. dblB[i+1]=h+s*(e*g+s*dblB);
  63. for (k=0; k<=n-1; k++)
  64. {
  65. u=k*n+i+1;
  66. v=u-1;
  67. h=mtxQ.m_pData;
  68. mtxQ.m_pData=s*mtxQ.m_pData[v]+e*h;
  69. mtxQ.m_pData[v]=e*mtxQ.m_pData[v]-s*h;
  70. }
  71. }

  72. dblC[j]=s*p;
  73. dblB[j]=e*p;

  74. } while (fabs(dblC[j])>d);
  75. }

  76. dblB[j]=dblB[j]+f;
  77. }

  78. for (i=0; i<=n-1; i++)
  79. {
  80. k=i;
  81. p=dblB;
  82. if (i+1<=n-1)
  83. {
  84. j=i+1;
  85. while ((j<=n-1)&&(dblB[j]<=p))
  86. {
  87. k=j;
  88. p=dblB[j];
  89. j=j+1;
  90. }
  91. }

  92. if (k!=i)
  93. {
  94. dblB[k]=dblB;
  95. dblB=p;
  96. for (j=0; j<=n-1; j++)
  97. {
  98. u=j*n+i;
  99. v=j*n+k;
  100. p=mtxQ.m_pData;
  101. mtxQ.m_pData=mtxQ.m_pData[v];
  102. mtxQ.m_pData[v]=p;
  103. }
  104. }
  105. }

  106. return TRUE;
  107. }

  108. //////////////////////////////////////////////////////////////////////
  109. // 约化一般实矩阵为赫申伯格矩阵的初等相似变换法
  110. //
  111. // 参数:无
  112. //
  113. // 返回值:无
  114. //////////////////////////////////////////////////////////////////////
  115. void CMatrix::MakeHberg()
  116. {
  117. int i,j,k,u,v;
  118. double d,t;

  119. for (k=1; k<=m_nNumColumns-2; k++)
  120. {
  121. d=0.0;
  122. for (j=k; j<=m_nNumColumns-1; j++)
  123. {
  124. u=j*m_nNumColumns+k-1;
  125. t=m_pData;
  126. if (fabs(t)>fabs(d))
  127. {
  128. d=t;
  129. i=j;
  130. }
  131. }

  132. if (d != 0.0)
  133. {
  134. if (i!=k)
  135. {
  136. for (j=k-1; j<=m_nNumColumns-1; j++)
  137. {
  138. u=i*m_nNumColumns+j;
  139. v=k*m_nNumColumns+j;
  140. t=m_pData;
  141. m_pData=m_pData[v];
  142. m_pData[v]=t;
  143. }

  144. for (j=0; j<=m_nNumColumns-1; j++)
  145. {
  146. u=j*m_nNumColumns+i;
  147. v=j*m_nNumColumns+k;
  148. t=m_pData;
  149. m_pData=m_pData[v];
  150. m_pData[v]=t;
  151. }
  152. }

  153. for (i=k+1; i<=m_nNumColumns-1; i++)
  154. {
  155. u=i*m_nNumColumns+k-1;
  156. t=m_pData/d;
  157. m_pData=0.0;
  158. for (j=k; j<=m_nNumColumns-1; j++)
  159. {
  160. v=i*m_nNumColumns+j;
  161. m_pData[v]=m_pData[v]-t*m_pData[k*m_nNumColumns+j];
  162. }

  163. for (j=0; j<=m_nNumColumns-1; j++)
  164. {
  165. v=j*m_nNumColumns+k;
  166. m_pData[v]=m_pData[v]+t*m_pData[j*m_nNumColumns+i];
  167. }
  168. }
  169. }
  170. }
  171. }
复制代码

[ 本帖最后由 风花雪月 于 2006-8-24 03:31 编辑 ]

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2005-9-20 10:07 | 显示全部楼层

回复:(风花雪月)[分享]求矩阵特征值和特征向量的一...

  1. //////////////////////////////////////////////////////////////////////
  2. // 求赫申伯格矩阵全部特征值的QR方法
  3. //
  4. // 参数:
  5. // 1. double dblU[] - 一维数组,长度为矩阵的阶数,返回时存放特征值的实部
  6. // 2. double dblV[] - 一维数组,长度为矩阵的阶数,返回时存放特征值的虚部
  7. // 3. int nMaxIt - 迭代次数,默认值为60
  8. // 4. double eps - 计算精度,默认值为0.000001
  9. //
  10. // 返回值:BOOL型,求解是否成功
  11. //////////////////////////////////////////////////////////////////////
  12. BOOL CMatrix::HBergEigenv(double dblU[], double dblV[], int nMaxIt /*= 60*/, double eps /*= 0.000001*/)
  13. {
  14. int m,it,i,j,k,l,ii,jj,kk,ll;
  15. double b,c,w,g,xy,p,q,r,x,s,e,f,z,y;

  16. int n = m_nNumColumns;

  17. it=0;
  18. m=n;
  19. while (m!=0)
  20. {
  21. l=m-1;
  22. while ((l>0)&&(fabs(m_pData[l*n+l-1]) >
  23. eps*(fabs(m_pData[(l-1)*n+l-1])+fabs(m_pData[l*n+l]))))
  24. l=l-1;

  25. ii=(m-1)*n+m-1;
  26. jj=(m-1)*n+m-2;
  27. kk=(m-2)*n+m-1;
  28. ll=(m-2)*n+m-2;
  29. if (l==m-1)
  30. {
  31. dblU[m-1]=m_pData[(m-1)*n+m-1];
  32. dblV[m-1]=0.0;
  33. m=m-1;
  34. it=0;
  35. }
  36. else if (l==m-2)
  37. {
  38. b=-(m_pData[ii]+m_pData[ll]);
  39. c=m_pData[ii]*m_pData[ll]-m_pData[jj]*m_pData[kk];
  40. w=b*b-4.0*c;
  41. y=sqrt(fabs(w));
  42. if (w>0.0)
  43. {
  44. xy=1.0;
  45. if (b<0.0)
  46. xy=-1.0;
  47. dblU[m-1]=(-b-xy*y)/2.0;
  48. dblU[m-2]=c/dblU[m-1];
  49. dblV[m-1]=0.0; dblV[m-2]=0.0;
  50. }
  51. else
  52. {
  53. dblU[m-1]=-b/2.0;
  54. dblU[m-2]=dblU[m-1];
  55. dblV[m-1]=y/2.0;
  56. dblV[m-2]=-dblV[m-1];
  57. }

  58. m=m-2;
  59. it=0;
  60. }
  61. else
  62. {
  63. if (it>=nMaxIt)
  64. return FALSE;

  65. it=it+1;
  66. for (j=l+2; j<=m-1; j++)
  67. m_pData[j*n+j-2]=0.0;
  68. for (j=l+3; j<=m-1; j++)
  69. m_pData[j*n+j-3]=0.0;
  70. for (k=l; k<=m-2; k++)
  71. {
  72. if (k!=l)
  73. {
  74. p=m_pData[k*n+k-1];
  75. q=m_pData[(k+1)*n+k-1];
  76. r=0.0;
  77. if (k!=m-2)
  78. r=m_pData[(k+2)*n+k-1];
  79. }
  80. else
  81. {
  82. x=m_pData[ii]+m_pData[ll];
  83. y=m_pData[ll]*m_pData[ii]-m_pData[kk]*m_pData[jj];
  84. ii=l*n+l;
  85. jj=l*n+l+1;
  86. kk=(l+1)*n+l;
  87. ll=(l+1)*n+l+1;
  88. p=m_pData[ii]*(m_pData[ii]-x)+m_pData[jj]*m_pData[kk]+y;
  89. q=m_pData[kk]*(m_pData[ii]+m_pData[ll]-x);
  90. r=m_pData[kk]*m_pData[(l+2)*n+l+1];
  91. }

  92. if ((fabs(p)+fabs(q)+fabs(r))!=0.0)
  93. {
  94. xy=1.0;
  95. if (p<0.0)
  96. xy=-1.0;
  97. s=xy*sqrt(p*p+q*q+r*r);
  98. if (k!=l)
  99. m_pData[k*n+k-1]=-s;
  100. e=-q/s;
  101. f=-r/s;
  102. x=-p/s;
  103. y=-x-f*r/(p+s);
  104. g=e*r/(p+s);
  105. z=-x-e*q/(p+s);
  106. for (j=k; j<=m-1; j++)
  107. {
  108. ii=k*n+j;
  109. jj=(k+1)*n+j;
  110. p=x*m_pData[ii]+e*m_pData[jj];
  111. q=e*m_pData[ii]+y*m_pData[jj];
  112. r=f*m_pData[ii]+g*m_pData[jj];
  113. if (k!=m-2)
  114. {
  115. kk=(k+2)*n+j;
  116. p=p+f*m_pData[kk];
  117. q=q+g*m_pData[kk];
  118. r=r+z*m_pData[kk];
  119. m_pData[kk]=r;
  120. }

  121. m_pData[jj]=q; m_pData[ii]=p;
  122. }

  123. j=k+3;
  124. if (j>=m-1)
  125. j=m-1;

  126. for (i=l; i<=j; i++)
  127. {
  128. ii=i*n+k;
  129. jj=i*n+k+1;
  130. p=x*m_pData[ii]+e*m_pData[jj];
  131. q=e*m_pData[ii]+y*m_pData[jj];
  132. r=f*m_pData[ii]+g*m_pData[jj];
  133. if (k!=m-2)
  134. {
  135. kk=i*n+k+2;
  136. p=p+f*m_pData[kk];
  137. q=q+g*m_pData[kk];
  138. r=r+z*m_pData[kk];
  139. m_pData[kk]=r;
  140. }

  141. m_pData[jj]=q;
  142. m_pData[ii]=p;
  143. }
  144. }
  145. }
  146. }
  147. }

  148. return TRUE;
  149. }

  150. //////////////////////////////////////////////////////////////////////
  151. // 求实对称矩阵特征值与特征向量的雅可比法
  152. //
  153. // 参数:
  154. // 1. double dblEigenValue[] - 一维数组,长度为矩阵的阶数,返回时存放特征值
  155. // 2. CMatrix& mtxEigenVector - 返回时存放特征向量矩阵,其中第i列为与
  156. // 数组dblEigenValue中第j个特征值对应的特征向量
  157. // 3. int nMaxIt - 迭代次数,默认值为60
  158. // 4. double eps - 计算精度,默认值为0.000001
  159. //
  160. // 返回值:BOOL型,求解是否成功
  161. //////////////////////////////////////////////////////////////////////
  162. BOOL CMatrix::JacobiEigenv(double dblEigenValue[], CMatrix& mtxEigenVector, int nMaxIt /*= 60*/, double eps /*= 0.000001*/)
  163. {
  164. int i,j,p,q,u,w,t,s,l;
  165. double fm,cn,sn,omega,x,y,d;

  166. if (! mtxEigenVector.Init(m_nNumColumns, m_nNumColumns))
  167. return FALSE;

  168. l=1;
  169. for (i=0; i<=m_nNumColumns-1; i++)
  170. {
  171. mtxEigenVector.m_pData[i*m_nNumColumns+i]=1.0;
  172. for (j=0; j<=m_nNumColumns-1; j++)
  173. if (i!=j)
  174. mtxEigenVector.m_pData[i*m_nNumColumns+j]=0.0;
  175. }

  176. while (TRUE)
  177. {
  178. fm=0.0;
  179. for (i=1; i<=m_nNumColumns-1; i++)
  180. {
  181. for (j=0; j<=i-1; j++)
  182. {
  183. d=fabs(m_pData[i*m_nNumColumns+j]);
  184. if ((i!=j)&&(d>fm))
  185. {
  186. fm=d;
  187. p=i;
  188. q=j;
  189. }
  190. }
  191. }

  192. if (fm<eps)
  193. {
  194. for (i=0; i<m_nNumColumns; ++i)
  195. dblEigenValue = GetElement(i,i);
  196. return TRUE;
  197. }

  198. if (l>nMaxIt)
  199. return FALSE;

  200. l=l+1;
  201. u=p*m_nNumColumns+q;
  202. w=p*m_nNumColumns+p;
  203. t=q*m_nNumColumns+p;
  204. s=q*m_nNumColumns+q;
  205. x=-m_pData;
  206. y=(m_pData[s]-m_pData[w])/2.0;
  207. omega=x/sqrt(x*x+y*y);

  208. if (y<0.0)
  209. omega=-omega;

  210. sn=1.0+sqrt(1.0-omega*omega);
  211. sn=omega/sqrt(2.0*sn);
  212. cn=sqrt(1.0-sn*sn);
  213. fm=m_pData[w];
  214. m_pData[w]=fm*cn*cn+m_pData[s]*sn*sn+m_pData*omega;
  215. m_pData[s]=fm*sn*sn+m_pData[s]*cn*cn-m_pData*omega;
  216. m_pData=0.0;
  217. m_pData[t]=0.0;
  218. for (j=0; j<=m_nNumColumns-1; j++)
  219. {
  220. if ((j!=p)&&(j!=q))
  221. {
  222. u=p*m_nNumColumns+j; w=q*m_nNumColumns+j;
  223. fm=m_pData;
  224. m_pData=fm*cn+m_pData[w]*sn;
  225. m_pData[w]=-fm*sn+m_pData[w]*cn;
  226. }
  227. }

  228. for (i=0; i<=m_nNumColumns-1; i++)
  229. {
  230. if ((i!=p)&&(i!=q))
  231. {
  232. u=i*m_nNumColumns+p;
  233. w=i*m_nNumColumns+q;
  234. fm=m_pData;
  235. m_pData=fm*cn+m_pData[w]*sn;
  236. m_pData[w]=-fm*sn+m_pData[w]*cn;
  237. }
  238. }

  239. for (i=0; i<=m_nNumColumns-1; i++)
  240. {
  241. u=i*m_nNumColumns+p;
  242. w=i*m_nNumColumns+q;
  243. fm=mtxEigenVector.m_pData;
  244. mtxEigenVector.m_pData=fm*cn+mtxEigenVector.m_pData[w]*sn;
  245. mtxEigenVector.m_pData[w]=-fm*sn+mtxEigenVector.m_pData[w]*cn;
  246. }
  247. }

  248. for (i=0; i<m_nNumColumns; ++i)
  249. dblEigenValue = GetElement(i,i);

  250. return TRUE;
  251. }
复制代码

[ 本帖最后由 风花雪月 于 2006-11-14 19:23 编辑 ]
 楼主| 发表于 2005-9-20 10:07 | 显示全部楼层

回复:(风花雪月)[分享]求矩阵特征值和特征向量的一...

  1. //////////////////////////////////////////////////////////////////////
  2. // 求实对称矩阵特征值与特征向量的雅可比过关法
  3. //
  4. // 参数:
  5. // 1. double dblEigenValue[] - 一维数组,长度为矩阵的阶数,返回时存放特征值
  6. // 2. CMatrix& mtxEigenVector - 返回时存放特征向量矩阵,其中第i列为与
  7. // 数组dblEigenValue中第j个特征值对应的特征向量
  8. // 3. double eps - 计算精度,默认值为0.000001
  9. //
  10. // 返回值:BOOL型,求解是否成功
  11. //////////////////////////////////////////////////////////////////////
  12. BOOL CMatrix::JacobiEigenv2(double dblEigenValue[], CMatrix& mtxEigenVector, double eps /*= 0.000001*/)
  13. {
  14. int i,j,p,q,u,w,t,s;
  15. double ff,fm,cn,sn,omega,x,y,d;

  16. if (! mtxEigenVector.Init(m_nNumColumns, m_nNumColumns))
  17. return FALSE;

  18. for (i=0; i<=m_nNumColumns-1; i++)
  19. {
  20. mtxEigenVector.m_pData[i*m_nNumColumns+i]=1.0;
  21. for (j=0; j<=m_nNumColumns-1; j++)
  22. if (i!=j)
  23. mtxEigenVector.m_pData[i*m_nNumColumns+j]=0.0;
  24. }

  25. ff=0.0;
  26. for (i=1; i<=m_nNumColumns-1; i++)
  27. {
  28. for (j=0; j<=i-1; j++)
  29. {
  30. d=m_pData[i*m_nNumColumns+j];
  31. ff=ff+d*d;
  32. }
  33. }

  34. ff=sqrt(2.0*ff);

  35. Loop_0:

  36. ff=ff/(1.0*m_nNumColumns);

  37. Loop_1:

  38. for (i=1; i<=m_nNumColumns-1; i++)
  39. {
  40. for (j=0; j<=i-1; j++)
  41. {
  42. d=fabs(m_pData[i*m_nNumColumns+j]);
  43. if (d>ff)
  44. {
  45. p=i;
  46. q=j;
  47. goto Loop_2;
  48. }
  49. }
  50. }

  51. if (ff<eps)
  52. {
  53. for (i=0; i<m_nNumColumns; ++i)
  54. dblEigenValue = GetElement(i,i);
  55. return TRUE;
  56. }

  57. goto Loop_0;

  58. Loop_2:

  59. u=p*m_nNumColumns+q;
  60. w=p*m_nNumColumns+p;
  61. t=q*m_nNumColumns+p;
  62. s=q*m_nNumColumns+q;
  63. x=-m_pData;
  64. y=(m_pData[s]-m_pData[w])/2.0;
  65. omega=x/sqrt(x*x+y*y);
  66. if (y<0.0)
  67. omega=-omega;

  68. sn=1.0+sqrt(1.0-omega*omega);
  69. sn=omega/sqrt(2.0*sn);
  70. cn=sqrt(1.0-sn*sn);
  71. fm=m_pData[w];
  72. m_pData[w]=fm*cn*cn+m_pData[s]*sn*sn+m_pData*omega;
  73. m_pData[s]=fm*sn*sn+m_pData[s]*cn*cn-m_pData*omega;
  74. m_pData=0.0; m_pData[t]=0.0;

  75. for (j=0; j<=m_nNumColumns-1; j++)
  76. {
  77. if ((j!=p)&&(j!=q))
  78. {
  79. u=p*m_nNumColumns+j;
  80. w=q*m_nNumColumns+j;
  81. fm=m_pData;
  82. m_pData=fm*cn+m_pData[w]*sn;
  83. m_pData[w]=-fm*sn+m_pData[w]*cn;
  84. }
  85. }

  86. for (i=0; i<=m_nNumColumns-1; i++)
  87. {
  88. if ((i!=p)&&(i!=q))
  89. {
  90. u=i*m_nNumColumns+p;
  91. w=i*m_nNumColumns+q;
  92. fm=m_pData;
  93. m_pData=fm*cn+m_pData[w]*sn;
  94. m_pData[w]=-fm*sn+m_pData[w]*cn;
  95. }
  96. }

  97. for (i=0; i<=m_nNumColumns-1; i++)
  98. {
  99. u=i*m_nNumColumns+p;
  100. w=i*m_nNumColumns+q;
  101. fm=mtxEigenVector.m_pData;
  102. mtxEigenVector.m_pData=fm*cn+mtxEigenVector.m_pData[w]*sn;
  103. mtxEigenVector.m_pData[w]=-fm*sn+mtxEigenVector.m_pData[w]*cn;
  104. }

  105. goto Loop_1;
  106. }
复制代码

[ 本帖最后由 风花雪月 于 2006-11-14 19:23 编辑 ]
发表于 2005-11-13 15:04 | 显示全部楼层
"赫申伯格矩阵全部特征值的QR方法"

没有求对应的特征向量啊

有没有求特征向量的代码?

[ 本帖最后由 风花雪月 于 2006-11-14 19:25 编辑 ]
发表于 2006-4-20 20:30 | 显示全部楼层
下面的几个函数没有定义或说明过它的作用:<BR>fabs()、GetElement()<BR><BR>不管怎么样还是要谢谢风花雪月……
发表于 2006-6-16 15:40 | 显示全部楼层
谢谢风花雪月了<BR>
发表于 2006-6-22 00:20 | 显示全部楼层

回复:(aliao)下面的几个函数没有定义或说明过它的作...

fabs()是得到浮点数的绝对值
是c/c++ 带的库函数

[ 本帖最后由 风花雪月 于 2006-8-24 03:30 编辑 ]
发表于 2006-6-22 23:20 | 显示全部楼层

GetElement()

GetElement() 是MFC的类COleSafeArray 的成员,
void GetElement( long* rgIndices, void* pvData );

[ 本帖最后由 风花雪月 于 2006-11-14 19:25 编辑 ]
发表于 2006-6-28 19:59 | 显示全部楼层
谢谢风花雪月
发表于 2006-6-28 23:56 | 显示全部楼层
<P>好啊,测试下代码</P>
发表于 2006-7-20 17:15 | 显示全部楼层
今晚试试吧
发表于 2006-8-23 16:51 | 显示全部楼层
自己编好麻烦啊,还是用matlab方便些,呵呵
好东西,赞
发表于 2006-9-3 22:04 | 显示全部楼层
我在matlab中用的jacobi算法,还是那个方便,不过要学学用这些语言来编了,佩服佩服
发表于 2006-11-14 08:16 | 显示全部楼层
谢谢楼主
 楼主| 发表于 2006-11-14 19:25 | 显示全部楼层
原帖由 forwardhah 于 2005-11-13 15:04 发表
"赫申伯格矩阵全部特征值的QR方法"

没有求对应的特征向量啊

有没有求特征向量的代码?



特征向量还是比较容易求得,自己弄一下吧
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-24 01:14 , Processed in 0.116676 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表