本轮均轮背后的傅里叶分解原理(matlab演示)

  • 本轮均轮背后的傅里叶分解原理(matlab演示)
    • 1.简介
    • 2.用到的数学工具(傅里叶分解)
    • 3.绘图演示
      • 3.1 椭圆
      • 3.2 三角形
      • 3.3 任意图形
    • 4.matlab代码

本轮均轮背后的傅里叶分解原理(matlab演示)

1.简介

均轮、本轮是希腊天文学家希帕克斯提出的以地球为中心的学说,认为天体沿着本轮做匀速圆周运动,这些本轮的中心又沿着各自的更大的均轮做以地球为中心的匀速圆周运动。

在长达十四个世纪的古代时期,占据主导地位的天文学理论,是托勒密的地心说。由于地心说中并不是所有天体都按照围绕地球,做圆形选转的运动方式来运动,所以作为修正,提出来本轮和均轮的概念。

比如上图中的行星视运动中“顺-留-逆-留-顺”运行轨迹,是本轮运动和均轮运动两者综合的结果。

这个方法可以十分精准的预测行星的位置,但是代价便是越来越多的新的本轮均轮被加原来均轮上,形成大圆套小圆的结构。甚至有的天体用到了12个圆来进行模拟。

在当然根据现代的观测结果,人们发现将坐标系放在太阳上可以有效的简化太阳系内行星的运动轨迹,或者说把所有因太阳的引力而绕太阳为焦点的所有行星称为太阳系的行星。此外根据坐标变换原则,人们还可以构建各种奇葩新颖的坐标系,但这不是本文的讨论重点。

本文利用傅里叶分解的原理,证明所有的平面运动都可以用本轮-均轮系统表示,而且圆越多精度越高。而且也存在有限个圆就能完全拟合的曲线。

2.用到的数学工具(傅里叶分解)

这里用到了傅里叶分解,由于研究的是二维曲线,所以需要进行x和y的两次分解。然而这里我直接用复数形式表示,这样求解一次就可以直接出现xy的方程。而且附带的好处是一次傅里叶分解如果出现角速度大小相等方向相反的时候,会自动合并,而复数域分解就会自动分成正负两项,提供了后续绘图的便利。

复数域的傅里叶分解公式:
f ( x ) = ∑ n = − ∞ ∞ c n ⋅ e x p i n π x l f(x) = \sum_{n=-\infty }^{\infty }c_{n}\cdot exp\frac{in\pi x}{l} f(x)=n=−∞∑∞​cn​⋅explinπx​
c n = 1 2 l ∫ l − l f ( t ) ⋅ e x p − i n π t l d t c_{n} =\frac{1}{2l}\int_{l}^{-l}f(t)\cdot exp\frac{-in\pi t}{l}dt cn​=2l1​∫l−l​f(t)⋅expl−inπt​dt

3.绘图演示

3.1 椭圆

对于长轴Lx=2,短轴Ly=1的椭圆,可以傅里叶分解后出现2项,且其余高阶项均为0.也就是说,椭圆用2个圆就可以完全精确的拟合出来。
圆图:

棍图:

3.2 三角形

三角形由于存在尖角,所以不能用有限多的圆形去精确拟合,但是可以增加圆形来逐渐接近。

例:2个圆形的拟合

例:4个圆形的拟合

随着圆的拟合越多,可以看到拟合越来越接近。而且在本例题的实际操作中发现偶数个圆比奇数个圆拟合效果更好。

3.3 任意图形

这里为了突出本轮均轮系统的强悍性,任意的图形都可以进行分解。

其中要求为x区间是沿y轴对称的。f虽然为x的参数,但是不一定要写出关系式,只要是一 一对应的就行。而且f最好是收尾封闭的,虽然不封闭也能求解出结果,但效果不好。f平面图形曲率光滑,拟合效果一般会更好。f图形曲线可以出现交叉。
f的起点最好取在x轴上,f的型心最好在坐标轴原点上,在计算过程中可以减少某些项,但是由于这是编程实现的,所以这个要求也不是必要的。

我在这里随便画了一个二维曲线,傅里叶分解如下:

下图:实际s=5的理想曲线(红色)与拟合曲线(蓝色)↓

下图:圆图↓

下图:棍图↓

4.matlab代码

