用MATLAB求解微分方程

第一篇为 基础概念 ,第二篇为 R-K法的具体实现方法。

(一)常微分方程的MATLAB求解

概要:

  1. 常微分方程的MATLAB求解分为解析解、数值解
  2. 解析解(只有少数微分方程组有解析解):dsolve函数
  3. 数值解:solver函数,MATLAB内部自带了许多求解器(各种数值求解的方法,如 R-K法)
  4. 常用函数文件构造微分方程组
  5. 数值求解时:高阶微分方程化成常微分方程组

一、解析解

dsolve函数

  • y=dslove('eq1' , 'eq2' , ... , 'cond1' , 'cond2' , ... , 'v')
    • y——输出
    • eq1、eq2——微分方程
    • cond1、cond2——初值条件,省略时表示求通解
    • v——自变量,省略时默认为t
  • 微分方程中用 D 表示 自变量的导数
    • Dy—— y′
    • D2y—— y″
    • D3y—— y‴
  • 若找不到解析解,则返回其积分形式

省略自变量和指定自变量的例子:

>> dsolve('Dy = 2*x' , 'x')    %自变量x
ans =
x^2 + C1
 
>> dsolve('Dy = 2*x')    %默认自变量t
ans =
C2 + 2*t*x

解析解例题:

例1:求微分方程 dy/dx+2xy=xe^{-x^{2}}通解

>> y=dsolve('Dy+2*x*y = x*exp(-x^2)' , 'x')
y =
C3*exp(-x^2) + (x^2*exp(-x^2))/2

例2:求下面微分方程的特解

>> y=dsolve('D2y+4*Dy+29*y=0' , 'y(0)=0 ,Dy(0)=15' , 'x')
y =
3*sin(5*x)*exp(-2*x)

例3:求微分方程组的通解

>> [x , y , z]=dsolve('Dx =2*x-3*y+3*z' , 'Dy=4*x-5*y+3*z' , 'Dz=4*x-4*y+2*z' , 't')

x =
C6*exp(2*t) + C7*exp(-t)

y =
C6*exp(2*t) + C7*exp(-t) + C8*exp(-2*t)

z =
C6*exp(2*t) + C8*exp(-2*t)

二、数值解

只有很少一部分微分方程 (组) 能求出解析解;

大部分微分方程(组)只能利用 数值方法 近似求解

1、solver函数:

  • [T , Y] = solver(odefun , tspan , y0)
    • odefun——待求解的微分方程,可用matlab函数表示(m文件名)
    • tspan——求解区间
    • y0——初值条件(即自变量取最小值时(不一定为0)的函数值)
    • T——(向量)返回分割点的值,作自变量
    • Y——(向量)返回函数在分割点上的函数值
  • MATLAB在数值求解时 自动对求解区间进行分割
  • solver 为MATLAB的 ODE求解器(求解器中可以调用各种数值求解法:ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb)
求解器特点说明
ode454,5阶 R-K 法首选方法
ode232,3阶 R-K 法精度较低
ode113Adams法,高低精度均可到 10^-3 ~10^-6计算时间比ode45短
ode23t梯形算法(改进欧拉法)
ode15s多步法:精度中等ode45失效时,可用
ode23s单步法:低精度当精度较低时,计算时ode15s短
ode23tb梯形算法:低精度当精度较低时,计算时比ode15s短

——————————————————————————————————

2、odenfun(待求解的微分方程)的构建:

(1)odenfun为 显示常微分方程(类似于显函数,可分离变量)

  • 可以用 inline函数 定义:直接将函数表达式内嵌在命令行里
    变量名=inline('函数表达式' , '变量名1' , '变量名2' , ...)
  • 也可以在 函数文件 中定义,然后通过函数句柄调用

例1:一阶常微分非线性方程数值解,求解范围 [0,0.5]

>> fun=inline('-2*y+2*x^2+2*x','x','y');	%定义常微分方程
>> [x,y] = ode23(fun , [0,0.5] , 1)		%数值求解法使用ode23,自变量范围[0,0.5],步长默认,初值为1

