1、本文实验基于冯康院士的《哈密尔顿系统的辛几何算法》开展,链接:https://pan.baidu.com/s/1GM0Px7SLWBWzh4sXmAdcwg
提取码:fmkt
2、虽然题目写的是基于FPGA的求解,但实际上采用的是VHLS来实现的,最近根本不想写verilog算法代码。本实验做的是简单谐振子运动方程组的运算,会给出matlab代码以及相应的FPGA仿真截图。
3、Hamiton方程
3.1.谐振子Hamiton方程的一般形式
初始条件为:
其精确解为:
3.2 采用《哈密尔顿系统的辛几何算法》第225页的一阶差分形式展开:
由论文《Hamilton系统下基于相位误差的精细辛算法》
因此,可得:
采用精细化算法可得:
4、RK算法、一阶辛精细化算法、辛RK算法、梯形法、解析法的matlab代码
%作者:Yang Zheng
%机构:东北电力大学
%内容:对Hamilton系统的求解。 设K=4,C=R=0,M=1,则为哈密尔顿方程。于是有:dq/dt=-p;dp/dt=-4q
% RK算法
tau=0.5;
time=1000;
q0=1;
q2=0.9801;p0=0;
p2=-0.3973;
q=zeros(ceil(time/tau),1);
p=q;
n=1;
q(n)=q0;
p(n)=p0;
A=[1 -tau/6;2*tau/3 1];
while(n
仿真结果:
可以看到,RK法已经完全失真。
可以看到,梯形法没有长时追踪能力。一阶辛精度很高,可以追踪;辛RK没有精细化算法,但仍然可以追踪,较精细化算法误差较大。
5、基于辛RK算法的谐振子方程组求解代码
%作者:Yang Zheng
%机构:东北电力大学
%内容:对Hamilton系统的求解。 设K=[k1,k2,...,kn],C=R=0,M=1,则为哈密尔顿方程组。K=w^2
function [q,p,q_ref,p_ref]=mul_diff_SRK(K)%% 辛RKN=length(K);w=sqrt(K);tau=0.5;time=1000;g=w*tau;J=zeros(2,2*N);for i = 1 :NJ(:,2*i-1:2*i)=1/(g(i)^4+12*g(i)^2+144)*[g(i)^4-60*g(i)^2+144 12*tau*(12-g(i)^2);-12*g(i)*w(i)*(12-g(i)^2) g(i)^4-60*g(i)^2+144];endn=1;q0=ones(1,N);p0=zeros(1,N);q=zeros(ceil(time/tau),N);p=q;q(n,:)=q0;p(n,:)=p0;while(n
6、辛RK的vivado仿真结果,需要代码请联系作者邮箱!