2023 “华为杯” 中国研究生数学建模竞赛(A题)深度剖析|数学建模完整代码+建模过程全解全析

news2024/11/25 16:31:44

华为杯数学建模A题

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。
让我们一起看看研赛的A题呀!

问题一:

1.使用Markov链描述节点的退避过程
●节点按照二进制指数增backoff算法进行随机退避,退避计数器和退避阶数呈Markov过程
●Bianchi等在论文中证明了这个退避过程可以用一个二维离散时间Markov链建模
●Markov链能准确描述节点退避状态随时间的概率分布和转移规律

2.计算节点发送概率τ和碰撞概率p
●τ表示节点随机退避到0时的发送概率,可以从Markov链的稳态分布得到
●p表示至少还有一个节点同时发送导致碰撞的概率,根据节点总数和τ的关系可求得
●两者互相关联,需要联立方程组求解

3.计算不同状态时隙长度
●时隙长度需要考虑数据传输时间、SIFS、ACK等不同因素
●不同状态(成功、失败、空闲)下时隙长度不同

4.利用状态概率和时隙长度计算吞吐率

  • 吞吐率受状态概率和各状态时隙长度的影响
  • 利用吞吐率公式可以计算出整个系统的性能
  • 反映了Markov链建模、参数设定和性能度量之间的关系

建立节点退避过程的Markov链模型

参考Bianchi模型,对每个AP建立一个退避过程的Markov链模型。状态空间为{s(t),b(t)},s(t)表示退避阶数,b(t)表示随机退避计数器值。
一共有m+1个退避阶数,每个阶数i对应的竞争窗口大小为 W i = 2 i ∗ W 0 W_i=2^i*W_0 Wi=2iW0, W 0 W_0 W0为初始阶数的竞争窗口大小。
那么状态转移概率为:
P i , k ∣ i , k − 1 = 1 , i ∈ [ 0 , m ] , k ∈ [ 1 , W i − 1 ] P 0 , k ∣ i , 0 = ( 1 − p ) / W 0 , i ∈ [ 0 , m ] , k ∈ [ 0 , W 0 − 1 ] P i , k ∣ i − 1 , 0 = p / W i , i ∈ [ 1 , m ] , k ∈ [ 0 , W i − 1 ] P{i,k|i,k-1}=1, i∈[0,m],k∈[1,Wi-1] P{0,k|i,0}=(1-p)/W0, i∈[0,m],k∈[0,W0-1] P{i,k|i-1,0}=p/Wi, i∈[1,m],k∈[0,Wi-1] Pi,ki,k1=1,i[0,m],k[1,Wi1]P0,ki,0=(1p)/W0,i[0,m],k[0,W01]Pi,ki1,0=p/Wi,i[1,m],k[0,Wi1]

计算节点发送概率τ和碰撞概率p

在稳态下,可以得到节点发送概率:
τ = b 00 / ( 1 − p ) τ=b_{00}/(1-p) τ=b00/(1p)
其中b00为状态{0,0}的稳态概率。
碰撞概率p为至少还有一个节点发送的概率:
p = 1 − ( 1 − τ ) ( N − 1 ) p=1-(1-τ)^(N-1) p=1(1τ)(N1)
将两个方程组合可以求解出τ和p。
计算不同状态的时隙长度

T s = 数据传输时间 + S I F S + A C K   T c = 数据传输时间 + A C K 超时  T e = D I F S T_s = 数据传输时间 + SIFS + ACK \ T_c = 数据传输时间 + ACK超时 \ T_e = DIFS Ts=数据传输时间+SIFS+ACK Tc=数据传输时间+ACK超时 Te=DIFS

计算系统吞吐率

S = P s T s P s T s + P c T c + P e T e ⋅ S = \frac{P_sT_s}{P_sT_s+P_cT_c+P_eT_e} \cdot S=PsTs+PcTc+PeTePsTs速率
其中Ps为成功概率,Pc为失败概率,Pe为空闲概率。
通过求解Markov链可以计算出这三个概率,从而求出系统吞吐率S。

matlab

% 参数设置
W0 = 16;   % 初始竞争窗口大小
m = 5;     % 最大退避级数 
N = 2;     % AP节点数量
p_col = 0.1; % 并发传输发生碰撞概率
Ts = 60;   % 成功传输时隙长度
Tc = 100;  % 失败传输时隙长度 
Te = 50;   % 空闲时隙长度
rate = 455.8e6; % 传输速率