x =
         0
    0.0400
    0.0900
    0.1400
    0.1900
    0.2400
    0.2900
    0.3400
    0.3900
    0.4400
    0.4900
    0.5000


y =
    1.0000
    0.9247
    0.8434
    0.7754
    0.7199
    0.6764
    0.6440
    0.6222
    0.6105
    0.6084
    0.6154
    0.6179
    
    
    
    
>> [x,y] = ode23(fun , [0:0.1:0.5] , 1)		%自定义步长为0.1
x =
         0
    0.1000
    0.2000
    0.3000
    0.4000
    0.5000

y =
    1.0000
    0.8287
    0.7103
    0.6388
    0.6093
    0.6179

——————————————————————————————————————

(2)求 高阶常微分方程,需将其化为 一阶常微分方程组 ,用函数文件定义

函数文件格式 function dy = vdp1000(x , y)————其中x是向量,y是

数值解例题:

例:求解:

解: 令 

则原式子化成:

vdp1000.m

function dy = vdp1000(t , y)	%编写函数vdp1000,输入的t是自变量(不可省略),在后面的数值计算时,将自变量范围赋给t;y是一个2列的行向量,因为我们后面赋初值是有2个,且输出值也有2个
dy = zeros(2,1);		%建立一个2行的列向量
dy(1) = y(2);			%按照上边的式子赋值
dy(2) = 1000*(1-y(1)^2)*y(2)-y(1);		%按照上边的式子赋值

命令窗口

>> [T , Y]=ode15s('vdp1000' , [0 , 3000] , [2 0]);		%调用方法,自变量t的范围[0 , 3000],将初值 2,0 赋给 y(1),y(2) ,T——n个元素的列向量,Y——n行2列的矩阵,Y(:1)是式子中的y1,Y(:2)是式子中的y2
>> plot(T , Y(:,1))		%显示Y(:1),即式子中的y1,即原始式子的因变量x

例2:手写 欧拉法 求常微分方程,x 范围 [0,0.5] , 步长 h=0.1

解:根据欧拉公式: yn+1=yn+hf(xn,yn) -------------------(注:这里的 f(x,y)=y′ )

代入 y′ , 可以得到 yn+1=0.9yn+0.1xn+0.1

Euler.m

function y=Euler()

x=[0:0.1:0.5];		%定义x
y=zeros(size(x));	%创建y
h=0.1;				%步长h=0.1
len = length(x);	%向量x的长度
y(1)=1;				%y初始化
for i=2:len			%从y2开始计算
    y(i)=0.9*y(i-1)+h*x(i-1) + 0.1;
end

%画图
figure
hold on 
grid on
plot(x , y ,'r')		%红色线为数值解
plot(x , x+exp(-x),'b')	%蓝色线为解析解
xlabel('x')
ylabel('y')
title('Euler')

命令窗口

%函数调用
>> y=Euler()
y =
    1.0000    1.0000    1.0100    1.0290    1.0561    1.0905

例3:追击问题

设位于坐标原点的甲舰向位于 x 轴上 A(1,0) 处的乙舰发射导弹,导弹头始终对准乙舰。

已知:乙舰以最大的速度 v0 沿平行于 y 轴的直线行驶,导弹的速度是 5v0 。

要求:模拟导弹的运行轨迹,并求击中点的坐标

解:

建立坐标系

设 导弹的飞行曲线方程 为 y=y(x)

在时刻 t 位于 P(x,y)

eql.m

function dy=eql(x,y)	%一阶微分方程组
dy=zeros(2,1);		%构造2行的列向量
dy(1)=y(2);				%dy(1)
dy(2)=1/5*sqrt(1+y(2)^2)/(1-x);		dy(2)

命令串口

>> [x , y]=ode15s('eql',[0:0.001:1],[0 0]);		%数值求解微分方程组
>> plot(x,y(:,1),'r.')					%画导弹轨迹,dy(1),即原式子的y
hold on
>> y2=0:0.001:2;								
>> plot(1,y2,'b*')					%画乙舰轨迹
axis( [0 , 1 , 0 , 0.25 ] )				%坐标轴范围
>> legend('导弹轨迹' , '乙舰轨迹')			%图例

