matlab程序多跨梁用wolf方法求最大lyapunov指数
时间: 2023-07-27 19:06:10 浏览: 155
以下是使用Matlab编写的求解多跨梁最大Lyapunov指数的程序:
```matlab
%% 建立多跨铰接梁的数学模型
L = 1; % 梁的长度
n = 5; % 跨数
EI = 20; % 弯曲刚度
m = 1; % 单位长度的质量
g = 9.81; % 重力加速度
x = linspace(0,L,n+1); % 梁上的节点位置
h = x(2) - x(1); % 每一跨的长度
A = zeros(2*n,2*n); % 系数矩阵
B = zeros(2*n,1); % 常数向量
for i=1:n
A(2*i-1,2*i-1) = 12*EI/h^3;
A(2*i-1,2*i) = 6*EI/h^2;
A(2*i-1,2*i+1) = -12*EI/h^3;
A(2*i-1,2*i+2) = 6*EI/h^2;
A(2*i,2*i-1) = -6*EI/h^2;
A(2*i,2*i) = 4*EI/h;
A(2*i,2*i+1) = -6*EI/h^2;
A(2*i,2*i+2) = 2*EI/h;
end
for i=1:n-1
A(2*n-1+i,2*i-1) = 6*EI/h^2;
A(2*n-1+i,2*i) = 2*EI/h;
A(2*n-1+i,2*i+1) = -6*EI/h^2;
A(2*n-1+i,2*i+2) = 4*EI/h;
end
for i=1:n
B(2*i-1) = m*g*h/2;
B(2*i) = 0;
end
%% 使用ode45函数求解传递矩阵
tspan = [0 10]; % 时间范围
y0 = eye(2*n); % 初始状态矩阵
[t,y] = ode45(@(t,y) A*y + B, tspan, y0); % 求解传递矩阵
%% 使用Wolf重构算法求解最大Lyapunov指数
tau = 1; % 延迟时间
m = 3; % 嵌入维数
k = 10; % 最近邻个数
X = zeros(length(t)-m*tau,m); % 延迟向量矩阵
for i=1:length(t)-m*tau
X(i,:) = y(i+m*tau,:);
end
D = pdist(X); % 计算每个向量与其他向量之间的距离
[Dsort,Isort] = sort(D); % 按照距离从小到大排序
knn = Isort(2:k+1); % 选择前k个最近邻的向量
d = Dsort(knn); % 计算最近邻之间的距离
lam = sum(log(d./Dsort(k+1)))/(k*tau); % 计算最大Lyapunov指数的估计值
disp(['The estimated maximum Lyapunov exponent is ', num2str(lam)])
```
在上述程序中,使用了Matlab的ode45函数求解传递矩阵的微分方程,得到传递矩阵随时间的变化情况。然后,利用Wolf重构算法对传递矩阵的时间序列进行重构,得到延迟向量矩阵X。接着,对矩阵X进行排序,计算每个向量与其他向量之间的距离,并按照距离从小到大排序。然后,选取前k个最近邻的向量,并计算其距离,得到最大Lyapunov指数的估计值。最后,程序输出最大Lyapunov指数的估计值。
阅读全文