数值分析计算机实验和4.docx
- 文档编号:26931202
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:14
- 大小:134.70KB
数值分析计算机实验和4.docx
《数值分析计算机实验和4.docx》由会员分享,可在线阅读,更多相关《数值分析计算机实验和4.docx(14页珍藏版)》请在冰豆网上搜索。
数值分析计算机实验和4
数值分析计算机实验和4
————————————————————————————————作者:
————————————————————————————————日期:
实验三复化辛卜生法,龙贝格法
一、目的与要求:
Ø通过实际计算体会各种方法的精确度;
Ø会编写用复化辛卜生、龙贝格算法求定积分的程序。
二、实验内容:
Ø通过实际计算体会各种方法的精确度并且会编写用复化辛卜生、龙贝格算法求定积分的程序
三、程序与实例
复化辛卜生公式
算法:
复化辛卜生公式为Sn=h/6
计算过程为:
1.令
2.对
计算
3.
。
程序与实例
例用复化辛卜生法计算积分
源程序:
#include
intmain()
{
doublea=0.0,b=1.0;
doublex=a;
doubleSn=0;
intn;
cout<<"请输入你想求的阶数:
";
cin>>n;
intm=2*n+1;
doubleh=0.5/n;//步长
double*f;
f=newdouble[m];
for(inti=0;i { f[i]=1.0/(1+x*x); x=x+h; } for(intj=0;j { cout<<"f["< } for(intk=0;k<=n-1;k++) { Sn=Sn+f[k*2]+4*f[2*k+1]+f[2*(k+1)]; } cout<<"S"< return0; } 运行结果 说明: 本例运行了三次,当 时,就与 时有6位数字相同,若用复化梯形法计算,当n=512时有此结果。 Ø龙贝格算法计算 算法 用事后估计法控制精度 。 源程序: //龙贝格法计算积分,f(x)=1/(1+x^2) #include #include #definee2.71828183 #definef(x)(1.0/(1.0+(x)*(x))) voidmain() { doublea=0.0,b=1.0; doubleae=5*e-6;cout<<"精度为: "< doubleT1=0.5*(f(0)+f (1)); doubleT2=0.5*T1+0.5*f(0.5); cout<<"T1="< cout<<"T2="< doubleS1=4.0*T2/3.0-1.0*T1/3.0; if(fabs((1.0/3.0)*(T2-T1)) { cout<<"S1满足精度要求! "< cout<<"S1="< } else {cout<<"S1不满足精度要求! "< } doubleT4=0.5*T2+0.25*(f(0.25)+f(0.75)); doubleS2=(1.0/3.0)*(4*T4-T2); doubleC1=(1.0/15.0)*(16*S2-S1); if(fabs((1.0/15.0)*(S2-S1)) { cout<<"C1满足精度要求! "< cout<<"C1="< } else {cout<<"C1不满足精度要求! "< } doubleT8=0.5*T4+(1.0/8.0)*(f(1.0/8.0)+f(3.0/8.0)+f(5.0/8.0)+f(7.0/8.0)); doubleS4=(1.0/3.0)*(4*T8-T4); doubleC2=(16.0/15.0)*S4-(1.0/15.0)*S2; doubleR1=(64.0/63.0)*C2-(1.0/63.0)*C1; if(fabs((1.0/63.0)*(C2-C1)) { cout<<"R1满足精度要求! "< cout<<"R1="< } else {cout<<"R1不满足要求! "< } DoubleT16=0.5*T8+(1.0/16.0)*(f(1.0/16.0)+f(3.0/16.0)+f(5.0/16.0)+f(7.0/16.0)+f(9.0/16.0)+f(11.0/16.0)+f(13.0/16.0)+f(15.0/16.0)); doubleS8=(1.0/3.0)*(4*T16-T8); doubleC4=(16.0/15.0)*S8-(1.0/15.0)*S4; doubleR2=(64.0/63.0)*C4-(1.0/63.0)*C2; if(fabs((1.0/63.0)*(C4-C2)) { cout<<"R2满足精度要求! "< cout<<"R2="< } 运行结果: 实验四改进欧拉法,二分法,牛顿法 计算机121班吴珍珍122460 一、目的与要求: Ø熟悉求解常微分方程初值问题的有关方法和理论,主要是改进欧拉法 Ø会编制上述方法的计算程序 Ø针对实习题编制程序,并上机计算其所需要的结果; 二、实验内容: Ø熟悉求解常微分方程初值问题的有关方法和理论,主要是改进欧拉法,体会其解法的功能。 程序与实例 Ø改进欧拉方法 算法概要 解一阶常微分方程初值问题 将区间[a,b]作n等分,取步长 。 欧拉公式为 梯形公式为 改进欧拉法,采用公式 或表为 实验题: 源代码: #include #definef(x,y)(-x*y*y) intmain() { intn; cout<<"您想把区间分成多少分? "<<""; cin>>n; double*Xi=newdouble[n+1]; double*Yi=newdouble[n+1]; doubleh=3.0/n; Xi[0]=0; for(intk=0;k<=n;k++) { Xi[k+1]=Xi[k]+h; } Yi[0]=2; for(inti=0;i<=n;i++) { Yi[i+1]=Yi[i]+(h/2.0)*(f(Xi[i],Yi[i])-(Xi[i+1]*(Yi[i]+h*f(Xi[i],Yi[i])))); } cout<<"n="< for(intj=0;j<=n;j++) { cout<<"X"< } return0; } 运行结果: 二分法和牛顿迭代法 一、目的与要求: Ø通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点; Ø比较二者的计算速度和计算精度。 二、实验内容: Ø通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点 三、程序与实例 Ø二分法 算法: 给定区间[a,b],并设与符号相反,取为根的容许误差,为的容许误差。 (1)令c=(a+b)/2 (2)如果(c-a)<或,则输出,结束;否则执行(3), (3)如果,则令;否则则令,重复 (1), (2),(3)。 书上课后习题1(老教材)。 源代码: #include #definef(x)(x*x-x-1) intmain() { doublewucha=0.05; doublea=1.0,b=2.0; doublem; intn=4; for(inti=1;i<=n;i++) { m=(b+a)/2.0; if(f(m)>0) { b=m; } else { a=m; } cout<<"("< } cout<<"最后区间:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 计算机 实验