(二)常微分方程的MATLAB求解——手写龙格-库塔法(R-K法)模板、一般步骤 

概要:

  • 龙格-库塔(R-K)法的写法:就是不断调用微分方程组,迭代计算出对于K1,K2,...,最后再叠加。需要注意的是高阶微分方程,其原函数的导数也是通过迭代计算得到的
  • 本人归纳了其套用 R-K 法的一般套路:3个函数、3个步骤——这也是MATLAB自带的求解方法的步骤
    • 三个函数:
      • Fun函数——用于存放一阶微分方程组
      • RK函数——用于使用几阶的R-K法求数值解,上边我只写了 4阶R-K法
      • 赋初值函数——只是单纯的写 x的范围,步长h,矩阵y的阶数,原函数的各个初值;以及调用 RK函数
    • 三个步骤:
      • 赋初值:写 x的范围,步长h,矩阵y的阶数,原函数的各个初值
      • 将高阶微分方程 拆分成 一阶微分方程组
      • 修改 Fun 函数:注意——向量dy的长度,和高阶微分方程的阶次有关
  • 本人也提供了 手写R-K法的模板,供大家使用参考

例一:一阶微分方程

使用MATLAB自带的 ode45函数 和 手写4阶R-K法 求解下列方程

1.ode45函数解法:

微分方程组

function dy=Fun(x,y)
dy=zeros(size(y));

dy(1) = sin(x)+y(1);					   %dy(1)表示以y的一阶导为f(x,y)

调用ode45函数

function y = MATLAB_RK()
[X ,Y]=ode45('Fun' , [0 :0.1 :20] , [1]);		% y的初值1

%画图
hold on
grid on
plot(X , Y(:,1))		%输出 Y的第一列,即原函数关于x的曲线
xlabel('x')
ylabel('y')

2.手写4阶R-K解法:

微分方程组

function dy=Fun(x,y)
dy=zeros(size(y));

dy(1) = sin(x)+y(1);					   %dy(1)表示以y的一阶导为f(x,y)

调用手写R-K函数

function y=PlotAll()
% 准备阶段
x=[0 : 0.1 :20];			% x——行向量
h=0.1;					% 步长
y=zeros(length(x) , 1);		        % y——矩阵,行数是x的元素个数,列数是几阶微分方程
					% 后面的1表示一阶微分方程,如果是2则表示二阶微分方程,以此类推
y(1,:)=[1];      			% y,第一行赋初值,几阶微分方程就要赋几个初值

% 函数调用
Y=FourRK(x,h,y);			% 调用4阶R-K法,输入参数x,h,y


%画图
hold on
grid on
plot(x , Y(:,1))		%输出 Y的第一列,即原函数关于x的曲线
xlabel('x')
ylabel('y')

4阶R-K函数

function y=FourRK(x,h,y)

len = length(x);	

for i=2:len		%循环:直到求完最后一个x取值

K1 = Fun(x(i-1),y(i-1,:));  		% K1

K2 = Fun(x(i-1)+1/2*h , y(i-1,:)+1/2*h.*K1);		% K2

K3 = Fun(x(i-1)+1/2*h , y(i-1,:)+1/2*h.*K2);		% K3

K4 = Fun(x(i-1)+h , y(i-1,:)+h.*K3);			% K4


y(i,:) = y(i-1,:)+h/6.*(K1 + 2*K2 + 2*K3 + K4);           % 更新y的第i行,y(i,1)是原函数的y,y(i,2)是原函数的一阶导,以此类推
														  % 因为这里是1阶微分方程,所以只有y(i,1),无y(i,2)
end

例二:二阶微分方程

使用MATLAB自带的 ode45函数 和 手写4阶R-K法 求解下列方程

解:将高阶微分方程 化成 一阶微分方程组

我们下面的 Fun函数 就是依据这个一阶微分方程组写的

1.ode45函数解法:

微分方程组

function dy=Fun(x,y)			  % y(1)表示原函数y,y(2)表示原函数y的一阶导
dy=zeros(size(y));
dy(1)=y(2);                               % dy(1)表示以y的一阶导为f(x,y)
dy(2)=-1/2*(y(1)+(y(1)*y(1)-1)*y(2));     % dy(2)表示以y的二阶导为f(x,y)

