一、实验原理
根据数值积分算法和非线性方程求解的相关知识和算法编程完成本实验
二、实验内容
1)必做题:PPT第2章,利用复化梯形积分的自适应算法计算下面的积分,使误差不超过0.5*10-6
选做题:编程实现龙贝格积分法,
2)必做题,用弦截法验真课本P69例3.5
选做题:二分法,牛顿法
三、实验过程(可以文字说明+运行结果截图)
1)复化梯形积分
实验说明:
数据说明
1.矩阵 A:
一个 N×N 的系数矩阵,在这个例子中是一个 3x3 矩阵。
2.向量 b:
一个长度为 N 的常数向量。
3.初始向量 x:
一个长度为 N 的初始猜测向量,初始值设为零向量。
4.迭代次数和收敛条件:
最大迭代次数设为 1000 次,收敛误差阈值为 0.0001。
代码说明
1. composite_trapezoid函数:
使用复合梯形公式对给定的函数进行数值积分。
首先检查区间上限是否小于区间下限,若是则抛出异常。
初始化积分值为区间两端点的函数值的平均值乘以区间长度,然后进入迭代过程。
在每次迭代中,将区间等分为两部分,并计算每部分的积分值,然后将它们相加并除以2作为新的积分值。
2. composite_Simpson函数:
使用复合Simpson公式对给定的函数进行数值积分。
首先检查区间上限是否小于区间下限,若是则抛出异常。
初始化积分值为区间两端点的函数值的加权平均,并进入迭代过程。
在每次迭代中,将区间等分为两部分,并计算每部分的积分值,然后按Simpson公式的权重系数计算新的积分值。
3.异常处理:
在数值积分过程中,可能会出现区间上限小于区间下限的情况,或者函数在区间内有奇点(例如除零),此时程序会抛出异常,并输出相应的错误信息。
4.main函数:
在 main() 函数中定义了一个 lambda 函数,用于表示被积函数。
然后调用 composite_trapezoid 和 composite_Simpson 函数进行积分计算,并输出结果。
算法说明
1.复合梯形公式:
将区间等分为多个小区间,对每个小区间应用梯形面积公式,然后将所有小区间的面积相加得到总积分。
迭代过程中,每次将区间等分为两部分,计算每部分的积分值,然后将它们相加并除以2作为新的积分值,直到满足收敛条件。
2.复合Simpson公式:
类似于复合梯形公式,但是使用Simpson公式来计算每个小区间的积分值。
迭代过程中,每次将区间等分为两部分,计算每部分的积分值,然后按Simpson公式的权重系数计算新的积分值,直到满足收敛条件。
运行截图:
1)龙贝格积分法
实验说明:
数据说明
1.被积函数 f(x):
在本例中为 sin(x)。
2.积分区间 [a,b]:
用户输入的积分下限 a 和积分上限 b。
3.迭代次数 n:
用户指定的迭代次数,用于控制龙贝格积分的精度。
代码说明
1.rombergIntegration函数:
使用龙贝格积分法对给定的函数进行数值积分。
初始化龙贝格积分表格 T,其中第一列应用梯形法则。
然后进行迭代,计算龙贝格积分表格中的其他元素,直到满足迭代次数 n。
最终返回龙贝格积分表格中第一行最后一个元素作为近似值。
2.main函数:
通过 Scanner 从用户输入获取积分区间的下限 a 和上限 b,以及迭代次数 n。
调用 rombergIntegration 函数进行龙贝格积分计算,并输出结果。
算法说明
龙贝格积分法:
首先,应用梯形法则计算积分区间上的初始值。
然后,使用递推公式更新龙贝格积分表格中的元素,直到达到所需的迭代次数。
每次迭代过程中,通过插值方法利用已有的积分值来计算更高阶的积分值。
最终得到的第一行最后一个元素即为积分的近似值。
运行截图:
2)弦截法
实验说明:
数据说明
1.被求解方程:
在本例中为
2.初始猜测值:
初始猜测值
3.收敛条件:
绝对误差阈值 ϵ。
代码说明
1.secantMethod函数:
使用弦截法对给定的方程 f(x) 进行求根。
初始化变量 x2 为0,然后进入循环。
在每次迭代中,计算新的近似根 x2,直到满足收敛条件。
返回最终的近似根 x2。
2. main函数:
定义初始猜测值 ,以及绝对误差阈值 ϵ。
调用 secantMethod 函数进行求根计算,并输出结果。
算法说明
弦截法:
在给定初始猜测值
的情况下,通过一条直线(弦)来逼近根的位置。
每次迭代中,根据函数在两个点处的函数值和斜率,计算弦与 x 轴的交点,作为下一个近似根。
不断迭代,直到满足收敛条件,即函数值的绝对值小于给定的绝对误差阈值。
运行截图:
2)二分法
实验说明:
数据说明
1.被求解方程:
在本例中为
2.初始猜测值:
初始猜测值
3.收敛条件:
绝对误差阈值 ϵ。
代码说明
1.bisectionMethod函数:
使用二分法对给定的方程 f(x) 进行求根。
初始化中间值 c 为0,然后进入循环。
在每次迭代中,将区间等分为两部分,然后检查中间值 c 是否满足根的条件。
如果满足根的条件,则返回中间值 c;否则根据函数在中间值 c 和区间两端点处的函数值的符号来更新区间的上下限。
不断迭代,直到满足收敛条件,即区间的长度小于给定的绝对误差阈值。
2.main函数:
定义初始区间的上下限 a 和 b,以及绝对误差阈值 ϵ。
调用 bisectionMethod 函数进行求根计算,并输出结果。
算法说明
二分法:
在给定区间的两个端点处,函数的值具有不同的符号。
每次迭代中,将当前区间等分为两部分,然后根据函数在中间点处的值的符号确定新的区间。
不断迭代,直到满足收敛条件,即区间的长度小于给定的绝对误差阈值。
运行截图:
2)牛顿法
实验说明:
数据说明
1.被求解方程:
在本例中为
2.初始猜测值:
初始猜测值
3.收敛条件:
绝对误差阈值 ϵ。
代码说明
1.newtonRaphsonMethod函数:使用牛顿法对给定的方程 f(x) 进行求根。
初始化变量 x1 为0,然后进入循环。
在每次迭代中,根据函数在当前猜测值处的值和导函数的值,计算下一个近似根。
不断迭代,直到满足收敛条件,即函数值的绝对值小于给定的绝对误差阈值。
2. main函数:
定义初始猜测值
和绝对误差阈值 ϵ。
调用 newtonRaphsonMethod 函数进行求根计算,并输出结果。
算法说明
牛顿法:
在给定初始猜测值
的情况下,通过迭代计算下一个近似根。
每次迭代中,根据函数在当前猜测值处的值和导函数的值,利用线性近似来计算下一个近似根。
不断迭代,直到满足收敛条件,即函数值的绝对值小于给定的绝对误差阈值。
运行截图: