NC 最小的K个数

系列文章目录



前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


描述
给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。
在这里插入图片描述

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> ret;
        if (k==0 || k > input.size()) return ret;
        priority_queue<int, vector<int>> pq;
        for (const int val : input) {
            if (pq.size() < k) {
                pq.push(val);
            }
            else {
                if (val < pq.top()) {
                    pq.pop();
                    pq.push(val);
                }

            }
        }

        while (!pq.empty()) {
            ret.push_back(pq.top());
            pq.pop();
        }
        return ret;
    }
};
以下是逐句解释这段 MATLAB 代码的含义和作用: ``` %递推估计初值 thetaek=zeros(na+nb+d+nc,d); ``` 该行代码用于初始化系统参数的初值,其中 na、nb、d 和 nc 分别是系统的参数维度。 ``` P=10^6*eye(na+nb+d+nc); ``` 该行代码用于初始化协方差矩阵 P,其中 P 是一个 (na+nb+d+nc)×(na+nb+d+nc) 的对角矩阵,每个对角元素的初始值为 10^6。 ``` for k = 1:L ``` 该行代码用于循环采集系统的输出数据,其中 L 是采集数据的长度。 ``` time(k) = k; ``` 该行代码用于记录当前时间步 k。 ``` y(k)=-a(2:na+1)*yk(1:na)+b*uk(d:d+nb)+c*[xi(k);xik]; ``` 该行代码用于采集系统的输出数据 y(k),其中 a、b 和 c 分别是系统的系数向量,yk 和 uk 是历史输入输出数据,xi(k) 和 xik 分别是当前时刻的输入和历史输入数据。 ``` %递推增广最小二乘法 phie=[yk(d:d+ng);uk(d:d+nf);-yek(1:nc)]; K=P*phie/(1+phie'*P*phie); ``` 该行代码用于实现递推增广最小二乘法,其中 phie 是增广矩阵,包含了历史输入输出数据和前 d 个时刻的参数估计值。K 是增益矩阵,用于调整参数估计值。 ``` thetae(:,k)=thetaek(:,1)+K*(y(k)-phie'*thetaek(:,1)); ``` 该行代码用于更新参数估计值 thetae,其中 thetaek(:,1) 是参数的初值,y(k) 是采集到的系统输出值。 ``` P= (eye(na+nb+ d+ nc)- K* phie') * P; ye= phie'* thetaek(:,d); ``` 该行代码用于更新协方差矩阵 P 和最优预测输出的估计值 ye。 ``` %提高辨识参数 ge=thetae(1:ng + 1 ,k)'; fe = thetae(ng + 2:ng + nf + 2,k)'; ce = [1 thetae(ng + nf + 3:ng + nf + 2 + nc,k)']; if abs(ce(2))>0.9 ce(2)=sign(ce(2))* 0.9; end if fe(1)<0.1%设 f0 的下界为 0.1 fe(1)=0.1; end ``` 该行代码用于提高辨识参数,其中 ge、fe 和 ce 分别是提高辨识参数的向量。如果 ce(2) 的绝对值大于 0.9,则将其限制在 [-0.9, 0.9] 的范围内。如果 fe(1) 的值小于 0.1,则将其设为 0.1。 ``` CQ= conv(ce,Q); FP = conv(fe,Pw); CR = conv(ce,R); GP = conv(ge,Pw); ``` 该行代码用于计算控制输入的不同部分,其中 CQ、FP、CR 和 GP 分别是增广矩阵和滤波器系数的卷积。 ``` u(k) =(- Q(1) * CQ(2:nc + nq +1) * uk(1:nc + nq)/fe(1) -FP(2:np + nf + 1) * uk(1:np+nf)+CR*[yr(k+ d:-1:k+d- min(d,nr + nc)); yrk(1:nr + nc-d)]- GP*[y(k);yk(1:np +ng)])/(Q(1) * Q(1)/fe(1) + fe(1)); ``` 该行代码用于计算控制输入 u(k),其中 Q、Pw 和 R 分别是给定的参数,分别是控制器的权重系数、滤波器系数和误差权重系数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java毕设王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值