当前位置: 首页 > news >正文

技术干货 | Modelica建模秘籍之状态变量

在很多领域都有“系统”这个概念,它描述的往往是一些复杂关系的总和。假如我们将系统看做一个黑箱,那么,在系统的作用下,外界的输入有时会产生令人意想不到的输出,“蝴蝶效应”就是其中的典型案例。

图1 一只南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可以在两周以后引起美国得克萨斯州的一场龙卷风

“蝴蝶效应”的实质是在一个确定性系统中,存在着看似随机的不规则运动,其行为直观表现为不确定性、不可重复、不可预测,即混沌系统。此时将混沌系统理解为黑盒系统是远远不够的,我们需要通过系统的初始状态求解系统未来时刻的状态。

基于同样的原理,我们在Modelica中进行系统建模时,通过求解状态变量确定系统状态,对系统进行动态仿真。假如你还存在如下疑问:

1. 如何实现动态系统建模?

2. 如何规定状态变量?

3. 为什么系统初值非常重要?

4. 怎样建模可以提高系统计算效率?

那么请你一定认真读完本篇技术干货,小编带你全面认识Modelica建模中的状态变量。

一、什么是动态系统?

首先,大家需要理解一点:系统可以分为动态系统和静态系统,状态变量只有在动态系统中才有意义。我们可以举一个简单电路系统的例子,下图分别为只含有电阻的电路与只含有电容的电路,其中u(t)为输出电压,i(t)为输入电流,那么电路系统的方程可以写为如下形式:

图 2 动态系统与静态系统

显然,对于含容电路来说,系统的状态受到过去影响随时间变化,这样的系统就被称为动态系统。

二、 什么是状态变量?

状态变量首先由控制学科中引入,定义为动态系统的状态变量为确定动态系统的最小一组变量。只要知道时刻这组变量以及时的输入,就可以完全确定系统的在任何时刻的行为。

那么,由这些状态变量组成的一个向量称为状态向量,而状态向量存在的空间称为状态空间。动态系统的任何状态都可以用状态空间中的一个点来表示,动态系统的状态变化可以描述为状态矢量端点随时间变化描绘出的路径。

上述定义有些抽象复杂,下面举一个简单案例以帮助大家理解。将一封闭容腔中装满水并且对水进行加热,若已知水的压力和温度,我们就可以推断出当前水的状态是液态还是气态,还可以计算出当前水的密度、粘度等参数。此时,压力与温度就构成了当前封闭容腔系统的一组状态变量。

图 3 烧水也是一门技术活

那么,微分方程中状态变量是如何表示的呢?

如果只考虑集中参数模型,不同领域工程物理系统的物理本构通常由常微分方程(Ordinary Differentical Equations-ODE)描述,系统组件之间的约束一般用代数方程(Algebraic Equations)表示。

但是对于Modelica 语言,其面向对象的建模特点导致物理本构体现在其组件的建模上,组件之间的约束以连接器的连接方式表现。此时,表达本构模型的微分方程与连接转化的代数方程之间耦合将形成一般形式的微分-代数方程 ( Differentical - AlgebraicEquations -DAE)。

一般来说,常微分方程组可以表示为以下形式:

由于因变量x的导数以独立瞬态变量t和因变量x的形式显式表示,此时将数组视为一组状态变量,只要函数f具有足够的连续性,总能找到初值问题的唯一解。

例如:

对于微分-代数方程组,导数一般没有显式表示,甚至一些因变量的导数可能不出现在这些方程中。而在表达式中不显式包含变量y的任何导数的变量,这些变量称为代数变量。

在微分-代数方程组中,我们同样选取x为状态变量,但是与常微分方程组不同的是,微分代数方程组内数组的各分量之间可能存在隐式的约束关系,需要通过选择数组的部分分量作为系统的状态变量。

总而言之,我们可以得出一条规律,状态变量的一大特征是其对时间的导数已知。即:

而对于Modelica语言,其实质是解决微分-代数方程问题,在求解前需要对微分-方程系统的状态变量进行选择。

三、如何通过状态变量描述系统?

引言中我们提到了将系统看做一个黑盒模型,输入变量经过与黑盒的交互产生输出。通过上述的状态空间方法,我们可以推导其输入、输出与状态变量之间的表达式。

下面我们以一个稍微复杂的电路系统为例,解释由状态变量推导动态系统状态空间方程。

上图所示为一线性时不变电路,设输入为,输出为,电阻为,电容为

两端电压为两端电压为,则:

(2.1a)

(2.1b)

选择状态变量,由式(2.1a)与式(2.1b)可得:

(2.2a)

(2.2b)

将上式转化为矩阵形式:

(2.3a)

(2.3b)

由式(2.3a)、(2.3b)中我们可以看出,在系统状态空间分析中涉及三种类型的变量,即输入变量、状态变量、系统输出量y。

对于更为一般的多输入多输出的系统状态方程,有兴趣的读者可以参考《现代控制工程》,其状态空间表达式为:

(2.4a)

(2.4b)

式中:为状态矩阵,为输入矩阵,输出矩阵,为直接传输矩阵。不难发现,此时式(2.3a)、(2.3b)与式(2.4a)、(2.4b)具有相同的形式,即上述电路为线性定常系统单输入、单输出两个状态变量的状态空间方程实例。

四、如何选择合适的状态变量?

对于一个实际系统来说,状态变量的选取方式并不唯一。比如上文提到的烧水过程,我们可以选择水的压力、温度作为一组状态变量,也可以选择水的压力、密度作为一组状态变量。在Modelica建模过程中,一方面系统会自动选择状态变量,另一方面我们可以手动干预状态变量的选择,合适的状态变量选择有利于系统的求解。

状态变量设置代码方法为stateSelect=StateSelect.xxx。stateSelect是实型变量的一个内置属性,用于控制状态变量的选取,其值有如下5种形式:

StateSelect.always

总是作为状态变量

StateSelect.prefer

优先选作状态变量

StateSelect.default

缺省值,介于prefer与avoid之间,当以微分变量出现时,可以选作状态变量

StateSelect.avoid

尽量避免作为状态变量

StateSelect.never

从不作为状态变量

从always到never,对应变量被选作状态变量的优先级依次降低。即在指标约简之后模型的所有微分变量中,总是选取stateSelect属性值为always的变量作为状态变量,总是不选stateSelect属性值为never的变量作为状态变量,在prefer、default与avoid中,根据需要从prefer到avoid依次选取。下面我们以两个案例说明状态变量选取的方式:

案例1:

  Real x(stateSelect = StateSelect.prefer);Real y;
Equationx = y;der(x) + der(y) = 1;

在以上示例中,变量y的stateSelect值为缺省值,即为StateSelect.default,而变量x的stateSelect值为StateSelect.prefer。x与y均作为微分变量出现,且存在关于二者的代数方程x =y。方程x = y在指标约简过程中将求一次导数,最终在x与y中只有一个变量作为状态变量。由于x的stateSelect值的优先级高于y,故最终x被选作状态变量。

案例2:

  Real x(stateSelect = StateSelect.prefer);Real y;
Equationx = y + 0.5;der(y) = y+1;

为了让x作为状态变量,将对下列方程求导,使得x的导数显式出现

此时y因其导数不再出现,而成为代数变量。

由此可见,将一个代数方程约束的两个变量的stateSelect属性值均设置为always是错误的。此外,default与avoid对代数变量而言等同于never,即使在编译过程中可能引入其导数,也不会将其选作状态变量。

五、建模方法如何影响状态变量?

前面我们已经引入了状态变量、状态空间并且以线性时不变的电路系统为例导出了一般情况下状态空间表达式。下面我们就以一个简单的机械系统为例说明不同的建模方式是如何影响状态变量的选取。

以一个单摆的笛卡尔坐标运动方程为例,其运动学方程可以写出如下形式:

(3.1a)

(3.1b)

(3.1c)

式中m为小球质量,x为水平方向位移,y为竖直方向位移,L为绳长,g为重力加速度,为x的二阶导数,物理含义为小球在水平方向上的加速度,与之同理。

上述式(3.1a)至式(3.1c)形成了一个典型的隐式微分代数方程系统(Implict-DAE),为了正确求解我们需要将上述方程转化为显式常微分方程(Explicit-ODE),步骤如下:

首先我们需要对式(3.1c)进行两次求导,才能显式地暴露变量的约束关系,但是与此同时又增加了的约束方程:

(3.2a)

(3.2b)

此时为了避免模型求解时雅克比矩阵奇异,状态变量在选择时需要进行动态切换,即当x为0时,我们就必须选取y为状态变量,如果y=0时,则必须选取x为状态变量。

状态变量的动态切换问题是一个组合问题,如果状态变量的排列组合数目很大,从而使雅克比矩阵奇异检测条件非常复杂,此时就会拖慢求解器的求解效率。

应用MWORKS.Sysplorer,我们将上述物理模型利用Modelica语言表达形成如下代码:

model SimplePendulum_XY "单摆实例"/*参数*/parameter Modelica.SIunits.Mass m = 0.01 "小球质量";parameter Modelica.SIunits.Length L = 0.5 "绳长";/*变量*/Modelica.SIunits.Distance x "x方向位移";Modelica.SIunits.Distance y "y方向位移";Modelica.SIunits.Velocity vx "x方向速度";Modelica.SIunits.Velocity vy "y方向速度";Modelica.SIunits.Acceleration ax "x方向加速度";Modelica.SIunits.Acceleration ay "y方向加速度";Modelica.SIunits.Force F "绳子拉力";Modelica.SIunits.Angle theta "转角";
equation vx = der(x);vy = der(y);ax = der(vx);ay = der(vy);m * ax = -x / L * F;m * ay = -y / L * F - m * Modelica.Constants.g_n;x ^ 2 + y ^ 2 = L ^ 2;x = L * sin(theta);
end SimplePendulum_XY;

打开“仿真设置-调试-动态状态变量”选择并启动仿真,我们可以在输出栏中发现求解器一直在进行状态变量的切换,仿真10s的时间为0.02s。

假如我们将单摆运动的运动方程做一些改变,引入转角变量 ,重新建立单摆运动方程:

(3.3a)

(3.3b)

(3.3c)

(3.3d)

与上述方程同理,对式(3.3c)、式(3.3d)进行求导:

通过引入转角变量,其自动被选为状态变量,原来的x和y不再被选为状态变量,使得系统动态自由度为零,避免由于动态状态变量选择导致的计算效率下降。

应用MWORKS.Sysplorer,我们将上述物理模型利用Modelica语言表达形成如下代码:

model SimplePendulum_theta "单摆实例"/*参数*/parameter Modelica.SIunits.Mass m = 0.01 "小球质量";parameter Modelica.SIunits.Length L = 0.5 "绳长";/*变量*/Modelica.SIunits.Distance x "x方向位移";Modelica.SIunits.Distance y "y方向位移";Modelica.SIunits.Velocity vx "x方向速度";Modelica.SIunits.Velocity vy "y方向速度";Modelica.SIunits.Acceleration ax "x方向加速度";Modelica.SIunits.Acceleration ay "y方向加速度";Modelica.SIunits.Force F "绳子拉力";Modelica.SIunits.Angle theta(start = 1.57) "转角";
equation vx = der(x);vy = der(y);ax = der(vx);ay = der(vy);m * ax = -F * sin(theta);m * ay = F * cos(theta) - m * Modelica.Constants.g_n;x = L * sin(theta);y = -L * cos(theta);
end SimplePendulum_theta;

输出窗口中,动态状态变量切换已经消失,仿真时间也由0.02s缩短至0.004s,仿真效率提高了5倍!

六、 状态变量初始化

