单摆运动数值模拟

一、单摆运动

单摆是能够产生往复摆动的一种装置,将无重细杆或不可伸长的细柔绳一端悬于重力场内一定点,另一端固结一个重小球,就构成单摆。若小球只限于铅直平面内摆动,则为平面单摆,若小球摆动不限于铅直平面,则为球面单摆。
重力对单摆的力矩为:
m l 2 θ + γ l θ + m g s i n ( θ ) = F c o s ( ω D t ) ml^2 \theta + \gamma l \theta +mgsin(\theta)=Fcos(\omega_Dt) ml2θ+γlθ+mgsin(θ)=Fcos(ωDt)

ω D = g l \omega_D=\sqrt{\frac{g}{l}} ωD=lg

θ + γ θ m + ω 0 2 s i n ( θ ) = F m l c o s ( ω D t ) \theta + \gamma \frac{\theta}{m} + \omega_0^2sin(\theta)=\frac{F}{ml}cos(\omega_Dt) θ+γmθ+ω02sin(θ)=mlFcos(ωDt)

小角度近似得
θ + 2 β θ + ω 0 2 s i n ( ) θ = f c o s ( ω D t ) \theta + 2 \beta \theta + \omega_0^2sin()\theta =fcos(\omega_Dt) θ+2βθ+ω02sin()θ=fcos(ωDt)

数值处理

d θ d t = ω \frac{d\theta}{dt} = \omega dtdθ=ω

d ω d t + g l s i n ( θ ) = 0 \frac{d\omega}{dt} +\frac{g}{l}sin(\theta)=0 dtdω+lgsin(θ)=0

根据有限差分法可得
ω n + 1 − ω n δ t + g l s i n ( θ n ) = 0 \frac{\omega_{n+1} - \omega_{n}}{\delta t}+\frac{g}{l}sin(\theta_n)=0 δtωn+1ωn+lgsin(θn)=0

二、代码转换

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

void put(FILE *outstream, double data1, double data2, double data3)
{
	fprintf(outstream, "%f,%f,%f\n,", data1, data2, data3);
} 

int main(int argc, char *argv[])
{
	double theta = 0.02;//0.02
	double w = 0;
	double g=9.8;
	double l = 1;
	double beta = 0.05;//0.05
	double w_d = 3.0;
	double f = 4.25;//7.3185
	float t = 0.01;
	int i;
	
	FILE *outstream;
	if((outstream=fopen("hahaha.dat", "ab")) == NULL)
	{
		printf("Cannot open file, press any key to exit!\n");
		exit(1);
	}
	
	for(i=0; i<10000; i++)
	{
		w = w +(-g/l*sin(theta)-2*beta*w+f*cos(w_d*t*i))*t;
		theta = theta + w*t;
		put(outstream,w,theta,t*(i));
	}
	fclose(outstream);
	printf("%f\n",sqrt(g/l));
	return 0;
}


三、 结果分析

(一)无阻尼无驱动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)附加阻尼

在这里插入图片描述
在这里插入图片描述

(三)附加阻尼和驱动力

f=1

f=6

f=5

f=7

四、总结

总体的思路非常简单,对于一阶常微分方程,差分法使用起来非常方便,对于二阶,通常可将二阶降为一阶进行计算,但是降阶后对于代码的顺序需要调整,即把先要用到的结果放在前面,总的来说算是对差分法的回顾吧。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值