合肥工业大学计算机专业计算方法实验报告.docx

上传人:b****2 文档编号:1116652 上传时间:2022-10-17 格式:DOCX 页数:38 大小:271.90KB
下载 相关 举报
合肥工业大学计算机专业计算方法实验报告.docx_第1页
第1页 / 共38页
合肥工业大学计算机专业计算方法实验报告.docx_第2页
第2页 / 共38页
合肥工业大学计算机专业计算方法实验报告.docx_第3页
第3页 / 共38页
合肥工业大学计算机专业计算方法实验报告.docx_第4页
第4页 / 共38页
合肥工业大学计算机专业计算方法实验报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

合肥工业大学计算机专业计算方法实验报告.docx

《合肥工业大学计算机专业计算方法实验报告.docx》由会员分享,可在线阅读,更多相关《合肥工业大学计算机专业计算方法实验报告.docx(38页珍藏版)》请在冰豆网上搜索。

合肥工业大学计算机专业计算方法实验报告.docx

合肥工业大学计算机专业计算方法实验报告

合肥工业大学

计算机与信息学院

实验报告

课程:

计算方法

专业班级:

学号:

姓名:

函數憐値数値积分常ISl分方程求解迭代法求方程根线性方程组求解

蚩数输入提示

e⅛fi⅛Λ∣κ

处理结果

⅞s⅛

JaVa界面

其实都不难按照程序流程图就可以完成了

实验一插值与拟合

一、实验目的

(1)明确插值多项式和分段插值多项式各自的优缺点;

(2)编程实现三次样条插值算法,分析实验结果体会高次插值产生的龙格现象;

(3)理解最小二乘拟合,并编程实现线性拟合,掌握非线性拟合转化为线性拟合的方法

(4)运用常用的插值和拟合方法解决实际问题。

二、实验内容

(1)对于f(x)=1∕(1+x*x)实现三次样条插值

(2)实现最小二乘法的直线拟合

数据如下:

Xj

165

123

150

123

141

yj

187

126

172

125

148

三、基本原理(计算公式)

(1)三次样条插值在每个内节点上具有2阶导数。

⑵最小二乘法拟合直线为y=a+bx,而a,b有如下等式(N为给出的数据点的总个数)

aNb^^yi;a'Xib'x27Xiyi

四、算法设计与实现(流程图,关键点)

a,b。

用得到的拟合直线计算预测点的

最小二乘法直线拟合:

输入数据后,按照公式计算近似函数值。

五、输入与输出

(1)三次样条插值

输入:

区间长度,n+1个数据点,预测点输出:

预测点的近似函数值,精确值,及误差

(2)最小二乘法直线拟合

输入:

n个数据点,预测点

输出:

预测点的近似函数值

六、结果讨论和分析

■E:

\计算右⅛∖屋小二祠苗直戋拟⅛),exe

1.5138U⅛⅛S⅛⅛⅛y--60^392*t-51381x睛输入插値节点略112⅛×=ιi2.y=108-θ08请输入插值节点X=134

⅛x=134,y=141.912蒂输入插值节点壮152⅛χ-lS3,⅛=1691lt请输人J⅛紅节点×≈13?

⅛x=137,y=146.453请诙入皤值节点K=咛

⅛x=77f⅛=85.9006*輪入插值节点

代码

三次样条插值

#inClUdeVioStream>

#include

#defineN10

USingnamespacestd;

doubleu0(doublex){

return(x-1)*(x-1)*(2*x+1);

}

doubleu1(doublex){

returnx*x*(3-2*x);

}

doublev0(doublex){

returnx*(x-1)*(x-1);

}

doublev1(doublex){

returnx*x*(x-1);

}

doubles3(doublex,doubley,doubley1,doublem,doublem1,doubleh){returnuθ(x)*y+u1(x)*y1+h*vθ(x)*m+h*v1(x)*m1;

}

doublef(doublex){

return1∕(1+x*x);

}