% 求解τ和p
syms tau p;
b00 = (1-p)*(1-2*p)/(W0*(1-(2*p)^(m+1))*(1-p)+(1-2*p)*(1-p^(m+1))); 
tau = b00/(1-p);
eqn1 = tau == (1 - (1-tau)^(N-1))*p_col;
eqn2 = solve(eqn1,p);
p = double(eqn2);
tau = double(solve(eqn1,tau));

% 计算状态概率
Ps = 1 - tau^N;
Pc = 1 - (1-tau)^N - N*tau*(1-tau)^(N-1); 
Pe = (1-tau)^N;

% 计算吞吐率
S = Ps*Ts/(Ps*Ts + Pc*Tc + Pe*Te)*rate

在这里插入图片描述

问题二:

并发传输时SIR较高,导致两个AP的数据传输都能成功。
所以建模过程与问题1基本一致,主要差别在以下两个方面:
1.计算碰撞概率p时,并发传输不一定失败,需要考虑SIR导致成功或失败的概率。
可以设置一个并发成功概率Ps_col,则有:
p = 1 − ( 1 − τ ) ( N − 1 ) ∗ P s c o l p = 1 - (1-τ)^(N-1) * Ps_col p=1(1τ)(N1)Pscol
2.计算不同状态概率时,成功概率Ps需要考虑并发成功的情况:
P s = ( 1 − τ ) N + C N 2 ∗ t a u 2 ∗ P s c o l Ps = (1 - τ)^N + C_N^2 * tau^2 * Ps_col Ps=(1τ)N+CN2tau2Pscol
Pc和Pe的计算与问题1相同。
其余建模过程不变,最后可以求得问题2下的系统吞吐率。

则对应的建模过程为节点的Markov链模型
节点退避过程的Markov链模型与问题1完全一致,状态空间和状态转移概率也不变
计算节点发送概率 τ \tau τ和碰撞概率 p p p

τ = b 0 , 0 1 − p p = 1 − ( 1 − τ ) N − 1 ⋅ P scol \tau = \frac{b_{0,0}}{1-p}\\ p= 1 - (1-\tau)^{N-1} \cdot P\text{scol} τ=1pb0,0p=1(1τ)N1Pscol

其中 P scol P\text{scol} Pscol表示并发传输成功概率。
不同状态时隙长度

(与问题1相同)

计算状态概率
P e = ( 1 − τ ) N   P c = 1 − ( 1 − τ ) N − N τ ( 1 − τ ) N − 1   P s = ( 1 − τ ) N + C N 2 τ 2 P scol P_e = (1-\tau)^N \ P_c = 1 - (1-\tau)^N - N\tau(1-\tau)^{N-1} \ P_s = (1 - \tau)^N + C_N^2 \tau^2 P\text{scol} Pe=(1τ)N Pc=1(1τ)NNτ(1τ)N1 Ps=(1τ)N+CN2τ2Pscol

计算系统吞吐率

吞吐率公式与问题1也完全一致。
与问题1相比,主要改变是:
1.p的计算考虑并发成功概率
2.Ps的计算增加并发成功概率项
在这里插入图片描述

则相应的计算代码为:

% 参数设置
W0 = 16; 
m = 5;
N = 2;
p_col = 0.9; % 并发传输成功概率 
Ts = 60;
Tc = 100;
Te = 50;
rate = 455.8e6;

% 求解τ和p
syms tau p;
b00 = (1-p)*(1-2*p)/(W0*(1-(2*p)^(m+1))*(1-p)+(1-2*p)*(1-p^(m+1)));
tau = b00/(1-p);
eqn1 = tau == (1 - (1-tau)^(N-1))*p_col;  
eqn2 = solve(eqn1,p);
p = double(eqn2);
tau = double(solve(eqn1,tau));

% 计算状态概率 
Ps_col = 0.9; % 并发成功概率
Pe = (1-tau)^N; 
Pc = 1 - (1-tau)^N - N*tau*(1-tau)^(N-1);
Ps = (1 - tau)^N + nchoosek(N,2)*tau^2*Ps_col;