clear%要求,1给出精度dx
%2对称单增参数x
%3复数域函数f,收尾相接,不一定与x有特别的关系
%4给出拟合圆的阶数sdx=1e-3;
%例1,三角形
% x1=-3/2:dx:-1/2-dx;
% x2=-1/2:dx:1/2-dx;
% x3=1/2:dx:3/2;
% x=[x1,x2,x3];
% f1=(-5/2-3*x1)+1i*(3*sqrt(3)/2+sqrt(3)*x1);
% f2=(-1)+1i*(-2*sqrt(3)*x2);
% f3=(-5/2+3*x3)+1i*(-3*sqrt(3)/2+sqrt(3)*x3);
% f=[f1,f2,f3];% %例2,椭圆
% x=0:dx:2*pi;
% f=2*cos(x)+1i*sin(x);%例3,多边形
Nx=1/dx;
f=[linspace(0,5,Nx)+1i*linspace(0,0,Nx),...linspace(5,5,Nx)+1i*linspace(0,1,Nx),...linspace(5,3,Nx)+1i*linspace(1,1,Nx),...linspace(3,3,Nx)+1i*linspace(1,5,Nx),...linspace(3,0,Nx)+1i*linspace(5,2,Nx),...linspace(0,2,Nx)+1i*linspace(2,2,Nx),...linspace(2,2,Nx)+1i*linspace(2,1,Nx),...linspace(2,0,Nx)+1i*linspace(1,1,Nx),...linspace(0,0,Nx)+1i*linspace(1,0,Nx)];
x=0:length(f)-1;
x=x/max(x)*5;
x=x-max(x)/2;L=(x(end)-x(1))/2;
s=5;%拟合圆的阶数
N=[-s:s];
%求解半径Cn
Cn=zeros(length(N),1);
for j=1:length(N)n=N(j);Cn(j)=1/2/L*(trapz(x,f.*exp(-1i*n*pi*x/L)));
end
%化简,根据dx把Cn的小量删掉
Cn_r=real(Cn);Cn_r(abs(Cn_r)<dx)=0;
Cn_i=imag(Cn);Cn_i(abs(Cn_i)<dx)=0;%一般这个都是0
Cn=Cn_r+1i*Cn_i;%求解轨迹Zn
Zn=zeros(length(N),length(x));%Zn的格式为0,1正负,2正负,3正负。。。
for j=0:sif j==0Zn(j+1,:)=Cn(s+1)*exp(1i*j*pi*x/L);elseZn(j*2,:)=Cn(s+1+j)*exp(1i*j*pi*x/L);%角速度为正Zn(j*2+1,:)=Cn(s+1-j)*exp(-1i*j*pi*x/L);%角速度为负end
end
Znsum=cumsum(Zn,1);%绘制动图
figure(1)
pic_num=1;
for j=1:40:length(x)clfhold on%绘制圆for k=1:s%圆心 Zn(k-1)%半径 Cn%先画正的if Cn(s+1+k)~=0pos=[real(Znsum(2*k-1,j))-abs(Cn(s+1+k)),imag(Znsum(2*k-1,j))-abs(Cn(s+1+k)),abs(2*Cn(s+1+k)),abs(2*Cn(s+1+k))];rectangle('Position',pos,'Curvature',[1 1])end%再画负的if Cn(s+1-k)~=0pos=[real(Znsum(2*k,j))-abs(Cn(s+1-k)),imag(Znsum(2*k,j))-abs(Cn(s+1-k)),abs(2*Cn(s+1-k)),abs(2*Cn(s+1-k))];rectangle('Position',pos,'Curvature',[1 1])endend%绘制曲线plot(Znsum(end,1:j),'-r')hold off%xlim([-3,3]);ylim([-3,3])xlim([-1,6]);ylim([-1,6])%画框大小pause(0.01)end%绘制静图
figure(2)
plot(sum(Zn,1));
hold on
plot(f);
hold off%绘制棍线动图
pause(0.1)
figure(3)for j=1:40:length(x)clfhold on%绘制直线h=1;for k=1:s%圆心 Zn(k-1)%下一点 Zn(k)%先画正的if Cn(s+1+k)~=0plot([real(Znsum(2*k-1,j)),real(Znsum(2*k,j))],[imag(Znsum(2*k-1,j)),imag(Znsum(2*k,j))],'k-')%,'color',mycolor(colorslect(h),:)h=h+1;end%再画负的if Cn(s+1-k)~=0plot([real(Znsum(2*k,j)),real(Znsum(2*k+1,j))],[imag(Znsum(2*k,j)),imag(Znsum(2*k+1,j))],'k-')%,'color',mycolor(colorslect(h),:)h=h+1;endend%绘制曲线plot(Znsum(end,1:j),'-r')hold off%xlim([-2,2]);ylim([-2,2])xlim([-1,6]);ylim([-1,6])%画框大小pause(0.01)end