intmain(){

ifstreamfin;

fin.open("E:

\\t.txt");

if(!

fin){

cout<<"erroropeninginPUtStream"<

SyStem("pause");

return0;

}

doublex[N+1],y[N+1],m[N+1],A[N],B[N],C[N];

doubleh[N];

doublea[N],b[N];

doublef0,fn;

doubletemp;

inti;

for(i=0;i<=N;i++){

fin>>x[i]>>y[i];

}

fin>>fθ>>fn;

h[0]=x[1]-x[0];

for(i=1;i

h[i]=x[i+1]-x[i];

a[i]=h[i-1]∕(h[i-1]+h[i]);b[i]=3*((1-a[i])*(y[i]-y[i-1])∕h[i-1]+a[i]*(y[i+1]-y[i])∕h[i]);

}

m[1]=b[1]-(1-a[1])*f0;

m[N-1]=b[N-1]-a[N-1]*fn;

for(i=2;i

m[i]=b[i];

}

for(i=1;i

B[i]=2;

C[i]=a[i];

}

for(i=2;i

A[i]=1-a[i];

}

C[1]=C[1]∕B[1];

m[1]=m[1]∕B[1];

doublet;

for(i=2;i!

=N-2;i++){

t=B[i]-C[i-1]*A[i];

C[i]=C[i]∕t;

m[i]=(m[i]-m[i-1]*A[i])∕t;

}

m[N-1]=(m[N-1]-m[N-2]*A[N-1])∕(B[N-1]-C[N-2]*A[N-1]);

for(i=N-2;i>0;i--){

m[i]=m[i]-C[i]*m[i+1];

}

cout<<"please:

(输入插值节点在"<

WhiIe(Cin>>temp){

doublett=temp;

if(tempx[N]){

cout<<"插值节点为"<

Continue;

}

for(i=1;i<=N;i++){

if(temp

}

temp=(temp-x[i-1])∕h[i-1];

temp=s3(temp,y[i-1],y[i],m[i-1],m[i],h[i-1]);

cout<<"插值节点为"<

"<

}

SyStem("pause");

fin.close();

return0;

}

最小二乘法的直线拟合

#include

#include

#definen5

USingnamespacestd;

doublesum(doublex[],intk){

inti;

doublesum=0;

for(i=0;i

SUm=SUm+x[i];

returnsum;

}

doublesum2(doublex[],intk){

inti;

doublesum=0;

for(i=0;i

SUm=SUm+x[i]*x[i];

returnsum;

}

doublesumxy(doublex[],doubley[],intk){

inti;

doublesum=0;

for(i=0;i

SUm=SUm+x[i]*y[i];

returnsum;

}

intmain(){

ifstreamfin;

fin.open("E:

\\t.txt");

if(!

fin){

cout<<"erroropeninginPUtStream"<

SyStem("pause");

return0;

}

doublex[n],y[n],a,b;

doublex0,y0;

inti;

for(i=0;i

fin>>x[i]>>y[i];

}

b=(n*sumxy(x,y,n)-sum(x,n)*sum(y,n))∕(n*sum2(x,n)-sum(x,n)*sum(x,n));

a=(sum(y,n)-b*sum(x,n))/n;

cout<<"最小二乘法直线拟合得到a:

"<

"<

y="<

cout<<"请输入插值节点x:

";

WhiIe(Cin>>xθ){

y0=a+b*x0;

cout<<"当x="<

cout<<"请输入插值节点x:

";

}

SyStem("pause");

fin.close();

return0;

}

实验二数值积分

、实验目的

(1)熟悉复化梯形方法、复化SimPSOn方法、梯形递推算法、龙贝格算法;

(2)能编程实现龙贝格算法和中点加速;

(3)理解并掌握自适应算法和收敛加速算法的基本思想;

(4)分析实验结果体会各种方法的精确度,建立计算机求解定积分问题的感性认识

二、实验内容

(1)用龙贝格算法计算ISin^dX

LOX

⑵用中点加速方法计算ex的一阶导数

三、基本原理(计算公式)

(1)龙贝格算法

梯形递推公式

hnj

2lf(χkI)

22k卫

加权平均公式:

4T2n-Tn

4-1

4S2n-Sn

42-1

40U

43-1

IfriA-StIaf

bfHT.

*■h2*(Γ∣igftbl

U'-∖r-tTl—

hi≠(hA}+fr¼))k-1

图2.3龙贝格算法流程图

⑵中点加速

中点公式:

G(h)=(f(a+h)-f(a-h))∕2∕h加权平均:

G1(h)=4*G(h∕2)∕3-G(h)∕3

G2(h)=16*G1(h∕2)∕15-G1(h)∕15

G3(h)=64*G2(h∕2)∕63-G2(h)∕63

四、算法设计与实现(流程图,关键点)

中点加速:

输入数据后根据公式计算导数值

图2.2梯形递推算法流程图

五、输入与输出

1SinX

(1)用龙贝格算法计算fdx

0X

输入:

积分区间,误差限

输出:

序列Tn,Sn,Cn,Rn及积分结果⑵用中点加速方法计算ex的一阶导数输入:

求导节点,步长

输出:

求得的导数值,精确值

六、结果讨论和分析

E⅛+≡⅛i⅛∖中点;]口速.exE

代码

龙贝格算法

#inClUdeVioStream>

#include

#include

USingnamespacestd;

doublef(doublex){

if(x==O)return1;

returnSin(x)/x;

}

intmain(){

ifstreamfin;

fin.open("E:

\\t.txt");

if(!

fin){

cout<<"erroropeninginPUtStream"<

SyStem("pause");

return0;

}

doublea,b,e,t1,t2,s1,s2,c1,c2,r1,r2;

doublex,h,s;

fin>>a>>b>>e;

cout<<"积分区间为["<

cout<<"kT2S2C2R2"<

h=b-a;

t1=(f(a)+f(b))*h∕2;

cout<<0<<""<

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

当前位置:首页 > 人文社科 > 法律资料

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

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