2016-2017 National Taiwan University World Final Team Selection Contest

本文详细解析了2016-2017年台湾大学世界总决赛团队选拔赛的多个算法题目,涵盖了排序、搜索、动态规划、图论、树结构、游戏策略、线段树、FFT、贪心算法等多个方面,提供了清晰的解题思路和代码实现。
Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

2016-2017 National Taiwan University World Final Team Selection Contest

A. Hacker Cups and Balls

题目描述:给定一个长度为\(n\)的序列\(a\), 有\(m\)次操作,每次操作选择一个区间\([L, R]\), 将区间内的数从小到大排序,或从大到小排序,问最终序列中间的数是什么。

solution
二分答案\(mid\),将小于\(mid\)的数变成\(-1\),大于\(mid\)的数变成\(1\),等于\(mid\)的数为0,每次操作相当于询问某个区间内\(-1\)\(1\)的个数,然后将区间重新染色,这个可以用线段树维护。最终如果中间的数是\(0\),则二分的值就是答案,如果是\(-1\)说明答案偏大,否则答案偏小。

时间复杂度: \(O(nlog^2n)\)

B. Bored Dreamoon

题目描述:有\(n\)个人,他们的高度\(h_i\)两两不同,现在他们要排队,有四个要求:

  1. 如果\(A, B\)不在同一行,则排在前面的人比后面的人矮。
  2. 如果\(A, B\)在同一行,则排在右边的人比左边的人矮。
  3. 任意两行的人数的差不能大于\(1\)
  4. 前面行的人数要大于等于后面行的人数。
    定义\(A\)\(B\)的右前方:如果\(A, B\)不在同一行且在\(A\)右边(同一行)的人数不多于在\(B\)右边(同一行)的人数,或者\(A, B\)在同一行,且\(A\)\(B\)的右边。

给定两两之间右前方的关系,问第一行人数的最小值,或者无解。

solution
\(f[i]\)表示\(i\)这个人至少排在从右数起第\(f[i]\)个位置,根据题目给的条件可以列出一些不等式,然后用差分约束求解。
但不太清楚为什么这样可以保证条件3,4.

时间复杂度:\(O(n^2)\)

C. Crazy Dreamoon

题目描述:有一个\(2000 \times 2000\)的网格图,上面有一些线段,问这些线段穿过了多少个格子。

solution
枚举\(x\)坐标,根据线段定位\(y\)坐标,染色,最后统计答案。

时间复杂度:\(O(2000n)\)

D. Forest Game

题目描述:给定一棵树大小为\(n\),你现在要将树上的点全部删掉,每次随机选择一个点,得分为这个点所在的树的大小,然后把这个点以及它所连的边删掉,求总得分的期望值乘\(n!\)

solution
考虑每个点对总得分的贡献,考虑两个点\(u, v\),当选择\(u\)删掉时,\(v\)能对\(u\)的得分作出贡献,当且仅当\(u\)\(v\)的路径上,\(u\)是第一个被删掉的点,这个概率为(路径长度+1)的倒数,这个概率等于\(v\)\(u\)的期望贡献,因此问题转化为求每种路径长度有多少条,总得分期望值就等于路径条数/(路径长度+1)的和。这个问题可以用点分治+\(FFT\)解决。

时间复杂度:\(O(nlog^2n)\)

code

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int mod=int(1e9)+7;
const int maxn=int(1e6)+100;

int n;
int deep[maxn], size[maxn];
int fa[maxn], maxs[maxn];
bool ban[maxn];
vector<int> pp, p;
vector<int> out[maxn];
int cnt[maxn];
LL ans[maxn], tmpans[maxn];
LL inv[maxn];

namespace FFT
{
    typedef complex<double> cplxd;
    const double PI=acos(-1);

    int n;
    int rev[maxn];
    cplxd ca[maxn], cb[maxn];

    void FFT_init()
    {
        for (int i=0; i<n; ++i) rev[i]=0;
        for (int i=0; i<n; ++i)
            for (int j=0; 1<<j<n; ++j)
                rev[i]=(rev[i]<<1) | (i>>j & 1);
    }

    void FFT(cplxd *a, int type)
    {
        for (int i=0; i<n; ++i)
            if (i<rev[i]) swap(a[i], a[rev[i]]);
        for (int i=2; i<=n; i<<=1)
        {
            cplxd wn(cos(2*PI/i), sin(type*2*PI/i));
            for (int j=0; j<n; j+=i)
            {
                cplxd w(1,0);
                for (int k=0; k<i>>1; ++k, w*=wn)
                {
                    cplxd tmp=a[j+k];
                    a[j+k]=a[j+k]+w*a[j+k+(i>>1)];
                    a[j+k+(i>>1)]=tmp-w*a[j+k+(i>>1)];
                }
            }
        }
    }

    void solve(int *a, int *b, LL *c, int nn)
    {
        nn<<=1;
        n=1;
        while (n<nn) n<<=1;
        FFT_init();
        for (int i=0; i<nn; ++i)
            ca[i]=cplxd(a[i], 0), cb[i]=cplxd(b[i], 0);

        for (int i=nn; i<n; ++i)
            ca[i]=cplxd(0, 0), cb[i]=cplxd(0, 0);

        FFT(ca, 1); FFT(cb, 1);
        for (int i=0; i<n; ++i) ca[i]=ca[i]*cb[i];
        FFT(ca, -1);
        for (int i=0; i<n; ++i) c[i]=LL(ca[i].real()/n+0.5)%mod;
    }
}

void read()
{
    scanf("%d", &n);
    for (int i=1; i<n; ++i)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        out[x].push_back(y);
        out[y].push_back(x);
    }
}
void dfs2(int cur, int _fa, int deep, int &maxdeep)
{
    maxdeep=max(maxdeep, deep);
    ++cnt[deep];
    for (auto &to:out[cur])
        if (to!=_fa && !ban[to]) dfs2(to, cur, deep+1, maxdeep);
}
int findroot(int cur, int _fa, int &total)
{
    int root=0;
    size[cur]=1;
    maxs[cur]=0;
    for (auto &to:out[cur])
        if (to!=_fa && !ban[to])
        {
            int nid=findroot(to, cur, total);
            if (root==0 || maxs[root]>maxs[nid]) root=nid;
            size[cur]+=size[to];
            maxs[cur]=max(maxs[cur], size[to]);
        }
    maxs[cur]=max(maxs[cur], total-size[cur]);
    if (root==0 || maxs[root]>maxs[cur]) root=cur;
    return root;
}
void dfs1(int root)
{
    int maxdeep=0;
    dfs2(root, 0, 0, maxdeep);
    FFT::solve(cnt, cnt, tmpans, maxdeep+1);
    for (int i=0; i<=maxdeep*2; ++i) ans[i]=(ans[i]+tmpans[i])%mod;
    for (int i=0; i<=maxdeep; ++i) cnt[i]=0;
    ban[root]=true;
    for (auto &to:out[root])
        if (!ban[to])
        {
            maxdeep=0;
            dfs2(to, 0, 1, maxdeep);
            FFT::solve(cnt, cnt, tmpans, maxdeep+1);
            for (int i=0; i<=maxdeep*2; ++i) ans[i]=(ans[i]-tmpans[i]+mod)%mod;
            for (int i=0; i<=maxdeep; ++i) cnt[i]=0;
        }
    for (auto &to:out[root])
        if (!ban[to]) { size[root]=size[to]; dfs1(findroot(to, 0, size[root])); }
}
void solve()
{ 
    dfs1(findroot(1, 0, n));
    LL answer=0;
    inv[1]=1;
    for (int i=2; i<=n; ++i) inv[i]=inv[mod%i]*(mod-mod/i)%mod;
    for (int i=0; i<n; ++i) answer=(answer+ans[i]*inv[i+1]%mod)%mod;
    for (int i=1; i<=n; ++i) answer=answer*i%mod;
    printf("%lld\n", answer);
}
int main()
{   
    read();
    solve();
    return 0;
}

E. Lines Game

题目描述:给定一个序列\(p_i\),在二维平面上将\((0, i)\)\((1, p_i)\)相连,在给定一个费用\(c_i\),表示将\((0, i), (1, p_i)\)这条线段删掉的费用,在删掉一条线段的时候,与这条线段相交的线段都会被删掉,但不需要费用,问最少需要多少花费才能把所有线段删掉。

solution
将一条线段用一个点\((i, p_i)\)表示,则最终的方案一定是上升的,并且以相邻两个点作为对角的矩形内部没有点。设\(f[i]\)表示\(i\)一定要选,且\(i\)左下的点已经被删掉的费用。cdq分治,左右两边按纵坐标从小到大排序,分别维护两个按横坐标排的单调栈,左边的栈是用来维护能作为决策的点,右边是维护对应横坐标能在左边选择的高度范围,然后用线段树维护dp值。

时间复杂度:\(O(nlog^2n)\)

code

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int maxn=int(1e5)+100;
const int inf=0x7fffffff;

struct mes
{
    int x, y, v;
};
struct data
{
    int value, cost, num;
};

int n;
data a[maxn];
int f[maxn], q[maxn], qq[maxn];
int g[maxn];
int tree[maxn*4];
mes dat;

void read()
{
    scanf("%d", &n);
    for (int i=1; i<=n; ++i) scanf("%d", &a[i].value);
    for (int i=1; i<=n; ++i) scanf("%d", &a[i].cost);
    for (int i=1; i<=n; ++i) a[i].num=i;
}
bool cmp0(data b, data c)
{
    return b.value<c.value;
}
bool cmp1(data b, data c)
{
    return b.num<c.num;
}
void build(int cur, int L, int R)
{
    tree[cur]=inf;
    if (L==R) return; 
    int mid=(L+R)>>1;
    build(cur<<1, L, mid);
    build(cur<<1 | 1, mid+1, R);
}
void updata(int cur, int L, int R)
{
    if (dat.x>R || dat.y<L) return;
    if (dat.x<=L && R<=dat.y)
    {
        tree[cur]=dat.v;
        return;
    }
    int mid=(L+R)>>1;
    updata(cur<<1, L, mid);
    updata(cur<<1 | 1, mid+1, R);
    tree[cur]=min(tree[cur<<1], tree[cur<<1 | 1]);
}
int ask(int cur, int L, int R)
{
    if (dat.x>R || dat.y<L) return inf;
    if (dat.x<=L && R<=dat.y) return tree[cur];
    int mid=(L+R)>>1;
    return min(ask(cur<<1, L, mid), ask(cur<<1 | 1, mid+1, R));
}
void cdq(int L, int R)
{
    if (L>=R)
    {
        if (f[L]<inf) f[L]+=a[L].cost;
        return;
    }
    int mid=(L+R)>>1;
    cdq(L, mid);
    sort(a+L, a+mid+1, cmp0);
    sort(a+mid+1, a+R+1, cmp0);
    int head=1, tail=0;
    int hh=1, tt=0;
    for (int i=mid+1, j=L; i<=R; ++i)
    {
        while (j<=mid && a[j].value<a[i].value)
        {
            dat.v=inf;
            while (head<=tail && a[q[tail]].num<a[j].num)
            {
                dat.x=dat.y=a[q[tail]].value; 
                updata(1, 0, n);
                --tail;
            }
            q[++tail]=j;
            dat.x=dat.y=a[j].value; dat.v=f[a[j].num];
            updata(1, 0, n);
            ++j;
        }
        while (hh<=tt && a[qq[tt]].num>a[i].num) --tt;
        qq[++tt]=i;
        dat.x=a[qq[tt-1]].value; dat.y=a[i].value;
        if (dat.x<=dat.y) f[a[i].num]=min(f[a[i].num], ask(1, 0, n));
    }
    dat.v=inf;
    while (tail)
    {
        dat.x=dat.y=a[q[tail]].value;
        updata(1, 0, n);
        --tail;
    }
    sort(a+mid+1, a+R+1, cmp1);
    cdq(mid+1, R);
}
void solve()
{
    f[0]=0;
    ++n;
    a[n].value=a[n].num=n;
    for (int i=1; i<=n; ++i) f[i]=inf;
    build(1, 0, n);
    cdq(0, n);
    printf("%d\n", f[n]);
}
int main()
{
    read();
    solve();
    return 0;
}

F. Lonely Dreamoon 2

