数值大作业.docx

上传人:b****5 文档编号:7893957 上传时间:2023-01-27 格式:DOCX 页数:16 大小:149.44KB
下载 相关 举报
数值大作业.docx_第1页
第1页 / 共16页
数值大作业.docx_第2页
第2页 / 共16页
数值大作业.docx_第3页
第3页 / 共16页
数值大作业.docx_第4页
第4页 / 共16页
数值大作业.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数值大作业.docx

《数值大作业.docx》由会员分享,可在线阅读,更多相关《数值大作业.docx(16页珍藏版)》请在冰豆网上搜索。

数值大作业.docx

数值大作业

目录

大角度单摆的运动周期求解3

1.单摆运动模型建立3

1.1小角度模型3

2.2大角度模型3

2.函数编写5

2.1mysin函数编写(计算正弦值)5

2.2mysqrt函数编写(计算开方值)6

2.3f(x)函数编写7

2.3.1复合梯形积分法7

2.3.2Romberg积分法8

2.3.3Gauss积分法(两点)9

2.4myspline函数编写(计算三次样条函数)9

3.运动周期求解10

4.函数拟合13

4.1插值点的选取13

4.2插值点的选取13

4.3结果分析13

总结15

大角度单摆的运动周期求解

摘要:

无阻尼条件下单摆的周期是第一类椭圆积分,在小角度下可以通过取近似

来计算周期。

但是在大角度下上式不成立,在本文中利用数值积分方法对各个摆角下的周期进行求解,同时亦通过求三次样条插值函数来近似原函数。

1.单摆运动模型建立

模型假设:

1.单摆作无阻尼运动

2.摆绳的质量可忽略,且在运动中无形变

3.悬挂的小球可以看做质点

参数设计:

假设一个无阻尼的理想单摆,初始摆角为

,摆长为l,小球的质量为m,重力加速度为g

模型求解:

根据公式:

转动惯量·角加速度=力矩,得

1.1小角度模型

在小角度(一般认为

)的情况下,作近似

则运动方程为

这是一个典型的常微分方程,可以解得周期为

1.2大角度模型

当初始摆角

较大(一般认为

)时,上述的近似处理

误差很大,不能使用该方法来求解周期。

此时需要精确求解。

根据微积分和微分方程的知识,可以解得运动周期的精确表达式为

设k为精确周期

与近似周期

之比,即

不妨设

则当摆角为

时,周期比为

为了为之后的计算值提供对比,首先用MATLAB内置函数ellipke计算周期比,将其作为标准值,代码如下所示:

theta=1:

90;%bydegree

thm=theta*pi/180;%byradians

k=ellipke(sin(thm/2).^2)*2/pi;%result

xlswrite('elli.xls',[theta;to])%writeresultstoEXCELdocument

计算结果如下表所示

作出摆角与周期比的函数图像,如下所示。

可以看到,当角度很小时,周期比约等于1;当角度增大时,周期比偏离1。

可见,当单摆作大角度运动时,近似周期公式是不可靠的。

2.函数编写

为了更好地体现数值计算,在本文的函数计算中,均使用四则运算,所以需要编自行写正弦函数mysin和开方函数mysqrt。

然后在此基础上,用多种数值积分方法求函数

的值。

2.1mysin函数编写(计算正弦值)

主要思想是利用泰勒公式来求sin(x)的多项式逼近。

根据泰勒公式,sin(x)的泰勒展开式如下所示:

在本函数中,控制计算值达到小数点后10位,函数代码如下所示:

%Thisfunctioncalculatethevalueofsin(x)

%UsingTaylor'sexpansion

function[y]=mysin(x)

y=0;

tol=0.5e-10;

i=0;

er=1;

whileer>tol

temp=y;

y=y+(-1)^i*x^(2*i+1)/factorial(2*i+1);

er=abs(temp-y);

i=i+1;

end

2.2mysqrt函数编写(计算开方值)

%Thisfunctioncalculatethesquarerootofinpoutx

%Argumentxmustbetweenzeroandone

function[y]=mysqrt(x)

low=0;high=1;%theinitiallowerandupperbounds

tol=0.5e-10;%theprincipleof10significantdigits

mid=(high+low)/2;%theestimateofzeropointvalue

er=1;

symst

f(t)=t^2-x;

while(er>tol)

iff(mid)==0

break;

elseiff(mid)*f(low)<0

high=mid;

elselow=mid;

end

temp=mid;%storethelastestimatedvalue

mid=(high+low)/2;

er=abs(temp-mid);

end

y=mid;

2.3f(x)函数编写

其中x是初始摆角,即最大摆角。

则周期比可表示为