% 计算吞吐率
S = Ps*Ts/(Ps*Ts + Pc*Tc + Pe*Te)*rate

问题3

问题3中,两个AP间RSSI为-90dBm,不互听,存在隐藏节点问题。并考虑了信道误码率Pe导致的传输失败。

建模步骤如下:
1.仍然建立节点的Markov链模型,描述退避过程。
2.计算节点发送概率τ和碰撞概率p。τ的计算与前两题相同
a.p考虑并发传输失败概率
3.计算不同状态时隙长度Ts、Tc、Te,与前两题相同。
4.计算状态概率:空闲概率Pe考虑信道误码率
a.失败概率Pc考虑交叠传输失败概率
b.成功概率Ps为剩余概率
5.利用上述参数计算系统吞吐率S
相比前两题,问题3建模的主要不同:
(1) 引入信道误码率Pe
(2) 失败概率Pc考虑交叠传输失败
(3) 成功概率Ps作为剩余概率

具体而言,相应的建模为:

1.节点的Markov链模型
(与前两题相同)
2.计算节点发送概率 τ \tau τ和碰撞概率 p p p

τ = b 0 , 0 1 − p p = 1 − ( 1 − τ ) N − 1 ⋅ P c col \tau = \frac{b{0,0}}{1-p} \\ p = 1 - (1-\tau)^{N-1} \cdot P{c\text{col}} τ=1pb0,0p=1(1τ)N1Pccol

3.状态时隙长度
(与前两题相同)
4.计算状态概率
P e = ( 1 − τ ) N ⋅ ( 1 − P e chan ) P c = [ 1 − ( 1 − τ ) N − N τ ( 1 − τ ) N − 1 ] ⋅ P c over P s = 1 − P e − P c P_e = (1-\tau)^N \cdot (1-P_{e\text{chan}}) \\ P_c = [1 - (1-\tau)^N - N\tau(1-\tau)^{N-1}] \cdot P_{c\text{over}} \\ P_s = 1 - P_e - P_c Pe=(1τ)N(1Pechan)Pc=[1(1τ)NNτ(1τ)N1]PcoverPs=1PePc

5.系统吞吐率
(与前两题相同)
其中,
P e chan P_{e_\text{chan}} Pechan表示信道误码率,
P c over P_{c_\text{over}} Pcover表示交叠传输失败概率。
在这里插入图片描述

% 参数设置
W0 = 16;  
m = 5;
N = 2; 
p_col = 0.2; % 并发传输失败概率
pe_chan = 0.1; % 信道误码率
pc_over = 0.5; % 交叠传输失败概率
Ts = 60;
Tc = 100;
Te = 50;
rate = 455.8e6;

% 求解τ和p
syms tau p;
b00 = (1-p)*(1-2*p)/(W0*(1-(2*p)^(m+1))*(1-p)+(1-2*p)*(1-p^(m+1)));
tau = b00/(1-p);
eqn1 = tau == (1 - (1-tau)^(N-1))*p_col;
eqn2 = solve(eqn1,p);  
p = double(eqn2);
tau = double(solve(eqn1,tau));

% 计算状态概率
Pe = (1-tau)^N * (1-pe_chan);
Pc = (1 - (1-tau)^N - N*tau*(1-tau)^(N-1)) * pc_over;
Ps = 1 - Pe - Pc;

% 计算系统吞吐率
S = Ps*Ts/(Ps*Ts + Pc*Tc + Pe*Te)*rate

节点退避过程的Markov链建模与前两题相同,这是基础。
计算p时需要考虑并发传输失败概率 P c c o l Pc_col Pccol。这里多引入一个参数描述交叠传输失败概率。
计算Pe时加入信道误码率 P e c h a n Pe_chan Pechan,反映信道质量导致的传输失败率。
计算Pc时加入交叠传输失败概率 P c o v e r Pc_over Pcover,反映交叠传输所致的失败率。
Ps作为剩余概率计算,保证状态概率和为1。
吞吐率公式形式不变,利用修改后的状态概率计算。

问题4