在状态空间表达式中,我们已知了状态变量的导数,为了避免差分法对于小时间步长的局限性,因此利用积分方法对于状态变量进行求解。为了简单的说明求解原理,本文只以显式欧拉法表示,即:

式中:为第n步计算所得状态变量,依赖于时间步长和特定积分方法使用的常数。因此状态变量的求解依赖于求解器内置的积分器。

状态变量在积分求解时,一方面依赖于其导数值,另一方面状态变量初始值也同样重要,初始值不同会导致同一Modelica模型的计算结果不同,甚至导致其求解失败。

Modelica语言中初始化方式有两种,分别为初始值初始化与稳态初始化:

a) 初始值初始化:直接为状态变量设定初始值。

  parameter Real x0 = 1;Real x(start = x0, fixed = true);
equationder(x) = 2*x - 1;

上式状态变量x的初始值就即为1。如果用户没有为某个变量设定初始值属性,那么该变量的初始值被缺省地设置为0。

b) 稳态初始化:为变量的导数设定初始值,例如:

  Real  x;
initial equationder(x)=0;
equationder(x)=2 * x-1;

根据上述初始条件可以求得x的初始值为:

在大型Modelica模型系统状态变量初始化时,使用不同的初始化方式会对计算结果产生不同影响。

  • 对于初始化过程计算速度而言,稳态初始化的计算速度要远远慢于初始值初始化的计算速度。这是因为初始值初始化直接为变量赋值,而稳态初始化过程还需要通过变量的导数以及非线性方程组求解变量的值。

  • 对于初始化后计算结果的稳定性而言,稳态初始化的效果要远好于初始值初始化。这是由于稳态初始化时,状态变量的值根据其导数为零时求得。此时系统中的状态变量更加接近于系统稳定时状态变量的值。

七、总结

本文是一篇Modelica建模秘籍,在最后小编给大家总结了此篇秘籍的口诀心法,请记牢:

1.设置状态变量选取,尽量选择数量级较大且接近同时变化较小的参数。热流系统中,一般情况下我们选择压力、比焓的组合会好于选择温度、密度的状态变量组合;而在机械系统中我们通常选择相对位移(运动副)作为状态变量。

2.减少系统状态变量自由度,避免状态变量的切换。

3.明确状态变量初始值。

4.将非线性量选作状态变量可以有效降低模型系统代数环大小。

状态变量是动态系统建模的重中之重,关系着系统能否正常求解以及求解的效率,小编希望大家看完这篇秘籍,可以成为Modelica建模的高手高高手!

参考材料

1.KatsuhikoOgata,尾形克彦,卢伯英,等.现代控制工程:第四版[M].电子工业出版社,2007.

2.周凡利.工程系统多领域统一模型编译映射与仿真求解研究[D].华中科技大学,2011.

3.丁建完.陈述式仿真模型相容性分析与约简方法研究[D].华中科技大学,2006.

相关文章:

技术干货 | Modelica建模秘籍之状态变量

在很多领域都有“系统”这个概念,它描述的往往是一些复杂关系的总和。假如我们将系统看做一个黑箱,那么,在系统的作用下,外界的输入有时会产生令人意想不到的输出,“蝴蝶效应”就是其中的典型案例。图1 一只南美洲亚马…...

LeetCode 2574. 左右元素和的差值

给你一个下标从 0 开始的整数数组 nums ,请你找出一个下标从 0 开始的整数数组 answer ,其中: answer.length nums.length answer[i] |leftSum[i] - rightSum[i]| 其中: leftSum[i] 是数组 nums 中下标 i 左侧元素之和。如果不…...

rollup环境配置

VUE2.x源码学习笔记 1. rollup环境配置 首先在VScode中新建文件夹vue_sc,然后终端打开定位到打开的文件夹,输入“npm init -y”初始化配置项,运行成功之后文件夹新增package.json文件 继续在终端运行"npm install babel/preset-env ba…...

二分查找与二分答案、递推与递归、双指针、并查集和单调队列

二分查找与二分答案 文章目录二分查找与二分答案应用总结例题木材加工题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示数据规模与约定思路代码递归与递推应用总结[NOIP2003 普及组] 栈题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思…...

如何进行域名购买,获取免费ssl证书,使用springboot绑定ssl证书

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注一下!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习&#…...

LabVIEW网络服务安全2

LabVIEW网络服务安全2在客户端应用程序中创建签名对请求进行签名要求您具有能够从客户端的编程语言调用的MD5摘要算法以及SHA256加密摘要算法的实现。这两种算法通常都可用于大多数平台。还需要:1. 要使用的HTTP方法的字符串(“GET”、“POST”、“PUT”…...

java动态代理

目录儿一、代理模式的作用二、实现代理的方式三、动态代理的实现3.1 jdk动态代理3.2 cglib动态代理一、代理模式的作用 功能增强: 基于某个功能,再增加一些功能。 (比如目标类只负责核心功能,其他附属功能通过代理类完成。代理类的方法名与目…...

Python 简单可变、复杂可变、简单不可变、复杂不可变类型的copy、deepcopy的行为

copy模块:copy:浅拷贝deepcopy:深拷贝简单可变类型、复杂可变的copy()、deepcopy():简单不可变、复杂不可变类型的copy()、deepcopy():结论:对于简单类型的可变类型copy是深拷贝,改变了该拷贝变…...

QML Item

在QML中所有的可视项目都继承自Item,虽然Item本身没有可视化的外观,但它定义了可视化项目的所有属性。 Item可以作为容器使用: Item{Rectangle{id:retc}Rectangle{id:retc1}Rectangle{id:retc2}Rectangle{id:retc3}} item拥有children属性…...

使用xca工具生成自签证书

本文使用 xca 生成自签证书。 概述 之前使用 openssl 生成证书,在 golang 中测试,发现客户端连接失败,经查发现是Subject Alternative Name不支持导致的。因虚拟机 openssl 版本较低,有个功能无法实现,且升级麻烦&…...

Unity IOS 通过命令行导出IPA

新建一个文件然后输入如下内容 #!/usr/bin/env sh /Applications/Unity/Hub/Editor/2020.1.5f1c1/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath /Users/zyt/Test -executeMethod Test.BuildEditor.BuildApp cd /Users/zyt/Test/Xcode/unity-xcode xcodebuil…...

「架构」全链路异步模式

总结自尼恩的全链路异步:网关纯异步化网关层的特点:不需要访问业务数据库只做协议转换和流量转发特点是 IO 密集型,特别适合纯异步的架构,可以极大的节省资源。如何进行网关异步化?使用高性能的通信框架Netty&#xff…...

CleanMyMac4.20最新版新增功能及电脑清理垃圾使用教程

CleanMyMac4.20作为知名的Mac清理工具,仅需一键即可快速而安全地清理系统垃圾,释放磁盘空间,因此一直深受Mac用户的喜爱。在不断更新的版本中,CleanMyMac已经不仅仅满足于只做简单的Mac清理工具,而是为Mac用户提供更多…...

Vue2的tsx开发入门完全指南

本篇文章尽量不遗漏重要环节,本着真正分享的心态,不做标题党 下面进入正题: 由于现在vue的官方脚手架已经非常完善我们就不单独配置webpack了,节省大量的时间成本。 首先使用vue/cli创建一个vue模版项目(记得是vue/…...

GLSL shader学习系列1-Hello World

这是GLSL shader系列第一篇文章,本文学习目标: 安装编辑工具编写hello world程序 安装插件 我使用VSCode编写shader代码,在VSCode上有两个好用的插件需要先装一下: Shader languages support for VS Code glsl-canvas&#xf…...

Codeforces Round #851 (Div. 2)(A~D)

A. One and Two给出一个数组&#xff0c;该数组仅由1和2组成&#xff0c;问是否有最小的k使得k位置的前缀积和后缀积相等。思路&#xff1a;计算2个数的前缀和即可&#xff0c;遍历判断。AC Code&#xff1a;#include <bits/stdc.h>typedef long long ll; const int N 1…...

内存保护_1:Tricore芯片MPU模块介绍

上一篇 | 返回主目录 | 下一篇 内存保护_1&#xff1a;Tricore芯片MPU模块介绍1 何为MPU2 MPU相关的硬件子系统2.1 基于地址范围保护逻辑说明2.1.1 地址范围寄存器2.1.2 读、写、执行权限寄存器2.1.3 保护集设置位2.1.4 内存保护功能使能位2.1.5 核的内存保护范围获取说明2.1.6…...

Vue3 -- PDF展示、添加签名(带笔锋)、导出

文章目录笔锋签名方案一实现要点实现过程组件引用页面元素添加引用实现代码效果展示缺点方案二修改页面元素替换引用修改代码效果展示完整代码地址实现功能的时候采用了两个方案&#xff0c;主要是第一个方案最后的实现效果并不太理想&#xff0c;但实现起来比较简单&#xff0…...

行测-判断推理-图形推理-样式规律-属性规律-曲直性

左边的图全是由曲线构成的选C1 3 5全是由曲线构成的2 4 6全是由直线构成的第三行的图形有曲有直选A1 3 5有曲有直2 4 6全是直线选D图形有曲有直&#xff0c;排除B D外曲内直->内曲外直->外曲内直->内曲外直->外曲内直->内曲外直所以问号出的图形应该是内曲外直选…...

idea集成Alibaba Cloud Toolkit插件

idea集成Alibaba Cloud Toolkit插件 ​ 使用该插件主要是简化打包、上传、启动服务的相关操作。 ​ 很早之前的方式是使用开发工具&#xff08;eclipse,idea&#xff09;&#xff0c;使用maven命令完成项目打包&#xff08;这里指jar&#xff09;&#xff0c;然后通过shell工…...

Win11 文件夹打开慢或卡顿解决方案

问题 目前是 2023/2/27, 我的 Win11 系统点开一个文件夹要等待 2-3 秒才能加载出来, 使用体验极差。网上查阅大量资料, 有些人在系统更新后这个情况就消失了, 但是我这一直存在, 系统也是当前的最新版, 没有修复。 目前得出的结论是, 因为 Win11 的工具栏占用了过多的资源, 需…...

【PostgreSQL的idle in transaction连接状态】

在平时查询pg_stat_activity这个视图的时候&#xff0c;每一行包含了一个进程的相关信息&#xff0c;包含当前正在执行的SQL&#xff0c;或者会话的状态等等&#xff0c;state字段表示当前进程的状态。在PostgreSQL数据库里&#xff0c;其实代码里总共定义了7种BackendState&am…...

cityengine自定义纹理库资源

背景 cityengine虽然可以将shp生成带纹理的三维模型,但是纹理不一定满足我们的要求,这时候我们就想用我们自己制作的纹理 粗略了解规则文件 了解Building_From_Footprint.cga这个规则文件,具体文件位置默认在 “C:\Users[电脑用户名:如Administrator]\Documents\CityEng…...

taobao.top.secret.bill.detail( 服务商的商家解密账单详情查询 )

&#xffe5;免费必须用户授权 服务商的商家解密账单详情查询&#xff0c;仅对90天内的账单提供SLA保障。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient…...

2023软件测试金三银四常见的软件测试面试题-【抓包和网络协议篇】

八、抓包与网络协议 8.1 抓包工具怎么用 我原来的公司对于抓包这块&#xff0c;在App的测试用得比较多。我们会使用fiddler抓取数据检查结果&#xff0c;定位问题&#xff0c;测试安全&#xff0c;制造弱网环境; 如&#xff1a;抓取数据通过查看请求数据&#xff0c;请求行&…...

vue脚手架多页自动化生成实践

前言 在前端开发过程中&#xff0c;常常面对多种业务场景。到目前为止&#xff0c;前端对于不同场景的处理通常会采用不同的渲染方案来组合处理&#xff0c;常见的渲染方案包括&#xff1a;CSR(Client Side Rendering)、SSR(Server Side Rendering)、SSG(Static Site Generati…...

【SQL语句优化】

SQL语句优化是提高数据库查询性能的重要手段之一&#xff0c;下面是几种常见的SQL语句优化方法和案例&#xff1a; 减少查询的数据量 减少查询的数据量&#xff1a;使用 WHERE 子句和索引来限制检索行数&#xff0c;只检索需要的行&#xff0c;避免检索全部行数据。 例子&am…...

阿里P8:做测试10年我的一些经验分享,希望你们少走弯路

我是在2015年毕业的&#xff0c;当时是读的普通本科&#xff0c;不上不下的专业水平&#xff0c;毕业的时候&#xff0c;恰好遇到了金融危机。校园招聘里阴差阳错的巧合&#xff0c;让我走上了软件测试工程师的道路。 入职第一天&#xff0c;来了个高大上的讲师&#xff0c;记…...

栈在括号匹配中的应用(栈/链栈 纯C实现)

目录 1 问题背景 2 具体思路 3 代码实现 3.1 顺序栈实现 3.2 链栈实现 1 问题背景 栈的括号匹配问题是指在给定一个字符串&#xff08;包含多种括号&#xff09;&#xff0c;判断其中的括号是否能够正确匹配&#xff0c;即每个左括号是否有一个对应的右括号与之匹配&#x…...

C语言Switch语句用法

C switch 语句 一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case&#xff0c;且被测试的变量会对每个 switch case 进行检查。 语法 C 语言中 switch 语句的语法&#xff1a; switch(expression){case constant-expression :statement(s);break;…...

烟台手机网站建设费用/虞城seo代理地址

熟悉JAVA的车友对于“费罗切”Feroce一定不会陌生。自2015年上市以来&#xff0c;Feroce就凭借炫酷的涂装和亲民的价格坐稳了JAVA中高端公路车产品销量的王座。四年后的今天&#xff0c;JAVA Feroce 2开启全新篇章。渐变涂装、气动碟刹、车首隐藏式走线、UCI认证……相比旧款&a…...

郑州市人民政府/广州seo排名收费

在安卓模拟器上跑flutter 工程的时候&#xff0c;遇到了如下的报错 Cannot resolve symbol ‘Properties’ Cannot resolve symbol ‘GradleException’ 解决方法 打开file—> project structure ->modules -> android 工程 — modules SDK 选择一个sdk即可 然后还…...

清河县网站建设/打开百度一下

需要给表单的 class 添加值 $(#id).addClass(required); 给表单的 class 移除值 $(#id).removeClass(required);...

最低价网站建设/百度商务合作联系

http://www.crazyant.net/1193.html最近在搭一套Hive测试环境&#xff0c;使用mysql存储hive的元数据&#xff0c;然而当执行一个带有中文注释的建表文件时&#xff0c;出现了中文乱码的问题。实验过程中发现把整个数据库编码改成latin1或者Utf8都不行&#xff0c;只有把整个数…...

怎么做网站首页关键词/二级子域名ip地址查询

全球同服貌似最近讨论比较热烈&#xff0c;下边是个人的一些拙见。 先上AGA的加速原理图 AGA实际上就是提供一个任播地址&#xff0c;它实现了以下几点&#xff1a; 1. 无论从全球哪个点去ping&#xff0c;延迟都是非常低的。 例如&#xff1a; 从香港到AGA 从美西到AGA …...

给传销做网站/网络营销的好处和优势

在 Android 所有的控件和 Layout 都有着一个父类 View 。Anroid 通过继承的方式&#xff0c;对父类控件进行继承&#xff0c;由此来在父类基础上创造新的控件。View我们先看看 View 这个父类Paste_Image.png可以看到间接继承的有100多个子类&#xff0c;不得不说 View 这个爹很…...