本轮、均轮背后的傅里叶分解原理(matlab演示)相关推荐

  1. 傅里叶级数用matlab,傅里叶级数展开matlab实现

    傅里叶级数展开matlab 实现给个例子说明下:将函数 y=x*(x-pi)*(x-2*pi),在(0,2*pi)的范围内傅里叶级数展开syms x fx=x*(x-pi)*(x-2*pi); [an ...

  2. 学习通信原理之——从实验中理解频谱/功率谱/功率谱密度(MATLAB演示)

    我的个人博客文章链接如下:学习通信原理之--从实验中理解频谱/功率谱/功率谱密度(MATLAB演示) 前言 最近在复习通信原理,每次到了功率谱这一块就感到困惑,每次都要去查,我觉得不能再这样循环下去了 ...

  3. 如何用MATLAB叠加傅里叶级数,傅里叶级数展开matlab实现

    <傅里叶级数展开matlab实现>由会员分享,可在线阅读,更多相关<傅里叶级数展开matlab实现(3页珍藏版)>请在人人文库网上搜索. 1.傅里叶级数展开matlab 实现 ...

  4. matlab模拟三体运动_三体运动的matlab演示.docx

    三体运动的matlab演示 I** 1MX " % F(Xr 心) 6j6)( Xr X J j "r*-疝出制痒十丘忑忑拓1 )民严皿_辿少 ..g席+*仍才芮融訴 取殖翎为Mj ...

  5. matlab演示系统,基于Matlab的通信原理演示系统的设计与应用

    基于 Matlab的通信原理演示系统的设计与应用 李 强 , 明 艳 , 吴坤君 (重庆邮电大学 通信学院 , 重庆 400065) 摘 要 : 利用 Matlab图形用户界面的开发环境和强大的通信仿 ...

  6. MATLAB演示元胞自动机算法

    一.元胞自动机理论 元胞自动机与格子理论是一个非常好的模型,许多复杂的问题都可以通过它来建立模型,下面就简要介绍一下. 元胞自动机 实质上是定义在一个具有离散.有限状态的元胞组成的元胞空间上,并按照一 ...

  7. matlab (t)傅里叶,傅里叶分析matlab程序.pdf

    傅里叶分析matlab程序 傅里叶分析(Fourier analysis)主要研究函数的傅里叶变换及其性质.连续函 数的傅里叶公式如下  F ()  f (t )ej t dt (1.1) ...

  8. 高斯白噪声(white Gaussian noise,WGN)及matlab演示

    原文链接:http://wenku.baidu.com/link?url=mj_wz_9l7PAlURQYi1iOnTnweMxyPvoTWGgoIQdCh2v0Yugt7v_G9QsUkS6Ww-r ...

  9. 傅里叶入门--动手演示波形叠加

    记得以前有门课程,有这么一个说法:任何周期函数,都可以看作是不同振幅,不同相位正弦波的叠加. 咳咳... 举个栗子,某函数有如下图示形状: 可以由多个形状如下的波形叠加合成. 咋一看,一想,不合理呀, ...

最新文章

  1. SIGSEGV 和 SIGBUS gdb看汇编
  2. 排序算法之冒泡,选择,插入
  3. 【37.38%】【codeforces 722C】Destroying Array
  4. windows time 服务无法启动 错误1058 解决方法
  5. java正则表达式 过滤特殊字符的正则表达式
  6. 第三方工具Jdom解析XML
  7. EMNLP 2021 | ST-ToD:小样本场景下的任务型对话预训练
  8. Browser控制台分析
  9. 时间控件_Selenium时间控件的处理
  10. 深入浅出asterisk(一):asterisk通道(Channels)
  11. Silverlight+WCF 新手实例 象棋 棋子移动-线交叉点(六)
  12. vue项目中使用cn打印组件
  13. C++与Python混合编程
  14. linux时间为什么没有北京,Linux时区选择为何没有北京?
  15. JavaScript(基础)——初窥门径
  16. EduSoho v8.7.10 本地播放视频超时或者快进后网络错误导致视频下载中途失败。
  17. python中求和符号怎么打_SymPy求和表达式中的代换符号
  18. Python哲学之import this,诠释代码之美
  19. HTML制作宣传片,怎么制作视频宣传片 视频宣传片制作软件 照片制作成宣传视频,并添加相关文字说明...
  20. Google Map开发系列(十二)——定制GoogleBar --谷歌地图的本地搜索栏

热门文章

  1. 【LeetCode】275. H-Index II 解题报告(Python)
  2. PS-oneday-文件的打开新建和储存
  3. html导航栏显示箭头,jquery – 使用箭头键导航HTML表
  4. 总体准确率(overall accuracy)、平均准确率(average accuracy)的含义
  5. 广州有哪些好点的软件外包公司或者软件开发公司呀?听说广州碧软还不错,还有其他靠谱的软件外包公司?
  6. 百度绿萝算法,SEO打油诗,统计分析IP,PV,UV
  7. 学校运动会计算机系仪仗队入场词,运动会入场方阵解说词
  8. 《小米商城》--查看购物车
  9. SAI 绘图软件+笔刷+教程
  10. java复习第3天---3.1---final关键字、权限修饰符