1.建立三状态Markov链,表示三个AP的传输状态。
2.计算状态间的转移概率:
●AP1和AP3不互听,同时传输的概率较大
●AP2与两者都互听,其传输机会较少
●考虑AP1和AP3先后发送导致失败的概率
3.计算每个状态的时隙长度:
●成功传输、失败传输、空闲时隙
4.利用状态概率和时隙长度计算系统吞吐率
问题4主要难点在于:
(1)建立三状态Markov链描述三个AP的传输
(2)计算复杂的状态间转移概率
(3)处理AP1和AP3先后发送的情况

明确定义三状态Markov链的状态含义,表示不同AP的传输情况。
状态转移概率的计算较为复杂,需要考虑不同AP间是否互听的情况。
AP1和AP3不互听可能同时发送,需考虑两者先后发送导致失败的概率。
AP2与两者均互听,其发送机会相对较少,转移概率需要合理设定。
计算状态时隙长度时,要区分成功发送、碰撞失败和空闲情况。
利用状态概率和时隙长度计算吞吐率公式与之前相同。
转移概率难以准确确定,可先做合理假设,并通过仿真调整参数。
理想化简化无法完全描述复杂无线信道,但可反映整体趋势。
实现过程可基于matlab编程,从简单场景逐步扩展复杂性。
可从二状态Markov链扩展到三状态Markov链,逐步添加细节。

1.定义三状态Markov链
状态空间: S = { s 1 , s 2 , s 3 } S = \{s_1, s_2, s_3\} S={s1,s2,s3}
s 1 s_1 s1 - 仅AP1发送
s 2 s_2 s2 - 仅AP2发送
s 3 s_3 s3 - AP1和AP3同时发送
2.状态转移概率
P ( s 1 ∣ s 1 ) − AP1发送后再发送概率 P ( s 2 ∣ s 1 ) − AP1结束后AP2发送概率 P ( s 3 ∣ s 1 ) − AP1结束后AP3也发送概率 P ( s 1 ∣ s 2 ) − AP2结束后AP1发送概率 P ( s 2 ∣ s 2 ) − AP2发送后再发送概率 P ( s 3 ∣ s 2 ) − AP2结束后AP3也发送概率 P ( s 1 ∣ s 3 ) − AP1和AP3结束后AP1再发送概率 P ( s 2 ∣ s 3 ) − AP1和AP3结束后AP2发送概率 P ( s 3 ∣ s 3 ) − AP1和AP3结束后两者再同时发送概率 P(s1|s1) \quad - \text{AP1发送后再发送概率} \\ P(s2|s1) \quad - \text{AP1结束后AP2发送概率}\\ P(s3|s1) \quad - \text{AP1结束后AP3也发送概率}\\ P(s1|s2) \quad - \text{AP2结束后AP1发送概率}\\ P(s2|s2) \quad - \text{AP2发送后再发送概率}\\ P(s3|s2) \quad - \text{AP2结束后AP3也发送概率}\\ P(s1|s3) \quad - \text{AP1和AP3结束后AP1再发送概率}\\ P(s2|s3) \quad - \text{AP1和AP3结束后AP2发送概率}\\ P(s3|s3) \quad - \text{AP1和AP3结束后两者再同时发送概率} P(s1∣s1)AP1发送后再发送概率P(s2∣s1)AP1结束后AP2发送概率P(s3∣s1)AP1结束后AP3也发送概率P(s1∣s2)AP2结束后AP1发送概率P(s2∣s2)AP2发送后再发送概率P(s3∣s2)AP2结束后AP3也发送概率P(s1∣s3)AP1AP3结束后AP1再发送概率P(s2∣s3)AP1AP3结束后AP2发送概率P(s3∣s3)AP1AP3结束后两者再同时发送概率

3.时隙长度 T s T_s Ts, T c T_c Tc, T e T_e Te
4.利用以上参数计算吞吐率 S S S

在这里插入图片描述

% 参数设置
Ts = 60;    % 成功传输时隙长度
Tc = 100;   % 失败传输时隙长度  
Te = 50;    % 空闲时隙长度
rate = 455.8e6; 

% 状态转移概率矩阵
P = [0.7 0.2 0.1;   % P(s1|s1) P(s2|s1) P(s3|s1) 
     0.3 0.5 0.2;   % P(s1|s2) P(s2|s2) P(s3|s2)
     0.2 0.1 0.7];  % P(s1|s3) P(s2|s3) P(s3|s3)

% 平稳态概率  
pie = [0.4 0.3 0.3];  

