预测机算法V0.24

 

     这个版本的预测算法是基于这样一个猜想: 未来的数据都是混沌的,过去的数据都是有序的,要把未来的数据转换为过去的数   据,需要经过混沌到次序的转换过程,混沌-火---次序-水  的转换过程   实际上可能就是预测算法中的一个核心过程

 

     结合预测算法V0.22中的设计模式,我们可以总结出一个数学模型-  时间-空间的3次方转换,再结合质量-能量(混沌-次序)的2次方 逆向转换过程,就可以产生一组预测数据,为什么要有逆向2次方的转换过程呢?这个思路还不是很明确。。。。。

 

     时空立方次,质能平方反比次,必须有一个时间-到-空间的跃迁过程,然后再配合一个混沌-次序的逆向产生过程,才能够把未来的数据反射到现在的时空来。。。。。这就是预测机V0.24的设计,比V0.22多了一个混沌-次序的转换过程,平方反比律

``` %% 智能悬臂梁双压电驱动振动控制仿真 % 作者:智能控制助手 % 参数来源:Zhang和Li论文(2020) Table 1 % 控制方法:基于解耦的PID控制 clc; clear; close all; %% 1. 系统参数初始化 % 悬臂梁参数 L = 0.477; % 梁长度(m) width = 0.0305; % 梁宽度(m) thickness = 0.7e-3; % 梁厚度(m) E = 71e9; % 杨氏模量(Pa) rho = 2770; % 密度(kg/m^3) I = width*thickness^3/12; % 截面惯性矩(m^4) % 压电片参数(B:根部,C:中部) % 压电片B参数 L_p1 = 0.024; % 压电片长度(m) pos_p1 = [0.024, 0.052]; % 安装位置(距固定端) % 压电片C参数 L_p2 = 0.024; pos_p2 = [0.212, 0.24]; % 压电材料参数 d31 = -1.7e-10; % 压电常数(C/N) Ep = 15.857e9; % 压电片杨氏模量(Pa) tp = 0.3e-3; % 压电片厚度(m) % 模态参数(前两阶) beta = [1.875/L, 4.694/L]; % 模态波数 omega = beta.^2*sqrt(E*I/(rho*width*thickness)); % 固有频率(rad/s) zeta = [0.01; 0.01]; % 阻尼比 % 传感器位置 x0 = 0.146; % 位移测量位置(距固定端) %% 2. 动力学建模(模态叠加法) % 状态空间方程:M*q'' + C*q' + K*q = F*u n_modes = 2; % 考虑前两阶模态 % 质量矩阵 M = diag([1, 1]); % 阻尼矩阵 C = diag(2*zeta.*omega); % 刚度矩阵 K = diag(omega.^2); % 输入矩阵B(压电驱动力) phi_prime = @(x) beta.*(cosh(beta*x) + cos(beta*x) - ... (sinh(beta*L)-sin(beta*L))/(cosh(beta*L)+cos(beta*L)).*(sinh(beta*x)+sin(beta*x))); B = zeros(n_modes,2); for i = 1:2 B(1,i) = (Ep*d31*width*tp/(2*tp)) * (phi_prime(pos_p1(2)) - phi_prime(pos_p1(1))); B(2,i) = (Ep*d31*width*tp/(2*tp)) * (phi_prime(pos_p2(2)) - phi_prime(pos_p2(1))); end % 状态空间方程 A_sys = [zeros(n_modes) eye(n_modes); -K -C]; B_sys = [zeros(n_modes,2); B]; C_sys = [phi_prime(x0), 0, 0, 0]; % 位移输出 sys = ss(A_sys, B_sys, C_sys, 0); %% 3. 解耦控制设计 % 解耦矩阵D = inv(G(0)) G0 = B; % 稳态增益矩阵 D = inv(G0); % 解耦矩阵 % PID参数初始化 Kp = [50, 0; 0, 50]; % 比例增益 Ki = [30, 0; 0, 30]; % 积分增益 Kd = [5, 0; 0, 5]; % 微分增益 % 创建PID控制器对象 pid1 = pid(Kp(1,1), Ki(1,1), Kd(1,1)); pid2 = pid(Kp(2,2), Ki(2,2), Kd(2,2)); %% 4. 仿真参数设置 dt = 0.001; % 间步长 t = 0:dt:5; % 仿真间 N = length(t); % 初始条件(自由端施加5mm初始位移) q0 = [0.005; 0.005; 0; 0]; % 预分配存储 y = zeros(N,1); u = zeros(N,2); error = zeros(N,2); %% 5. 主仿真循环 for k = 1:N-1 % 1. 系统响应 [y(k), ~, x] = lsim(sys, u(1:k,:), t(1:k), q0); % 2. 计算误差(目标位移为0) current_error = [0 - y(k); 0 - y(k)]; % 3. 解耦误差 decoupled_error = D * current_error; % 4. PID控制(带饱和限制) u(k+1,1) = pid1(decoupled_error(1), dt); u(k+1,2) = pid2(decoupled_error(2), dt); % 电压限幅±150V u(k+1,:) = max(min(u(k+1,:), 150), -150); % 保存误差 error(k+1,:) = current_error'; end %% 6. 结果可视化 figure('Color','white','Position',[100 100 1200 500]) % 位移对比 subplot(1,2,1) plot(t, y*1e3, 'LineWidth',1.5) title('自由端位移响应') xlabel('(s)') ylabel('位移 (mm)') grid on legend('控制后位移') % 控制电压 subplot(1,2,2) plot(t, u(:,1), 'b', t, u(:,2), 'r', 'LineWidth',1.5) title('控制电压') xlabel('(s)') ylabel('电压 (V)') ylim([-160 160]) grid on legend('压电片B','压电片C') %% 辅助函数:PID控制器实现 function u = pid(Kp, Ki, Kd, error, dt) persistent integral prev_error if isempty(integral) integral = 0; prev_error = 0; end integral = integral + error*dt; derivative = (error - prev_error)/dt; u = Kp*error + Ki*integral + Kd*derivative; prev_error = error; end```这代码里面有很多错误帮我找出来并且修正好错误
最新发布
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值