题目描述:给定\(n\)个数,将这\(n\)个数重新排列,使得相邻两个数的差的绝对值的最小值最大。输出方案。

solution
从小到大排序,结论是放在奇数位的数是连续的一段,因此只要找出连续的一段数,头和尾的值相差最小,按顺序放入奇数位,剩下的数从段尾+1开始,循环插入偶数位。

时间复杂度:\(O(n)\)

G. Dreamoon and NightMarket

题目描述:有\(n\)个数,找出所有子集中,和为第\(k\)小的子集的和。

solution
从小到大排序,二分答案,用一个队列记住当前的有效状态,一个状态包括当前的集合的和以及当前集合选择的数的最大编号。每次从队列里面取出一个状态,然后添加一个数,这个数的编号要大于最大编号,而且加上那个数的和要小于等于二分的答案,看总共有多少个集合的和小于等于二分的答案。

时间复杂度:\(O(nlogn)\)

H. Split Game

题目描述:给定一个在第一象限的简单多边形,用一条穿过原点的直线切割多边形,问最多能切成多少个区域。

solution
将点按极角排序。假设现在直线经过点\(i\), 考虑八种情况。

733825-20181205234539695-1651555976.png

对于情况2,4,6,8,区域没有变化,
对于情况1,当直线再偏一点时区域加一,对于情况4,区域加一。
对于情况3,区域减一,对于情况7,当直线再偏一点时,区域减一。

根据不同情况区域的数量变化,求出最大值。

时间复杂度:\(O(nlogn)\)

I. Tree Game

题目描述:给定一棵树,开始时所有边都是白色,每次操作选择两个叶子节点,这两个叶子节点之间的路径要全是白色,然后将路径全涂成黑色,重复操作,直到无法选择为止,问最少要多少次操作。

solution
贪心,每棵子树只会向它的父亲传递两个叶子节点,对于一棵子树,
如果有多于两个儿子子树为\(1\),则多出来的子树要两两匹配,
如果有多于一个儿子子树为\(2\),则多出来的子树要两两匹配,
如果进行了前两个操作之后,还有两个子树为\(1\)的儿子,一个子树为\(2\)的儿子,则用一个\(1\)匹配一个\(2\)
最后想父亲传递的叶子节点数位剩下的叶子节点数与\(2\)取最小值。

时间复杂度:\(O(n)\)

J. Zero Game

题目描述:给定一个\(01\)串,有一种操作:将某个位置的数移到某个位置。有若干个询问,每次询问为一个数,问用这么多次操作得到的串的最长\(0\)子串为多长。

solution
如果移动的数字为\(1\),则相当于将\(1\)直接移除,如果是\(0\),则相当于从某个地方移一个\(0\)过来。
先将连续的相同数字合并。设\(s1[i]\)\(1\)的个数前缀和,\(s0[i]\)\(0\)的个数前缀和。枚举右端\(i\),要求出\(j\)使得\((s0[i]-s0[j])-(s1[i]-s1[j])\)最大,因为这相当于用\((s1[i]-s1[j])\)次操作获得了\((s0[i]-s0[j])\)个零,剩下的操作数直接从另外的地方移\(0\)过来。这里可以用单调队列维护。

时间复杂度:\(O(Qn)\)

转载于:https://www.cnblogs.com/GerynOhenz/p/10074266.html

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