调用ode45函数

function y = MATLAB_RK()
[X ,Y]=ode45('Fun' , [0 :0.1 :20] , [0.25 , 0.0]);		% y的初值0.25 ,y一阶导的初值 0.0

%画图
hold on
grid on
plot(X , Y(:,1))		%输出 Y的第一列,即原函数关于x的曲线
xlabel('x')
ylabel('y')

2.手写4阶R-K解法:

微分方程组

function dy=Fun(x,y)
dy=zeros(size(y));
dy(1)=y(2);                               %dy(1)表示以y的一阶导为f(x,y)
dy(2)=-1/2*(y(1)+(y(1)*y(1)-1)*y(2));     %dy(2)表示以y的二阶导为f(x,y)

调用手写R-K函数

function y=PlotAll()
% 准备阶段
x=[0 : 0.1 :20];		% x——行向量
h=0.1;				% 步长
y=zeros(length(x) , 2);	        % y——矩阵,行数是x的元素个数,列数是几阶微分方程
				% 后面的1表示一阶微分方程,如果是2则表示二阶微分方程,以此类推。这里是二阶微分方程,所以是2
y(1,:)=[0.25 , 0.0];            % y,第一行赋初值,几阶微分方程就要赋几个初值。
				% y的初值0.25 ,y一阶导的初值 0.0

% 函数调用
Y=FourRK(x,h,y);		% 调用4阶R-K法,输入参数x,h,y

%画图
hold on
grid on
plot(x , Y(:,1))		%输出 Y的第一列,即原函数关于x的曲线
xlabel('x')
ylabel('y')

4阶R-K函数

function y=FourRK(x,h,y)

len = length(x);

for i=2:len			%循环:直到求完最后一个x取值

K1 = Fun(x(i-1),y(i-1,:));  		% K1


K2 = Fun(x(i-1)+1/2*h , y(i-1,:)+1/2*h.*K1);		% K2


K3 = Fun(x(i-1)+1/2*h , y(i-1,:)+1/2*h.*K2);		% K3


K4 = Fun(x(i-1)+h , y(i-1,:)+h.*K3);		% K4


y(i,:) = y(i-1,:)+h/6.*(K1 + 2*K2 + 2*K3 + K4);           % 更新y的第i行,y(i,1)是原函数的y,y(i,2)是原函数的一阶导,以此类推
														  % 因为这里是2阶微分方程,所以有y(i,1),有y(i,2)
end





%本质上,将高阶微分化为一阶微分方程组,然后按照各自当作f(x,y),分别进行迭代,最后更新

例二 手写R-K法 答疑:

一阶微分方程可能还好,二阶微分方程可能就没那么好理解了,为此对于例二我换了种 不通用但更直观 的写法,帮助大家理解

首先得理解为什么要将 二阶微分方程 拆成 一阶微分方程组 ,因为这样我们就可以根据 设 f(x,y)=y 的一阶导数,进行迭代求解。————如此题,我们拆成了2个一阶微分方程,所以就需要就同时进行2个R-K迭代

  • 这里我将 y 和 y' 拆开成2个行向量——————上边是 将2个合并到一个矩阵 y 中, y(1)为原函数y,y(2)为原函数y的一阶导
  • 并且我们需要分别定义函数,来迭代计算 y 和 y' ——————上边是 将2个合并到一个矩阵 y 中.一起计算了

Fun1————迭代求 y

function f1=Fun1(x,y,y1)

f1=y1;      %f2表示以y的一阶导为f(x,y)——f(x,y)=输入的y1

Fun2————迭代求 y‘

function f2=Fun2(x,y,y1)

f2=-1/2*(y+(y*y-1)*y1);     %f2表示以y的二阶导为f(x,y)

4阶R-K函数

function y=FourRK2()

x=[0 : 0.1 :20];
y=zeros(size(x));
y1=zeros(size(x));
h=0.1;
len = length(x);
y(1)=0.25;      % 原函数y初值
y1(1)=0.0;      % 原函数y的一阶导初值

for i=2:len
%Kmn 表示第n次迭代,以m次导数作为f(x,y)

K11 = Fun1(x(i-1),y(i-1),y1(i-1));  
K21 = Fun2(x(i-1),y(i-1),y1(i-1));

K12 = Fun1(x(i-1)+1/2*h , y(i-1)+1/2*h*K11 , y1(i-1)+1/2*h*K21);
K22 = Fun2(x(i-1)+1/2*h , y(i-1)+1/2*h*K11 , y1(i-1)+1/2*h*K21);

K13 = Fun1(x(i-1)+1/2*h , y(i-1)+1/2*h*K12 , y1(i-1)+1/2*h*K22);
K23 = Fun2(x(i-1)+1/2*h , y(i-1)+1/2*h*K12 , y1(i-1)+1/2*h*K22);

K14 = Fun1(x(i-1)+h , y(i-1)+h*K13 , y1(i-1)+h*K23);
K24 = Fun2(x(i-1)+h , y(i-1)+h*K13 , y1(i-1)+h*K23);

y(i) = y(i-1)+h/6*(K11 + 2*K12 + 2*K13 + K14);           % 更新下一个原函数y
y1(i) = y1(i-1)+h/6*(K21 + 2*K22 + 2*K23 + K24);         % 更新下一个原函数y的一阶导
end


%画图
hold on
grid on
plot(x , y)		
xlabel('x')
ylabel('y')


%本质上,将高阶微分化为一阶微分方程组,然后按照各自当作f(x,y),分别进行迭代,最后更新

总结:手写微分方程的 模板 和 一般步骤

一、原理讲解:

1.模板:

  • Fun函数——用于存放一阶微分方程组
  • RK函数——用于使用几阶的R-K法求数值解,上边我只写了 4阶R-K法
  • 赋初值函数——只是单纯的写 x的范围,步长h,矩阵y的阶数,原函数的各个初值;以及调用 RK函数

2.一般步骤:

其实这里 手写的R-K法 原理和步骤就是 MATLAB自带的求解R-K方法

  • 赋初值:写 x的范围,步长h,矩阵y的阶数,原函数的各个初值
  • 将高阶微分方程 拆分成 一阶微分方程组
  • 修改 Fun 函数:注意——向量dy的长度,和高阶微分方程的阶次有关

二、具体模板:

1.微分方程模板和准备函数模板

Fun函数————需要自己修改

function dy=Fun(x,y)
dy=zeros(size(y));
dy(1)=    ;                               %dy(1)表示以y的一阶导为f(x,y)
dy(2)=    ;     			  %dy(2)表示以y的二阶导为f(x,y)
dy(3)=    ;     			  %dy(3)表示以y的三阶导为f(x,y)
...

准备初值函数————需要自己修改值,需要修改的用【】括起了

function Y=PlotAll()
% 准备阶段
x=[0 : 0.1 :20];		% 【x——行向量】
h=0.1;				% 【步长】
y=zeros(length(x) , 2);	        % 【y——矩阵,行数是x的元素个数,列数是几阶微分方程】
				% 后面的1表示一阶微分方程,如果是2则表示二阶微分方程,以此类推。这里是二阶微分方程,所以是2
y(1,:)=[0.25 , 0.0];            % 【y,第一行赋初值,几阶微分方程就要赋几个初值。】
				% 【y的初值0.25 ,y一阶导的初值 0.0】

% 函数调用
Y=FourRK(x,h,y);		% 调用4阶R-K法,输入参数x,h,y

%画图
hold on
grid on
plot(x , Y(:,1))		%输出 Y的第一列,即原函数关于x的曲线
xlabel('x')
ylabel('y')

2.欧拉法、改进欧拉法、4阶R-K法模板

1阶R-K函数(欧拉法)

function y=OneRK(x,h,y)

len = length(x);

for i=2:len			%循环:直到求完最后一个x取值

K1 = Fun(x(i-1),y(i-1,:));

y(i,:)=y(i-1,:)+h.*K1;		% 更新y的第i行,y(i,1)是原函数的y,y(i,2)是原函数的一阶导,以此类推
	
end





%本质上,将高阶微分化为一阶微分方程组,然后按照各自当作f(x,y),分别进行迭代,最后更新