下面分别用复合梯形积分法、Romberg积分法、Gauss积分法,来构造

函数。

函数的输入变量是摆角(角度值),输出变量是周期比。

2.3.1复合梯形积分法

%Youshouldinputthemaximumswingangle(bydegree)astheArgument

%ThisfunctionreturntherelativecycleofSimplePendulum

function[y2]=tra(x)

formatlong

x=x/180*pi;

symst

g=@(t)1/mysqrt(1-(mysin(x/2)^2)*(mysin(t))^2);

%compositetrapzoidalformula

a=0;b=pi/2;%integratingbounds

n=50;

h=(b-a)/n;%stepsize

s=0;

fort=a+h:

h:

b-h

s=s+g(t);

end

I=h/2*(g(a)+g(b))+h*s;

y2=I*2/pi;

2.3.2Romberg积分法

%Youshouldinputthemaximumswingangle(bydegree)astheArgument

%ThisfunctionreturntherelativecycleofSimplePendulum

function[y3]=rom(x)

formatlong

x=x/180*pi;

symst

g=@(t)1/mysqrt(1-(mysin(x/2)^2)*(mysin(t))^2);

%Rombergmethod

a=0;b=pi/2;%aandbareupperandlowerlimitsofintegration

m=1;h=b-a;

j=0;

R(1,1)=h*(g(a)+g(b))/2;

while(j<4)

j=j+1;

h=h/2;

s=0;

forp=1:

m

t=a+h*(2*p-1);

s=s+g(t);

end

R(j+1,1)=R(j,1)/2+h*s;

m=m*2;

fork=1:

j

R(j+1,k+1)=R(j+1,k)+(R(j+1,k)-R(j,k))/(4^k-1);

end

end

2/pi*R

y3=2/pi*R(j+1,j+1);

2.3.3Gauss积分法(两点)

%Youshouldinputthemaximumswingangle(bydegree)astheArgument

%ThisfunctionreturntherelativecycleofSimplePendulum

function[y1]=gau(x)

formatlong

x=x/180*pi;

symst

g=@(t)1/mysqrt(1-(mysin(x/2)^2)*(mysin(t))^2);

%Gaussmethod

I=pi/4*(5/9*g(pi/4-pi/4*sqrt(15)/5)+8/9*g(pi/4+pi/4*0)+5/9*g(pi/4+pi/4*sqrt(15)/5));

y1=I*2/pi;

2.4myspline函数编写(计算三次样条函数)

为了能够通过少许插值点来知道任意摆角的周期比,可以通过对插值点进行三次样条插值,具体说明见后文。

该函数的输入量是摆角,输出量是周期比,计算代码如下所示:

%xisindependentvariableofthisfunction

%tandvisthevectorofsamplingpoint

functiony=myspline(x,t,v)

n=length(t);%Lengthoftheinput

%ThecoefficientsinAmatrix.

lambda=zeros(n-1,1);

u=zeros(n-1,1);

h=zeros(n-1,1);

g=zeros(n-1,1);

b=zeros(n,1);

%A*M=bforcalculatecoefficentmatrixM.

%S(i)istheresultofyineachsplinesection.

A=eye(n)*2;

S=zeros(n-1,1);

fori=1:

n-1

h(i)=t(i+1)-t(i);

end

fori=2:

n-1

lambda(i)=h(i)/(h(i-1)+h(i));

A(i,i+1)=lambda(i);

u(i-1)=1-lambda(i);

A(i,i-1)=u(i-1);

end

fori=1:

n-2

g(i)=6/(h(i)+h(i+1))*...

((v(i+1)-v(i+2))/(t(i+1)-t(i+2))-...

(v(i)-v(i+1))/(t(i)-t(i+1)));

b(i+1)=g(i);

end

%CalculatethematrixMforlatersplineinterpolation

M=A\b;

fori=1:

n-1

S(i)=1/(6*h(i))*(M(i)*(t(i+1)-x)^3+M(i+1)*(x-t(i))^3)+...

(v(i)-(M(i)*h(i)^2)/6)*(t(i+1)-x)/h(i)+...

(v(i+1)-(M(i+1)*h(i)^2)/6)*(x-t(i))/h(i);

ifx<=t(i+1)

y=S(i);

break

end

end

ifx>t(i+1)

y=S(i);

end

end

3.运动周期求解

在f(x)函数编写模块中,已经用复合梯形、Romberg和Gauss积分法三种方法写了对

的求解算法。

由于Gauss积分法的精度不高,故不采用该方法。

复合梯形积分法可以通过增加小区间的数量来提高精度,Romberg积分法亦可以通过增加外推次数来提高精度。

