p = length(ell); if nargin<5, max_kk = min(n,p)-1; end max_kk = min(max_kk,min(p,n)-1); if nargin<4, alpha = 0.5; end s_Wishart = KN_s_Wishart(alpha,beta); sigma_arr = zeros(1,max_kk); for kk=1:max_kk [mu_np sigma_np] = KN_mu_sigma(n,p-kk,beta); sig_hat_kk = KN_noiseEst(ell,n,kk); sigma_arr(kk) = sig_hat_kk; at_least_kk_signals = n * ell(kk) > sig_hat_kk * (mu_np + s_Wishart * sigma_np); if ~at_least_kk_signals, break, end end % for kk=1:max_kk K = kk-1; if K > 0 sigma_hat = sigma_arr(K); else sigma_hat = sum(ell(1:p)) / p; end
时间: 2024-03-11 13:45:43 浏览: 18
这段代码用来计算伪秩和噪声方差的估计。
首先,计算特征值的个数,即样本协方差矩阵的大小。
然后,如果未指定伪秩的最大值,则将其设置为样本数和特征值个数之间的较小值减1,确保伪秩的最大值不会超过样本数和特征值个数之间的较小值。
接着,如果未指定置信水平,则将其设置为0.5。
然后,使用置信水平和实部或虚部指示符计算s_Wishart。
接下来,初始化一个大小为max_kk的sigma_arr数组。
然后,对于每个kk,使用KN_mu_sigma函数计算mu_np和sigma_np,并使用KN_noiseEst函数计算sig_hat_kk,将其存储在sigma_arr数组中。接着,计算是否至少有kk个信号,即n * ell(kk) > sig_hat_kk * (mu_np + s_Wishart * sigma_np),如果不是,则退出循环。
最后,计算伪秩K,如果K大于0,则噪声方差的估计为sigma_arr(K),否则噪声方差的估计为特征值的平均值。
相关问题
写出下列公式的matlab代码: \begin{gathered} min F(\mathbf{x})=\alpha\left(\sum_{k\in\mathbb{N}}(t_{ko}-t_{o k})-\sum_{i\in\mathcal{F}}F u e l_i\right)^\ell \ +\beta\sum_{k\in N}\sum_{i\in F}\sum_{j\in F}d_{i j}x_{i j k}+\gamma\left(\sum_{k\in N}\sum_{j\in F}|A_{i k}-a_{i}|\right)+\theta\left(\sum_{k\in N}\sum_{j\in F}\left(x_{i j k}-\frac{N_{f}}{N_{c a r}}\right)^{2}\right)| \end{gathered}
syms alpha beta gamma theta l Nf Ncar
syms tko tok Fi dij aik ai xijk
syms F N k i j
F_cost = alpha*(symsum(tko-tok, k, 1, N))^l + beta*symsum(symsum(symsum(dij*xijk, j, F), i, F), k, 1, N) + gamma*symsum(symsum(abs(aik-ai), j, F), k, N) + theta*symsum(symsum((xijk - Nf/Ncar)^2, j, F), k, N);
"_ZNSt3__118condition_variable15__do_timed_waitERNS_11unique_lockINS_5mutexEEENS_6chrono10time_pointINS5_12system_clockENS5_8durationIxNS_5ratioILl1ELl1000000000EEEEEEE" 代表的函数名称是什么
"_ZNSt3__118condition_variable15__do_timed_waitERNS_11unique_lockINS_5mutexEEENS_6chrono10time_pointINS5_12system_clockENS5_8durationIxNS_5ratioILl1ELl1000000000EEEEEEE" 是一个 C++ 函数的 mangled 名称,代表的函数名称是 "std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1, 1000000000> > >)"。