内容概要:本文针对功率阶跃工况下光储虚拟同步发电机(VSG)并网系统存在的电能质量问题,提出一种自适应治理策略。通过Simulink搭建完整的光储VSG并网系统仿真模型,重点研究在功率突变条件下系统出现的频率波动、电压畸变及谐波增加等动态问题。所提策略结合VSG的惯量与阻尼特性,设计了参数自适应调节机制,实现对系统动态响应过程的有效调控,显著提升了并网电流波形质量与频率稳定性,增强了系统在强扰动工况下的鲁棒性与电能质量治理能力。; 适合人群:具备电力电子、自动控制理论及新能源并网技术基础的科研人员、电气工程及相关专业的硕士/博士研究生,以及从事微电网、储能系统、VSG控制研发的工程技术人员。; 使用场景及目标:①用于分析光储系统在功率阶跃等动态工况下的并网特性与电能质量演变规律;②为VSG关键控制参数(如惯量、阻尼)的自适应整定提供设计思路与仿真验证平台;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的前期控制策略验证。; 阅读建议:建议结合Simulink仿真模型深入理解控制策略的实现逻辑,重点关注VSG惯量阻尼协同调节的自适应机制设计,可通过设置不同功率阶跃幅度、光照强度变化及负载投切等多场景进行仿真测试,全面评估策略的动态性能与适用边界。
内容概要:本文系统研究了基于ARIMA-CNN-LSTM的混合时间序列预测模型,并提供了完整的Python代码实现。该模型融合传统统计方法ARIMA与深度学习模型CNN和LSTM的优势,充分发挥ARIMA在捕捉线性趋势与季节性特征方面的能力,以及CNN和LSTM在提取局部特征和建模长期依赖关系方面的强大性能,从而有效提升对复杂非线性时间序列的预测精度。研究涵盖了数据预处理、模型构建、参数调优、训练与预测全流程,并通过实际案例验证模型在风电、光伏、负荷、电价等能源领域预测任务中的优越表现。文档还整合了电力系统、路径规划、信号处理等多个科研方向的仿真资源与代码示例,凸显其在学术研究与工程实践中的广泛应用价值。; 适合人群:具备一定Python编程基础和机器学习理论知识,从事科研或工程技术工作的研究人员,特别适用于关注时间序列分析、深度学习建模的硕士生、博士生及行业从业者。; 使用场景及目标:①深入理解并掌握ARIMA与深度学习模型(如CNN、LSTM)融合的建模范式与技术细节;②应用于能源领域中风电出力、光伏发电、电力负荷及电价等关键变量的高精度预测;③为科研课题、学术论文复现、工程项目优化等提供可靠、可复用的代码框架与技术支持。; 阅读建议:建议结合所提供的Python代码进行动手实践,重点剖析数据预处理流程、混合模型架构设计及超参数调优策略,同时可参考文档中其他相关研究案例以拓宽技术视野和应用场景认知。
内容概要:本文围绕谐振式双有源桥(DAB)变换器,深入研究了一种无需电流传感器的模型预测控制(MPC)方法,并基于Simulink平台完成了完整的仿真实现。该方法通过构建精确的系统数学模型,替代传统依赖物理电流传感器的状态观测方式,有效降低了系统硬件成本与布线复杂度,同时提升了系统的可靠性和集成度。研究重点涵盖系统建模、预测模型构建、目标函数设计、约束条件处理以及控制律求解等关键环节,充分体现了模型预测控制在电力电子高频软开关变换器中的高动态响应、高稳态精度与强鲁棒性的优势。文中通过仿真验证了该无传感MPC策略在不同工况下的控制性能,展示了其在抑制电流冲击、提升能量转换效率及增强系统稳定性方面的良好表现。; 适合人群:电力电子、自动化、电气工程及其相关专业的硕士研究生、博士生、高校科研人员,以及从事DAB变换器拓扑设计、先进数字控制算法开发与新能源电能变换系统研发的工程技术人员。; 使用场景及目标:① 掌握谐振式DAB变换器的工作原理及其无传感控制的设计思路与实现路径;② 深入理解模型预测控制在电力电子系统中的建模方法、优化求解过程与仿真验证流程;③ 为开展无传感器驱动、高频隔离DC-DC变换、数字电源控制等前沿课题提供可复现的技术方案与仿真基准平台。; 阅读建议:建议结合提供的Simulink仿真模型同步学习,重点关注状态观测器设计与预测模型的耦合机制,动手调整系统参数与控制权重以观察动态响应变化,深化对MPC控制机理的理解,并可进一步拓展至其他软开关拓扑或融合人工智能优化算法进行性能提升研究。
内容概要:本文详细介绍了基于非线性反步法与Lyapunov-MPC模型预测控制相结合的自主水下航行器(AUV)轨迹跟踪控制方法,并完整实现了包含经典Fossen动力学模型的Matlab仿真代码,复现了高水平期刊研究成果。该方法通过反步法逐级构造控制律,结合Lyapunov函数确保系统全局渐近稳定性,同时引入模型预测控制(MPC)优化未来动态行为,有效提升控制器在复杂海洋环境下的轨迹跟踪精度、抗干扰能力与系统鲁棒性。整个设计充分体现了非线性控制理论与现代优化控制策略的深度融合。; 适合人群:具备自动控制原理、非线性系统分析、现代控制理论基础,熟悉Matlab/Simulink仿真工具,且从事水下机器人、无人航行器、航空航天、智能控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于自主水下航行器、无人机等强非线性系统的高精度轨迹跟踪控制器设计与仿真验证;②支撑高水平学术论文复现、科研课题攻关或实际工程原型开发,掌握先进复合控制策略的设计流程与实现技巧;③深入理解反步法、Lyapunov稳定性理论与模型预测控制三者协同设计的理论依据与工程应用价值。; 阅读建议:建议读者结合Fossen动力学建模理论,逐步调试Matlab代码,重点关注控制器设计步骤、Lyapunov函数构造过程及MPC滚动优化实现细节,配合相关文献进行对比分析,以深化对非线性控制系统设计与仿真验证全过程的理解。
内容概要:本文档聚焦于采用BPSK和GMSK调制方式的Turbo码通信系统的研究与Matlab仿真实现,系统探讨了MSK/GMSK调制解调的基本原理、Turbo码的编码与译码机制以及二比特差分解调算法的具体实现。通过构建完整的通信链路模型,文档详细展示了调制、信道传输、解调及Turbo译码等关键环节的仿真流程,并对系统性能进行了全面评估,特别是误码率(BER)随信噪比(SNR)变化的曲线分析,为理解和优化现代数字通信系统提供了坚实的理论基础和实践指导。此外,文档还强调了GMSK作为一种连续相位调制技术,在提高频谱效率方面的优势,以及Turbo码作为强大前向纠错码在提升通信可靠性方面的重要作用。; 适合人群:具备通信原理基础知识和Matlab编程能力的高校学生、研究生及从事无线通信系统研发的工程技术人员,尤其适合正在进行相关课题研究或毕业设计的人员。; 使用场景及目标:① 学习并掌握GMSK与BPSK调制技术在Turbo码系统中的应用;② 实现并仿真Turbo码与不同调制方式结合的通信链路,分析其抗干扰与误码性能;③ 为通信系统仿真课程设计、科研项目或学术论文提供可复现的Matlab代码参考。; 阅读建议:建议读者结合通信原理教材,先理解Turbo码的编译码机制与GMSK调制特性,再对照Matlab代码逐步调试运行,重点关注调制解调模块与译码器的接口设计及仿真结果的分析方法。
内容概要:本文提出了一种基于TOGI-SOGI混合积分器的光储并网谐波自适应抑制方法,通过Simulink仿真实现,旨在提升光伏发电与储能系统并网过程中的电能质量。该方法创新性地融合三阶广义积分器(TOGI)与二阶广义积分器(SOGI)的优点,构建高性能混合积分结构,有效实现并网电流中基波分量的精确提取与谐波成分的自适应抑制,显著增强了系统的动态响应能力、稳态精度及抗干扰性能。文中详细阐述了控制策略的设计原理、系统建模步骤与仿真验证流程,并提供了完整的MATLAB/Simulink仿真资源,便于科研人员复现结果、深化理解并开展后续优化研究。; 适合人群:从事电力电子、新能源并网控制、电能质量治理及相关领域的研究生、高校科研人员和工程技术人员,尤其适合具备MATLAB/Simulink仿真基础和电力系统专业知识背景的研究者。; 使用场景及目标:①应用于光储并网系统中谐波抑制策略的设计与性能优化;②为相关领域学术论文的复现、算法改进与工程项目开发提供可靠的技术支持与实践范例;③推动高精度、自适应并网逆变器控制技术的研发与实际应用落地。; 阅读建议:建议读者结合所提供的仿真模型进行逐步操作与调试,重点关注TOGI-SOGI混合结构的工作机理及其在锁相环(PLL)与电流控制环路中的协同作用,深入理解关键参数的整定方法与仿真结果的分析逻辑,以全面掌握该谐波自适应抑制方法的核心技术要点与工程实现路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值