又由于Romberg方法可以通过控制外推终止条件来控制计算结果的精度,所以下面主要使用Romberg方法来计算(精确到小数点后6位):

为了达到需要的精度,将代码做一些修改(修改部分加粗)

%Youshouldinputthemaximumswingangle(bydegree)astheArgument

%ThisfunctionreturntherelativecycleofSimplePendulum

function[y3]=rom(x)

formatlong

x=x/180*pi;

symst

g=@(t)1/mysqrt(1-(mysin(x/2)^2)*(mysin(t))^2);

%Rombergmethod

a=0;b=pi/2;%aandbareupperandlowerlimitsofintegration

m=1;h=b-a;

j=0;

R(1,1)=h*(g(a)+g(b))/2;

tol=0.5e-6;

err=1;%Theinitialvalueoferror

while(j<4&&err>tol)

j=j+1;

h=h/2;

s=0;

forp=1:

m

t=a+h*(2*p-1);

s=s+g(t);

end

R(j+1,1)=R(j,1)/2+h*s;

m=m*2;

fork=1:

j

R(j+1,k+1)=R(j+1,k)+(R(j+1,k)-R(j,k))/(4^k-1);

end

err=2/pi*abs((R(j+1,j+1)-R(j,j)));

end

2/pi*R

y3=2/pi*R(j+1,j+1);

通过以下代码计算各摆角对应的周期,并将数据写入Excel表中。

(注:

为了方便,以3°为步长从0°到90°取值)

step=3;

i=0;

forx=0:

step:

90

i=i+1;

y=rom(x);

result(i,1)=x;

result(i,2)=y;

end

xlswrite('rom.xls',result);

计算结果与标准值的对比结果如下:

可以看出,在精确到小数点后6位的情况下,计算值与标准值之间几乎没有误差。

4.函数拟合

为了能够方便计算任意一摆角的周期比,可以在标准值中取一些插值点,然后利用这些插值点计算三次样条函数。

有了三次样条函数后,就可以很方便地计算任意摆角的周期比。

4.1插值点的选取

每隔

取一个插值点,代码如下:

theta=0:

5:

90;

thm=theta*pi/180;

to=ellipke(sin(thm/2).^2)*2/pi;

4.2插值点的选取

选好插值点后,再调用之前写好的myspline函数即可计算各个样条函数,输出摆角对应周期比的估计值,以计算

对应的周期比为例:

myspline(87,theta,to);

输出结果为1.166704

4.3结果分析

首先画出插值点的散点图和样条函数的图像:

%thescatterplot

set(0,'defaultfigurecolor','w');%setthebackgroundcolortowhite

i=0;

forx=0:

0.01:

90

i=i+1;

y1(i)=myspline(x,theta,to);

end

x=0:

0.01:

90;

scatter(x,y1,'.r');

holdon

scatter(theta,to,'*k');

图像如下所示,可见吻合地很好:

为了更加精确地分析样条函数的误差情况,下面作出各点的样条函数值和标准值的差的函数

(注:

为步长)

%errorplot

set(0,'defaultfigurecolor','w');%setthebackgroundcolortowhite

forx=0:

1:

90

y1=myspline(x,theta,to);

t=x/180*pi;

y2=ellipke(sin(t/2).^2)*2/pi;

line([x,x],[0,y1-y2]);

end

图像如下所示:

可以看出,误差已经很小了,达到了10-5数量级,但是在两端的误差相对来说比较大。

此时可以增加相应位置的插值点来改善:

theta=[0:

1:

4,5:

5:

85,86:

1:

90];

thm=theta*pi/180;

to=ellipke(sin(thm/2).^2)*2/pi;

再次作出误差图像,如下:

可以看出,误差已经达到了10-8数量级,精度已经很高了。

从图中也可以看出,误差都是为负的,也就是说样条函数的估计值要小于标准值。

所以,各个区间的样条函数均是下凹程度要大于实际的函数。

如果还需要提高精度,可以继续增加插值点。

但是采用样条函数的意义本在于为了更加方便计算任意摆角的周期比;若是插值点过多,不同区间用不同的样条函数,导致样条函数也更多,反而繁琐。

所以在实际使用中应当在两者中权衡。

总结

本文中提供了复合梯形积分法、Romberg积分法、Gauss积分法三种数值积分法来计算周期比,其中重点分析了Romberg积分法,因为其比较方便控制精度;梯形积分法也很适合,篇幅有限,就没有重复赘述。

为了能够得到周期比与摆角的近似函数,以方便计算任意角度的周期比,本文中通过在标准值中取了若干插值点来求三次样条函数。

若是三次样条函数在某些值处误差较大,可以通过在该处添加插值点,从而大大提高精确度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1