% 计算吞吐率
Ps = pie(1); 
Pc = pie(2) + pie(3)*0.3;   % AP1和AP3先后发送失败概率为0.3
Pe = 1 - Ps - Pc;
S = Ps*Ts/(Ps*Ts + Pc*Tc + Pe*Te)*rate

消融实验分析:

1.基础模型
(1) 建立二状态Markov链,状态空间S={s1,s2}
(2) s1表示AP1发送,s2表示AP2发送
(3) 忽略AP3的影响
(4) 转移概率矩阵P和时隙长度计算类似问题1、2
(5)计算系统吞吐率S

2.加入AP3影响
(1) 扩展为三状态Markov链,状态空间S={s1,s2,s3}
(2) 增加s3状态表示AP1和AP3同时发送
(3) 重新设定状态转移概率矩阵P
(4) 时隙长度不变
(5) 计算新系统吞吐率S
(6)分析吞吐率变化情况

3.加入先后发送失败概率
(1) 在计算碰撞失败概率Pc时加入先后发送失败概率
(2) Pc = Pc_s + Pc_f,其中Pc_f表示先后发送失败概率
(3) 重新计算系统吞吐率S
(4)分析吞吐率变化情况

4.迭代优化和评估
(1) 调整转移概率,使S接近仿真结果
(2) 评估各状态对系统性能的影响
(3)分析模型的优劣

相应的结论为:

  1. 基础二状态Markov链模型过于简化,无法反映AP3的影响,计算的系统吞吐率误差较大。
  2. 加入三状态Markov链后,考虑了AP3的同时发送情况,系统吞吐率结果更加准确。
  3. 仅考虑同时发送碰撞失败会低估系统碰撞失败概率,加入先后发送失败概率后结果更准确。
  4. 状态转移概率的设定对结果影响很大,需要通过迭代调整使结果接近仿真值。
  5. AP3的存在降低了AP2的机会,但当AP1和AP3均发送时,系统吞吐率最高。
  6. 三状态Markov链模型处于二状态模型和仿真之间,可以合理反映系统性能。 模型通过迭代优化可不断逼近实际情况,但仍存在理想化简化。

更多完整版看看这里!
(5 封私信 / 2 条消息) 如何评价2023数学建模研赛A题? - csdn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1040461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

络安全开发和音视频开发哪个方向更有前景?

网络安全开发和音视频开发哪个方向更有前景? 随着互联网和移动互联网的飞速发展,音视频应用已经成为人们日常生活和工作中不可或缺的一部分。 从视频会议、在线教育、直播、短视频到游戏,音视频技术的应用场景越来越广泛,市场需求…

面试必杀技:Jmeter性能测试攻略大全(第二弹)

1. JMeter介绍与安装 JMeter介绍 JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架灵活、多平台支持等优势。除了压力测试外,JMeter也可以应用的接口测试上。JMeter下载、安装及启动 下载: 访问JMeter官网:https://j…

机器学习——seaborn实用画图方法简介

0、seaborn简介: 前言:下面的总结只是介绍seaborn有哪些方法和属性,至于具体使用,通过下面给出的名称稍作查找即可。重点应该关注本文介绍的seaborn的使用方法seaborn与机器学习的关系: 知识图谱 0.1、了解即可的知识: seaborn:在matplotlib的基础上画一些更好看的图,在…

快速排序与代码

快速排序(Quicksort)是一种常用的排序算法,它基于分治的思想。 时间复杂度:O(nlogn) 空间复杂度:O(logn) 快速排序的基本思想如下: 选择一个元素作为基准&a…

Android Jetpack组件架构 :LiveData的使用和原理

Android Jetpack组件架构: LiveDate的使用和原理 导言 继Lifecycle组件之后我们接下来要介绍的就是LiveDate组件,所谓LiveDate字面意思上就是有声明的数据,当数据有改动时该组件可以感知到这个操作并将该事件通知到其观察者,这样…

STM32单片机入门学习(四)-蜂鸣器

蜂鸣器接线 低平蜂鸣器,低电平发声,高电平不发声, 三个排针,VCC接3.3v,GND接地,I/O接A0口,如图: 蜂鸣器代码:响一秒停半秒 #include "stm32f10x.h" #includ…

SQL server 创建存储过程

