第一题:求数值积分,精确到。
解:romberg方法基本思想:
根据。分别算出t0(0), t0(1),t1(0)……的值,若对角线上的值的差足够小则停止,否则继续计算,直到足够小为止。
t0(0)=
其中sin1= 0.841471 sin(-1)= 0.841471
t0(1)= t0(0)+
t1(0)==0.479366
t0(2)=t0(1)
t1(1) =0.479289
t2(0)==0.479284
t0(3)=t0(2)=0.478645
t1(2)==0.478645
t2(1)=t0(1)=0.438098
t3(0)==0.479284
化简成缩略图,根据公式可一目了然:
t0(0)=,t0(1)=0.469049, t1(0)= 0.479366
t0(2)=0.476729, t1(1) =0.479289 t2(0)=0.479284
t0(3)= 0.478645, t1(2)=0.479284, t2(1)=0.479284,t3(0)=0.479284
由于t3(0)就已达预定精度,故取i t3(0)=0.479284
第二题:设实验数据如下。
建立形如最小二乘拟合。
解:已知曲线,将**中所有点依次代入得到方程:
改写成矩阵形式:
根据公式进行转置:
上式整理得: =
整理为方程如下:
得解为:于是所求拟合曲线为。
第三题 :给定初值问题。
经典四阶r-k方法,分别取,计算并打印各点的值,并于准确值相比较。
解:四阶龙格-库塔算法公式如下:
当步长h=0.1时,运行结果如下:
当步长h=0.025时,运行结果如下:
当步长h=0.01时,运行结果如下:
与准确值相比较:
注:(因数据庞大,此处只取前十一个数作比较)
用编程实现如下:
注:此处只举例出当步长h=0.1时执行的程序,当h=0.025和h=0.01时只需稍加修改即可。
#include<>
#include<>
*n表示几等分,n+1表示它输出的个数*/
int rungekutta(double y0,double a,double b,int n,double *x,double *y,double (*function)(double,double))
double h=(b-a)/n,k1,k2,k3,k4;
int i;
x[0]=a;
y[0]=y0;
for(i=0;i{
x[i+1]=x[i]+h;
k1=function(x[i],y[i]);
k2=function(x[i]+h/2,y[i]+h*k1/2);
k3=function(x[i]+h/2,y[i]+h*k2/2);
k4=function(x[i]+h,y[i]+h*k3);
y[i+1]=y[i]+h*(k1+2*k2+2*k3+k4)/6;
return 1;
double function(double x,double y)
return -30*y+30*x*x+2*x;
/例子求y'=-30y+30*x*x+2*x(0int main()
double x[11],y[11];
printf("用四阶龙格-库塔方法");
rungekutta(1,0,1,10,x,y,function);
for(int i=0;i<11;i++)
printf("x[%d]=%f,y[%d]=%f",i,x[i],i,y[i]);
return 1;
计算方法上机作业
计算方法上机报告。姓名 学号 班级 上课班级 1 算法思想。2 算法结构。3 matlab源程序。clear 清除工作空间变量。clc 清除命令窗口命令。m input 请输入有效数字的位数m输入有效数字的位数。s 0for n 0 50 t 1 16 n 4 8 n 1 2 8 n 4 1 8 n...
计算方法上机作业
表2 新算法迭代结果1 初值 0,精度ep 初始选择因子p 修正因子 0.1,最大迭代次数n 0,局部修正次数m分别取1,2,3次,f 49881192646492934000000000000.000000 表3 新算法迭代法结果2 初值 0,精度ep 初始选择因子p 修正因子 0.05,最大迭代...
计算方法上机作业
计算方法第四次上机报告。2.用欧拉方法解初值。y 10x 1 y 0 x 1 y 0 0 取步长h 0.1,保留5位有效数字,并与准确解相比较。分析 该题目考察欧拉方法解初值问题。程序如下 function heun a,b,y0,n h b a n x a h b y y0 ones 1,n 1 ...