2阶R-K函数(改进欧拉法)

function y=TwoRK(x,h,y)

len = length(x);

for i=2:len			%循环:直到求完最后一个x取值

K1 = Fun(x(i-1) , y(i-1,:));
K2 = Fun(x(i-1)+h , y(i-1,:)+h.*K1);

y(i,:)=y(i-1,:)+h/2.*(K1+K2);		% 更新y的第i行,y(i,1)是原函数的y,y(i,2)是原函数的一阶导,以此类推
end





%本质上,将高阶微分化为一阶微分方程组,然后按照各自当作f(x,y),分别进行迭代,最后更新

4阶R-K函数

function y=FourRK(x,h,y)

len = length(x);

for i=2:len			%循环:直到求完最后一个x取值

K1 = Fun(x(i-1),y(i-1,:));  		% K1


K2 = Fun(x(i-1)+1/2*h , y(i-1,:)+1/2*h.*K1);		% K2


K3 = Fun(x(i-1)+1/2*h , y(i-1,:)+1/2*h.*K2);		% K3


K4 = Fun(x(i-1)+h , y(i-1,:)+h.*K3);		% K4


y(i,:) = y(i-1,:)+h/6.*(K1 + 2*K2 + 2*K3 + K4);           % 更新y的第i行,y(i,1)是原函数的y,y(i,2)是原函数的一阶导,以此类推
end



%本质上,将高阶微分化为一阶微分方程组,然后按照各自当作f(x,y),分别进行迭代,最后更新

补充:关于解为lambertw的微分方程数值解

例,求解下面的微分方程

可以发现这个初值会让 y′(0) 的值有无数个。如果我们写 dy=xy/(1−y) 就会出现分母为0的情况,一开始我就是这么定义 Fun 函数的,发现结果为 NaN。

正解:

  • 其实这个函数与 y′ 没有关系,不管 y′(0) 取多少,函数图像总是先为0,后面快速趋向正无穷
  • 因此我们就默认取 dy=0 (当然大家也可以取其他值),然后不将 dy 到一边,直接用原表达式计算

Fun

function dy=Fun(x,y)

dy=-200;
dy=(x*y)+dy*y;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实现消息队列(Kafka、ActiveMQ、RabbitMQ和RocketMQ)高可用

概述 单机没有高可用可言,高可用都对集群来说的 要保证消息队列系统(如Kafka、ActiveMQ、RabbitMQ和RocketMQ)的高可用性,可以采取以下一些通用的措施: 集群部署:将消息队列系统部署为集群,包…

蓝桥杯2017年第八届真题-分巧克力

目录 题目描述 输入格式 输出格式 样例输入 样例输出 原题链接 代码实现 题目描述 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见,小明需…

143:vue+leaflet 在25833投影坐标下,加载一小块图像叠层数据

第143个 点击查看专栏目录 本示例是介绍如何在vue+leaflet, 自定义CRS,形成新的投影,这里是25833投影,并使用 L.Proj.imageOverlay的方法在地图上加载载一小块图像叠层数据。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式…

MVO-CNN-BiLSTM多输入时序预测|多元宇宙优化算法-卷积-双向长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…

捕获SpringSecurity异常,进行统一返回

无法捕获SpringSecurity的认证和鉴权中发生异常的原因 使用ControllerAdvice的全局异常处理器无法捕获到SpringSecurity中的异常,原因如下: 在SpringSecurity中,如果认证或者授权的过程中出现了异常会被ExceptionTranslationFilter捕获到。…

HTTP协议(请求方式,响应方式,请求行、头、体,状态码)是热点面试题【详解】

目录 1. HTTP简介 1.介绍 2.浏览器抓包 3.特点 2. HTTP请求 1.HTTP请求的格式 2.HTTP请求方式 3.GET方式的请求示例 请求行 请求头 请求体 4.POST方式的请求示例 请求行 请求头 请求体 GET和POST的区别 5.HTTP响应 1.HTTP响应的格式 2 常见响应头 3 响应…

Java面试(4)之 Spring Bean生命周期过程

