使用matlab求解常微分方程(组)问题

news2024/12/24 20:52:33

前言

介绍了常微分方程组的基本形式,并且介绍了matlab的数值和解析解法,以及给出了相应的案例。

  • 前言
  • 1. 常微分方程组介绍
    • 1.1 一阶常微分方程组
    • 1.2 高阶常微分方程组
      • 1.2.1 形式1:单个高阶微分方程
      • 1.2.2 形式2:多个高阶微分方程组
    • 1.3 常微分方程组求解方法
      • 1.3.1 数值解法
      • 1.3.2 解析求法
  • 2. 常微分方程组数值求解类型及案例
    • 2.1 一阶微分方程组形式求解实例
      • 2.1.1 编程方法1:微分方程组单独函数+主函数
      • 2.1.2 编程方法2:主函数(微分方程组匿名函数)
      • 2.1.3 option设置精度
      • 2.1.4 微分方程组参数由外部提供
    • 2.2 高阶微分方程组形式求解实例
      • 2.2.1 单个高阶微分方程
      • 2.2.2 多个高阶微分方程组
  • 3. 常微分方程组解析求解案例
    • 3.1 常系数线性微分方程求通解实例
    • 3.2 常系数线性微分方程求特解实例
  • 参考

1. 常微分方程组介绍

1.1 一阶常微分方程组

一阶常微分方程组为

x ˙ i = f i ( t , x ) , i = 1 , 2 , ⋯   , n \dot{x}_i=f_i(t,\mathbf{x}), i=1,2,\cdots,n x˙i=fi(t,x),i=1,2,,n

其中 x \mathbf{x} x是状态表变量 x i x_i xi组成的向量: x = [ x 1 , x 2 , ⋯   , x n ] T \mathbf{x}=[x_1,x_2,\cdots,x_n]^T x=[x1,x2,,xn]T,这称为系统的状态向量, n n n是系统的阶次, f i ( ⋅ ) f_i(\cdot) fi()是任意的非线性函数, t t t是时间变量。

1.2 高阶常微分方程组

matlab提供的微分方程数值解函数只能处理一阶微分方程组形式给出的方程,对于高阶常微分方程组我们需要变换为一阶微分方程组,微分方程组中我们需要选择一组状态变量,状态变量选择是任意的,所以这种变换不是唯一的,这里介绍微分方程组变换的一般方法。

1.2.1 形式1:单个高阶微分方程

单个高阶微分方程组写成:

y ( n ) ( t ) = f ( t , y ( t ) , y ˙ ( t ) , y ¨ ( t ) , ⋯   , y ( n − 1 ) ( t ) ) y^{(n)}(t)=f(t,y(t),\dot{y}(t),\ddot{y}(t),\cdots,y^{(n-1)}(t)) y(n)(t)=f(t,y(t),y˙(t),y¨(t),,y(n1)(t))

这里一个简单的状态变量的选择方法是令 x 1 ( t ) = y ( t ) , x 2 ( t ) = y ˙ ( t ) , ⋯   , x n ( t ) = y ( n − 1 ) ( t ) x_1(t)=y(t),x_2(t)=\dot{y}(t),\cdots,x_n(t)=y^{(n-1)}(t) x1(t)=y(t),x2(t)=y˙(t),,xn(t)=y(n1)(t),于是我们有