SQL Server如何创建存储过程 存储过程: 可以理解为完成特定功能的一组 SQL 语句集,存储在数据库中,经过第一次编译,之后的运行不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数…

spring源码解析——IOC之自定义标签解析

概述 之前我们已经介绍了spring中默认标签的解析,解析来我们将分析自定义标签的解析,我们先回顾下自定义标签解析所使用的方法,如下图所示: 我们看到自定义标签的解析是通过BeanDefinitionParserDelegate.parseCustomElement(ele…

Neo4j-双向关系

概述 这是GraphAware中关于双向关系的解释。 网址链接Modelling Data in Neo4j: Bidirectional Relationships | GraphAware 定向关系 Neo4j中的关系必须有一个语义化的类型和方向。 没有方向关系是模棱两可的,上面A队打败B队,如果没有方向&#xff0c…

PTE深度了解(一)

目录 PTE模板开始大审查吗?我的模板还能用吗? 使用模版,不会额外扣你分 类型一(前20秒说模版) 类型二(老实巴交) 类型三(就是都说简单句) 1.查重复 2.增加内容分识…

算法经济:数据驱动的新智能世界

随着计算机技术和信息科学的发展,以及云计算、大数据、区块链、人工智能等先进技术的融合,一场关于“数据”的革命正在全球范围内蓬勃展开。这种现象被称为“算法经济”,它是以数据为驱动、算法为核心的新的经济形态。 首先,我们需…

代码随想录day49:动态规划part10

121.买卖股票的最佳时机 贪心&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int low INT_MAX;int result 0;for (int i 0; i < prices.size(); i) {low min(low, prices[i]); // 取最左最小价格result max(result, prices[i…

Java抽象类、接口

1.抽象类 1.abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类那么该类就是抽象类。2.抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类3.抽象类,不能使用new关键字来创建对象,它是用来让子类继承的4.抽象方法,只有…

supervisor守护python进程报FATAL错 spawn error

出现问题 我们在使用supervisor守护使用虚拟python环境的时候可能会碰到如下的报错内容。 touchFish FATAL Exited too quickly (process log may have details)当我们使用sudo supervisorctl status查看这个进程的状态的时候&#xff0c;有可能还会返回包含一个spawn er…

小程序中如何导出会员卡的档案信息

对于医院、美容院等特殊商家&#xff0c;可能需要在给会员添加一些档案。例如今天客户是什么情况&#xff0c;做了什么服务&#xff0c;解决了什么问题。添加这些档案后&#xff0c;系统会保存这些信息&#xff0c;供下次来的时候使用&#xff0c;或者为商家日后做营销提供依据…

基于Java+SpringBoot+Vue+Element的OA系统的设计和实现

基于JavaSpringBootVueElement的OA系统的设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的…

Python3 如何实现 websocket 服务?

Python 实现 websocket 服务很简单&#xff0c;有很多的三方包可以用&#xff0c;我从网上大概找到三种常用的包&#xff1a;websocket、websockets、Flask-Sockets。 但这些包很多都“年久失修”&#xff0c; 比如 websocket 在 2010 年就不维护了。 而 Flask-Sockets 也在 2…

Linux文件出现“M-oM-;M-?” ^M 等情况

1、当在编辑linux系统的文件时&#xff0c;会出现如下情况&#xff1a; 解决方法&#xff1a;单个文件可以使用vim 进行修改&#xff0c;shift :&#xff0c; 然后 set nobomb 2、当文件出现每一行末尾^M的情况&#xff1a; 解决方法&#xff1a;使用vi的替换功能。启动vi&am…

LabVIEW风力涡轮机的雷电流测量系统中集成高速摄像机

LabVIEW风力涡轮机的雷电流测量系统中集成高速摄像机 随着全球风电装机容量的快速增长&#xff0c;雷电活动对风力发电机组造成的损害受到更多关注&#xff0c;特别是在雷电活动强烈的地区。在冬季闪电期间&#xff0c;风力涡轮机等高层结构会受到向上的雷击。众所周知&#x…

215 数组中的第K个最大元素

满足时间复杂度o(n)的方法&#xff1a; 快排的思想 class Solution{ public:int findKthLargest(vector<int>& nums,int k){return quickSelect(nums,k);} private:int quickSelect(vector<int>& nums,int k){//随机选择基数int privotnums[rand()%nums…