一, 整个加载的完整链路图 更详细的生命周期函数链路图(仅供参考) 二, Bean实例化的四种方式: 1, 无参构造器(默认且常用)6 2, 静态工厂方法方式(factory-method指定实例化的静态方法) 3, 实例工厂方法方式(factory-bean指定bean的name,factory-method指定实例化方法) 4, 实…

基于springboot+vue实现民宿管理系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现民宿管理系统演示 摘要 伴随着我国旅游业的快速发展,民宿已成为最受欢迎的住宿方式之一。民宿借助互联网和移动设备的发展,展现出强大的生命力和市场潜力。民宿主要通过各种平台如携程、去哪儿、淘宝等在网络上销售线下住宿服务&a…

rabbitmq总结

一、初次感知 https://www.cnblogs.com/zqyx/p/13170881.html 这篇文章非常好,讲了一些持久化的原理。 1. 第一次使用rabbitmq发信息 // 创建连接工厂ConnectionFactory connectionFactorynew ConnectionFactory();connectionFactory.setHost("192.168.88.1…

led护眼灯真的能护眼吗?五大热门护眼台灯测评,不容错过!

如今,儿童近视率不断攀升,其中用眼过度疲劳已成为近视的主要诱因。学习环境中光线的适宜与否,直接关乎孩子眼睛的疲劳程度。因此,为孩子营造一个舒适、健康的学习环境显得尤为关键。而一款优质的护眼台灯,正是预防近视…

什么是AI智能答题?

AI智能答题是指利用人工智能(AI)技术,尤其是自然语言处理(NLP)和机器学习(ML)算法,来理解、分析并回答用户提出的问题的过程。这种技术可以应用于各种场合,包括在线教育平…

从新能源汽车行业自动驾驶技术去看AI的发展未来趋势

自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以及自动驾驶汽车测试与验证技术等。 🐓 自动驾驶技术 这是AI在汽车行业中应用最广泛的领域之一。自动驾驶技术利用AI算法和传感器来感知环境、识别障碍物&#xff0c…

【LeetCode: 149. 直线上最多的点数 + 模拟遍历】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

前端javascript的BOM对象知识精讲

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属专栏:前端泛海 景天的主页:景天科技苑 文章目录 BOM对象1.window对象2.定时器3.screen对象4.location对象5.navigator…

搜索SEO是什么?

1.搜索SEO(search engine optimization搜索引擎优化):搜索引擎优化; ①搜索引擎:通过百度、谷歌、淘宝等搜索引擎去获取信息; ②优化:运营通过数据获取、数据分析、数据决策、数据正向反馈去…

Linux——文件标识符

目录 一、文件基础 二、常见的C语言文件接口 三、系统文件接口 四、理解语言与系统文件操作的关系 五、如何理解一切皆文件 六、文件标识符再理解 一、文件基础 一个空文件,也会占用磁盘空间,这是因为文件不仅仅有存放在里面的内容,还…

赋能汽车电动化与智能化,AUTO TECH 2024 华南展专业观众预登记开始啦!

赋能汽车电动化与智能化,AUTO TECH 2024 华南展专业观众预登记开始啦! 一年一度的 AUTO TECH 又将来临, 2024年5月15-17日与您相约广州保利世贸博览馆, 本次展会汇聚全球传统车企、新势力车企等最新的造车技术,零部件…

纯css实现太极八卦图

感觉最近好像闯鬼了&#xff0c;赶紧写个八卦图避避邪&#xff0c;开玩笑了&#xff0c;不废话&#xff0c;上菜&#xff0c;看效果上代码。 效果 代码&#xff0c;你们都是大佬&#xff0c;这里就不解释代码了 &#xff08;hover会转动喔&#xff09;。 <!DOCTYPE html&g…

知名比特币质押协议项目Babylon确认参加Hack.Summit()2024区块链开发者大会

Babylon项目已确认将派遣其项目代表出席2024年在香港数码港举办的Hack.Summit()2024区块链开发者大会。作为比特币生态的领军项目&#xff0c;Babylon积极参与全球区块链领域的交流与合作&#xff0c;此次出席大会将为其提供一个展示项目进展、交流技术与创新思路的重要平台。B…