{ x ˙ i ( t ) = x i + 1 ( t ) , i = 1 , 2 , ⋯   , n − 1 x ˙ n ( t ) = f ( t , y ( t ) , y ˙ ( t ) , y ¨ ( t ) , ⋯   , y ( n − 1 ) ( t ) ) \left \{\begin{aligned} \dot{x}_i(t)&=x_{i+1}(t),i=1,2,\cdots,n-1\\ \dot{x}_n(t)&=f(t,y(t),\dot{y}(t),\ddot{y}(t),\cdots,y^{(n-1)}(t)) \end{aligned}\right. {x˙i(t)x˙n(t)=xi+1(t),i=1,2,,n1=f(t,y(t),y˙(t),y¨(t),,y(n1)(t))

1.2.2 形式2:多个高阶微分方程组

对于高阶微分方程组:
{ x ( m ) ( t ) = f ( t , y ( t ) , y ˙ ( t ) , y ¨ ( t ) , ⋯   , y ( n − 1 ) ( t ) ) y ( n ) ( t ) = g ( t , y ( t ) , y ˙ ( t ) , y ¨ ( t ) , ⋯   , y ( n − 1 ) ( t ) ) \left \{\begin{aligned} {x}^{(m)}(t)&=f(t,y(t),\dot{y}(t),\ddot{y}(t),\cdots,y^{(n-1)}(t))\\ y^{(n)}(t)&=g(t,y(t),\dot{y}(t),\ddot{y}(t),\cdots,y^{(n-1)}(t)) \end{aligned}\right. {x(m)(t)y(n)(t)=f(t,y(t),y˙(t),y¨(t),,y(n1)(t))=g(t,y(t),y˙(t),y¨(t),,y(n1)(t))

我们选择状态变量 x 1 ( t ) = x ( t ) , x 2 ( t ) = x ˙ ( t ) , ⋯   , x m ( t ) = x ( m − 1 ) ( t ) , x m + 1 ( t ) = y ( t ) , x m + 2 ( t ) = y ˙ ( t ) , ⋯   , x m + n ( t ) = y n − 1 ( t ) x_1(t)=x(t),x_2(t)=\dot{x}(t),\cdots,x_m(t)=x^{(m-1)}(t),x_{m+1}(t)=y(t),x_{m+2}(t)=\dot{y}(t),\cdots,x_{m+n}(t)=y^{n-1}(t) x1(t)=x(t),x2(t)=x˙(t),,xm(t)=x(m1)(t),xm+1(t)=y(t),xm+2(t)=y˙(t),,xm+n(t)=yn1(t),可以做下面的转化:

{ x ˙ i ( t ) = x i + 1 ( t ) , i = 1 , 2 , ⋯   , m − 1 x ˙ m ( t ) = f ( t , x 1 ( t ) , x 2 ( t ) , ⋯   , x n + m ( t ) ) x ˙ i ( t ) = x i + 1 ( t ) , i = m + 1 , m + 2 , ⋯   , m + n − 1 y ˙ n + m ( t ) = g ( t , x 1 ( t ) , x 2 ( t ) , ⋯   , x n + m ( t ) ) \left \{\begin{aligned} \dot{x}_i(t)&=x_{i+1}(t),i=1,2,\cdots,m-1\\ \dot{x}_m(t)&=f(t,x_1(t),x_2(t),\cdots,x_{n+m}(t))\\ \dot{x}_i(t)&=x_{i+1}(t),i=m+1,m+2,\cdots,m+n-1\\ \dot{y}_{n+m}(t)&=g(t,x_1(t),x_2(t),\cdots,x_{n+m}(t)) \end{aligned}\right. x˙i(t)x˙m(t)x˙i(t)y˙n+m(t)=xi+1(t),i=1,2,,m1=f(t,x1(t),x2(t),,xn+m(t))=xi+1(t),i=m+1,m+2,,m+n1=g(t,x1(t),x2(t),,xn+m(t))

1.3 常微分方程组求解方法

1.3.1 数值解法

一般的常微分方程组很难找到解析解,这时候数值解就派上用场了。求解常微分方程式有很多方法,如Euler法,Runge-Kutta方法,Adams线性多步法,Gear法,刚性问题有若干求解方法,而隐式求解和含代数约束的微分代数方程则需要进行相应的变换。

matlab给出了若干求解一阶常微分方程组的函数,如ode23()(二阶三阶Runge-Kutta算法)、ode45()(四阶五阶Runge-Kutta算法)、ode15()(变阶次刚性方程求解算法),其调用格式一致如下:

[t,x]=ode45(方程函数名,tspan,x0,选项,附加参数)

其中

t是仿真结果的自变量组成的向量,一般是变步长算法。
x是一个矩阵,阶数是n,是微分方程的阶次,行数是t的行数,每一行对应相应时间处状态变量向量的转置。
方程函数名是matlab编写的固定格式的m函数,描述一阶微分方程组。
tspan是数值解的初始和终止的时间信息。
x0是初始状态变量。
选项是求解微分方程组的一些控制参数。
附加参数在求解函数和方程描述函数之间传递。

1.3.2 解析求法

常系数线性微分方程存在解析解,而变系数的线性微分方程可解性取决特征方程的可解性,一般是不可解析求解的,而非线性的微分方程式不存在解析解得,我们可以用matlab的dsolve()函数求解线性常系数微分方程的解析解,首先要先用syms命令声明符号变量,然后用dsolve函数求解。

2. 常微分方程组数值求解类型及案例

2.1 一阶微分方程组形式求解实例

著名的Rossler化学反应方程组为:

{ x ˙ 1 ( t ) = − x 2 ( t ) − x 3 ( t ) x ˙ 2 ( t ) = x 1 ( t ) + a x 2 ( t ) x ˙ 3 ( t ) = b + [ x 1 ( t ) − c ] x 3 ( t ) \left \{\begin{aligned} \dot{x}_1(t)&=-x_2(t)-x_3(t)\\ \dot{x}_2(t)&=x_1(t)+ax_2(t)\\ \dot{x}_3(t)&=b+[x_1(t)-c]x_3(t) \end{aligned}\right. x˙1(t)x˙2(t)x˙3(t)=x2(t)x3(t)=x1(t)+ax2(t)=b+[x1(t)c]x3(t)

其中 a = b = 0.2 , c = 5.7 a=b=0.2, c=5.7 a=b=0.2,c=5.7,初值条件为 x 1 ( 0 ) = x 2 ( 0 ) = x 3 ( 0 ) = 0 x_1(0)=x_2(0)=x_3(0)=0 x1(0)=x2(0)=x3(0)=0.

2.1.1 编程方法1:微分方程组单独函数+主函数

  1. 上式已经是标准型。不需要再化。
  2. 定义微分方程组func
function dx = func(t,x) %不显含时间但是还是加上
a=0.2;
b=0.2;
c=5.7;
dx=[-x(2)-x(3);x(1)+a*x(2);b+(x(1)-c)*x(3)];
end
  1. 主函数main
x0=[0;0;0];
[t,y]=ode45(@func,[0,100],x0);
plot(t,y);

结果:
在这里插入图片描述

2.1.2 编程方法2:主函数(微分方程组匿名函数)

也可以写成匿名函数的形式,所有代码写在一个main函数里,也是一样的结果:

a=0.2;
b=0.2;
c=5.7;
f=@(t,x)[-x(2)-x(3);x(1)+a*x(2);b+(x(1)-c)*x(3)];
x0=[0;0;0];
[t,y]=ode45(f,[0,100],x0);
figure;
h=gcf;
set(h,'Color',	'#FFFFFF')
plot(t,y);
legend({'x1','x2','x3'});
xlabel('t');
ylabel('x');

在这里插入图片描述

2.1.3 option设置精度

matlab使用的是变步长算法,使用相对误差检验控制实际步长的选取,实际求解可以用opt=odeset设置,而相对误差检测量可以用RelTol指定,matlab默认的RelTol 1 0 − 3 10^{-3} 103,千分之一的误差,实际中我们可以设置更小的误差限看看是否结果一致,如果一致说明可以接受,否则就采取更小的误差限,我们接下来进行设置,在求解1的基础上我们修改main函数:

x0=[0;0;0];
opt=odeset;
opt.RelTol=1e-6;
[t,y]=ode45(@func,[0,100],x0,opt);
plot(t,y);

在这里插入图片描述

2.1.4 微分方程组参数由外部提供

我们如果想让 a , b , c a,b,c a,b,c这三个参数在外部给出,可以写一个新的func函数:

function dx = func(t,x,a,b,c) %不显含时间但是还是加上
dx=[-x(2)-x(3);x(1)+a*x(2);b+(x(1)-c)*x(3)];
end

然后就是写外部的main函数给出三个参数 a , b , c a,b,c a,b,c

x0=[0;0;0];
opt=odeset;
opt.RelTol=1e-6;
a=0.2;
b=0.2;
c=5.7;
[t,y]=ode45(@func,[0,100],x0,opt,a,b,c);
figure;
h=gcf;
set(h,'Color',	'#FFFFFF')
plot(t,y);
legend({'x1','x2','x3'});
xlabel('t');
ylabel('x');

在这里插入图片描述

2.2 高阶微分方程组形式求解实例

2.2.1 单个高阶微分方程

van der Pol方程
y ¨ ( t ) + 2 ( y 2 ( t ) − 1 ) y ˙ ( t ) + y ( t ) = 0 \ddot{y}(t)+2(y^2(t)-1)\dot{y}(t)+y(t)=0 y¨(t)+2(y2(t)1)y˙(t)+y(t)=0
初始条件为 y ( 0 ) = − 0.2 , y ˙ ( 0 ) = − 0.7 y(0)=-0.2,\dot{y}(0)=-0.7 y(0)=0.2,y˙(0)=0.7

按照前面所述选择 x 1 ( t ) = y ( t ) , x 2 ( t ) = y ˙ ( t ) x_1(t)=y(t),x_2(t)=\dot{y}(t) x1(t)=y(t),x2(t)=y˙(t),转换为下面的形式:
{ x ˙ 1 ( t ) = x 2 ( t ) x ˙ 2 ( t ) = − 2 ( x 1 2 − 1 ) x 2 − x 1 \left \{\begin{aligned} \dot{x}_1(t)&=x_2(t)\\ \dot{x}_{2}(t)&=-2(x_1^2-1)x_2-x_1 \end{aligned}\right. {x˙1(t)x˙2(t)=x2(t)=2(x121)x2x1

简单编写程序(这里采用匿名函数的写法):

main

f=@(t,x)[x(2);-2*(x(1)^2-1)*x(2)-x(1)];
x0=[-0.2;-0.7];
opt=odeset;
opt.RelTol=1e-6;
[t,y]=ode45(f,[0,20],x0,opt);
figure;
h=gcf;
set(h,'Color','#FFFFFF')
plot(t,y);
legend({'y','dy'});
xlabel('t');
ylabel('x');

在这里插入图片描述

2.2.2 多个高阶微分方程组

Apollo卫星运动轨迹 ( x , y ) (x,y) (x,y)满足方程组:
{ x ¨ ( t ) = 2 y ˙ ( t ) + x ( t ) − μ ∗ ( x ( t ) + μ ) / r 1 3 ( t ) − μ ( x ( t ) − μ ∗ ) / r 2 3 ( t ) y ¨ ( t ) = − 2 x ˙ ( t ) + y ( t ) − μ ∗ y ( t ) / r 1 3 ( t ) − μ y ( t ) / r 2 ( t ) 3 \left \{\begin{aligned} \ddot{x}(t)&=2\dot{y}(t)+x(t)-\mu^*(x(t)+\mu)/r_1^3(t)-\mu(x(t)-\mu^*)/r_2^3(t)\\ \ddot{y}(t)&=-2\dot{x}(t)+y(t)-\mu^*y(t)/r_1^3(t)-\mu y(t)/r_2(t)^3 \end{aligned}\right. {x¨(t)y¨(t)=2y˙(t)+x(t)μ(x(t)+μ)/r13(t)μ(x(t)μ)/r23(t)=2x˙(t)+y(t)μy(t)/r13(t)μy(t)/r2(t)3
其中 μ = 1 / 82.45 , μ ∗ = 1 − μ \mu=1/82.45,\mu^*=1-\mu μ=1/82.45,μ=1μ,
r 1 ( t ) = ( x ( t ) + μ ) 2 + y 2 ( t ) , r 2 ( t ) = ( x ( t ) − μ ∗ ) 2 + y 2 ( t ) r_1(t)=\sqrt{(x(t)+\mu)^2+y^2(t)},r_2(t)=\sqrt{(x(t)-\mu^*)^2+y^2(t)} r1(t)=(x(t)+μ)2+y2(t) ,r2(t)=(x(t)μ)2+y2(t)
初始条件为:
x ( 0 ) = 1.2 , x ˙ ( 0 ) = 0 , y ( 0 ) = 0 , y ˙ ( 0 ) = − 1.04935751 x(0)=1.2,\dot{x}(0)=0,y(0)=0,\dot{y}(0)=-1.04935751 x(0)=1.2,x˙(0)=0,y(0)=0,y˙(0)=1.04935751

按照前面所述选择 x 1 ( t ) = x ( t ) , x 2 ( t ) = x ˙ ( t ) , x 3 ( t ) = y ( t ) , x 4 ( t ) = y ˙ ( t ) x_1(t)=x(t),x_2(t)=\dot{x}(t),x_3(t)=y(t),x_4(t)=\dot{y}(t) x1(t)=x(t),x2(t)=x˙(t),x3(t)=y(t),x4(t)=y˙(t),转换为下面的形式:
{ x ˙ 1 ( t ) = x 2 ( t ) x ˙ 2 ( t ) = 2 x 4 ( t ) + x 1 ( t ) − μ ∗ ( x 1 ( t ) + μ ) / r 1 3 ( t ) − μ ( x 1 ( t ) − μ ∗ ) / r 2 3 ( t ) x ˙ 3 ( t ) = x 4 ( t ) x ˙ 4 ( t ) = − 2 x 2 ( t ) + x 3 ( t ) − μ ∗ x 3 ( t ) / r 1 3 ( t ) − μ x 3 ( t ) / r 2 ( t ) 3 \left\{ \begin{aligned} \dot{x}_1(t)&=x_2(t)\\ \dot{x}_2(t)&=2x_4(t)+x_1(t)-\mu^*(x_1(t)+\mu)/r_1^3(t)-\mu(x_1(t)-\mu^*)/r_2^3(t)\\ \dot{x}_{3}(t)&=x_4(t)\\ \dot{x}_4(t)&=-2x_2(t)+x_3(t)-\mu^*x_3(t)/r_1^3(t)-\mu x_3(t)/r_2(t)^3 \end{aligned}\right. x˙1(t)x˙2(t)x˙3(t)x˙4(t)=x2(t)=2x4(t)+x1(t)μ(x1(t)+μ)/r13(t)μ(x1(t)μ)/r23(t)=x4(t)=2x2(t)+x3(t)μx3(t)/r13(t)μx3(t)/r2(t)3
其中:
r 1 ( t ) = ( x 1 ( t ) + μ ) 2 + x 3 2 ( t ) , r 2 ( t ) = ( x 1 ( t ) − μ ∗ ) 2 + x 3 2 ( t ) r_1(t)=\sqrt{(x_1(t)+\mu)^2+x_3^2(t)},r_2(t)=\sqrt{(x_1(t)-\mu^*)^2+x_3^2(t)} r1(t)=(x1(t)+μ)2+x32(t) ,r2(t)=(x1(t)μ)2+x32(t)

微分方程组比较复杂,我们这里使用单独的函数func来写微分方程组:

func

function dx = func(t,x)
mu=1/82.45;mu1=1-mu;
r1=sqrt((x(1)+mu)^2+x(3)^2);
r2=sqrt((x(1)-mu1)^2+x(3)^2);
dx=[x(2);...
    2*x(4)+x(1)-mu1*(x(1)+mu)/r1^3-mu*(x(1)-mu1)/r2^3;...
    x(4);...
    -2*x(2)+x(3)-mu1*x(3)/r1^3-mu*x(3)/r2^3];
end

另外修改main函数为

main

x0=[1.2;0;0;-1.04935751];
opt=odeset;
opt.RelTol=1e-6;
[t,y]=ode45(@func,[0,100],x0,opt);
figure;
h=gcf;
set(h,'Color',	'#FFFFFF')
plot(y(:,1),y(:,3));
xlabel('x');
ylabel('y');

在这里插入图片描述

3. 常微分方程组解析求解案例

3.1 常系数线性微分方程求通解实例

d 4 y ( t ) d t 4 + 10 d 3 y ( t ) d t 3 + 35 d 2 y ( t ) d t 2 + 50 d y ( t ) d t + 24 y ( t ) = e − 6 t cos ⁡ 5 t + 7 e − 8 t + 9 \frac{\mathrm{d}^4y(t)}{\mathrm{d}t^4}+10\frac{\mathrm{d}^3y(t)}{\mathrm{d}t^3}+35\frac{\mathrm{d}^2y(t)}{\mathrm{d}t^2}+50\frac{\mathrm{d}y(t)}{\mathrm{d}t} +24y(t)=\mathrm{e}^{-6t}\cos5t+7\mathrm{e}^{-8t}+9 dt4d4y(t)+10dt3d3y(t)+35dt2d2y(t)+50dtdy(t)+24y(t)=e6tcos5t+7e8t+9

如果不给定初值,我们求的是一个通解,编写matlab代码如下

syms t y(t)
Y=dsolve(diff(y,4)+10*diff(y,3)+35*diff(y,2)+50*diff(y)+24*y==cos(5*t)*exp(-6*t)+7*exp(-8*t)+9);
pretty(simplify(Y))

在这里插入图片描述

3.2 常系数线性微分方程求特解实例

d 4 y ( t ) d t 4 + 10 d 3 y ( t ) d t 3 + 35 d 2 y ( t ) d t 2 + 50 d y ( t ) d t + 24 y ( t ) = e − 6 t cos ⁡ 5 t + 7 e − 8 t + 9 \frac{\mathrm{d}^4y(t)}{\mathrm{d}t^4}+10\frac{\mathrm{d}^3y(t)}{\mathrm{d}t^3}+35\frac{\mathrm{d}^2y(t)}{\mathrm{d}t^2}+50\frac{\mathrm{d}y(t)}{\mathrm{d}t} +24y(t)=\mathrm{e}^{-6t}\cos5t+7\mathrm{e}^{-8t}+9 dt4d4y(t)+10dt3d3y(t)+35dt2d2y(t)+50dtdy(t)+24y(t)=e6tcos5t+7e8t+9 初始条件为 y ( 0 ) = 5 , y ˙ ( 0 ) = 0 , y ¨ ( 0 ) = 0 , y ( 3 ) ( 0 ) = 0 y(0)=5,\dot{y}(0)=0,\ddot{y}(0)=0,y^{(3)}(0)=0 y(0)=5,y˙(0)=0,y¨(0)=0,y(3)(0)=0

如果给定初值我们可以确定唯一解,我们加上初始条件,编写matlab代码如下

syms t y(t)
y1=diff(y);
y2=diff(y1);
y3=diff(y2);
Y=dsolve(diff(y,4)+10*y3+35*y2+50*y1+24*y==cos(5*t)*exp(-6*t)+7*exp(-8*t)+9,y(0)==5,y1(0)==0,y2(0)==0,y3(0)==0);
pretty(simplify(Y))

在这里插入图片描述

参考

  1. 薛定宇《控制系统仿真与计算机辅助设计》P48-P51

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

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

相关文章

XILINX 7系列FPGA普通IO与差分IO

🏡《Xilinx FPGA开发宝典》 目录 1,概述2,IO说明3,总结 1,概述 本文介绍XILINX 7系列FPGA普通IO和差分IO的识别方法与注意事项。 2,IO说明 7系列FPGA的绝大多数IO均支持差分,但是有些IO是不支持…

C语言:求Sn=a+aa+aaa+aaaa+aaaaa+……的前n项之和

题目: 求Snaaaaaaaaaaaaaaa……的前n项之和,其中a是一个数字, 例如:222222222222222…… 思路: 总体思路: (一). 生成变量: int a 0; -- 题目中的a int n 0; -- a 的前…

个人git笔记,持续学习并补充填写

git --version //查看git版本信息 sudo yum remove git -y //卸载gitsudo yum install git -y//安装git 该文章仅仅是为了方便个人日常观看,有些地方没有做详细介绍 git init 创建本地仓库(最好先创建一个目录,在该目录下输入指令创建git仓…

DETR系列:RT-DETR 论文解析

论文:《DETRs Beat YOLOs on Real-time Object Detection》 2023.4 DETRs Beat YOLOs on Real-time Object Detection:https://arxiv.org/pdf/2304.08069.pdf 源码地址:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/conf…

MybatisPlus 用法

MybatisPlus 用法--wrapper的用法 MybatisPlus 原理常见wrapper的用法eq等值查询 与 ne不等值查询gt 大于 与 ge 大于等于、lt小于与le小于等于between 在某个区间内 与 notBetween不在某个区间内in在范围内的值 与 notIn不在范围内的值inSql、notInSql(几乎用不到)orderBy、o…

Android——基本控件(下)(十五)

1. 对话框:Dialog 1.1 知识点 (1)掌握对话框的主要作用; (2)可以使用AlertDialog和AlertDialog.Builder进行对话框的建立; (3)可以通过LayoutInflater进行定制对话框…

前端JavaScript入门-day02

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一.运算符 1.1 赋值运算符 1.2 一元运算符 自增运算符的用法: 1.3 比较运算符 比较运算符…

超越竞争,使用Framework技术赢得市场份额

Framework为什么这么重要? 在Android开发中,Framework(框架)是非常重要的,因为它提供了一套已经实现的软件组件和工具,以支持开发者构建应用程序。以下是Framework在Android开发中的重要性: 提…

云服务器到期,站点迁移,Nginx配置SSL以备后续只需!

导言 笔者小站:秋码分享 在这三年中,其实远不止这三年,可追溯到2014年前后,个人站点便逐渐走向末路。但却总有新的个人博客网站,在这片互联网海洋漂浮着,或许是为了心中的梦想,亦或是记录着工作…

Kafka 从安装到应用

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

MySQL实战解析底层---幻读是什么,幻读有什么问题?

目录 前言 幻读是什么? 幻读有什么问题? 如何解决幻读? 前言 为了便于说明问题,这一篇文章,就先使用一个小一点儿的表建表和初始化语句如下: 这个表除了主键id外,还有一个索引c&#xff0c…

web值控制标签的显示与隐藏、document、getElementById、style、css、hidden、display、visibility

文章目录 方式一方式二方式三visibility小结 方式一 使用HTML的hidden属性,隐藏后不占用原来的位置 hidden属性是一个Boolean类型的值,如果想要隐藏元素,就将值设置为true,否则就将值设置为false 选取id为test的元素 let test do…

“事后达尔文”—— 游戏业务效果评估方法实践

作者:vivo 互联网数据分析团队 Luo Yandong、Zhang Lingchao 本文介绍了互联网业务数据效果评估的几种常见问题及方法,并基于分层抽样的逻辑优化出一套可应用于解决用户不均匀的“事后达尔文"分析法,可适用于无法AB测试或人群不均匀的AB…

VCO的设计

理想振荡器只有电感和电容,会一直振荡下去。但是实际的振荡器存在一定的寄生电阻并联在RC两端,会使振幅变小。因此需要RC旁边再并联一个负电阻以此来抵消寄生电阻的影响。一般会选择负阻提供的能量为寄生电阻能量的的2-3倍。如果负阻跟RC并联&#xff0c…

剖析float相加产生精度损失的原因

float相加产生精度损失的原因 一、什么是float类型及其特点1.1、float类型的定义和使用方法1.2、float类型的特点,包括精度限制 二、为什么会出现float相加精度损失2.1、计算机二进制存储浮点数的方式2.2、浮点数运算中的舍入误差2.3、累加多个小数时的误差累积 三、…

kali中Metasploit基本使用方法

1.kali启动postgresql并设置开机自启动 systemctl start postgresql.servicesystemctl enable postgresql.service2.kali启动Metasploit 方式一:应用程序 -> 漏洞利用工具集 -> Metasploit framework 方式二: msfconsole 3. Metasploit常用命令 connect 命令 连接远程主…

Qt信号槽之connect介绍(上)

关于Qt信号槽中connect与disconnect介绍 首先我们要知道,如果想要使用Qt中的信号槽机制, 那么必须继承QObject类,因为QObject类中包含了信号槽的一系列操作,今天我们来讲解的是信号与槽怎么建立连接以及断开连接。 一、connect …

在windows server上用Mosquitto软件创建MQTT服务器

今天下午捣鼓了半天,在云服务器上面创建了个MQTT服务器,然后用MQTTX软件进行了测试。过程记录如下: 1、下载mosquitto软件,链接如下图: 2、下载完成后安装,一直点下一步下一步就好了。 3、在安装路径下&am…

快速捡回使用workbench控制mysql创建数据库的基本步凑

首先如果,不想要在原来已经建好的数据库下建立数据表,可以新建数据库。 具体操作步凑如下: 选择后如下所示: 有现成的创建代码的话,就直接复制执行现成的创建代码即可,如果没有现成的创建代码的话&#xff…

Java设计模式之单例模式-【懒汉式与饿汉式】

1、单例,模式 单例模式属于创建型模式的一种,应用于保证一个类仅有一个实例的场景下,并且提供了一个访问它的全局方法 单例模式的特点:从系统启动到终止,整个过程只会产生一个实例。单例模式常用写法:懒汉…