数值实验报告

合集下载

迭代法解线性方程组数值分析实验报告

迭代法解线性方程组数值分析实验报告

迭代法解线性方程组数值分析实验报告一、实验目的本次实验旨在深入研究和掌握迭代法求解线性方程组的基本原理和方法,并通过数值实验分析其性能和特点。

具体目标包括:1、理解迭代法的基本思想和迭代公式的推导过程。

2、掌握雅克比(Jacobi)迭代法、高斯赛德尔(GaussSeidel)迭代法和超松弛(SOR)迭代法的算法实现。

3、通过实验比较不同迭代法在求解不同类型线性方程组时的收敛速度和精度。

4、分析迭代法的收敛性条件和影响收敛速度的因素。

二、实验原理1、线性方程组的一般形式对于线性方程组$Ax = b$,其中$A$ 是$n×n$ 的系数矩阵,$x$ 是$n$ 维未知向量,$b$ 是$n$ 维常向量。

2、迭代法的基本思想迭代法是从一个初始向量$x^{(0)}$出发,按照某种迭代公式逐步生成近似解序列$\{x^{(k)}\}$,当迭代次数$k$ 足够大时,$x^{(k)}$逼近方程组的精确解。

3、雅克比迭代法将系数矩阵$A$ 分解为$A = D L U$,其中$D$ 是对角矩阵,$L$ 和$U$ 分别是下三角矩阵和上三角矩阵。

雅克比迭代公式为:$x^{(k+1)}= D^{-1}(b +(L + U)x^{(k)})$。

4、高斯赛德尔迭代法在雅克比迭代法的基础上,每次计算新的分量时立即使用刚得到的最新值,迭代公式为:$x_i^{(k+1)}=(b_i \sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}\sum_{j=i+1}^{n}a_{ij}x_j^{(k)})/a_{ii}$。

5、超松弛迭代法在高斯赛德尔迭代法的基础上引入松弛因子$\omega$,迭代公式为:$x_i^{(k+1)}= x_i^{(k)}+\omega((b_i \sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}\sum_{j=i}^{n}a_{ij}x_j^{(k)})/ a_{ii} x_i^{(k)})$。

数值分析综合实验报告

数值分析综合实验报告

一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。

二、实验内容1. 插值方法(1)拉格朗日插值法:利用已知数据点构造多项式,以逼近未知函数。

(2)牛顿插值法:在拉格朗日插值法的基础上,通过增加基函数,提高逼近精度。

2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,通过不断缩小区间来逼近根。

(2)Newton法:利用函数的导数信息,通过迭代逼近根。

(3)不动点迭代法:将方程转化为不动点问题,通过迭代逼近根。

3. 数值积分方法(1)矩形法:将积分区间等分,近似计算函数值的和。

(2)梯形法:将积分区间分成若干等分,用梯形面积近似计算积分。

(3)辛普森法:在梯形法的基础上,将每个小区间再等分,提高逼近精度。

三、实验步骤1. 拉格朗日插值法(1)输入已知数据点,构造拉格朗日插值多项式。

(2)计算插值多项式在未知点的函数值。

2. 牛顿插值法(1)输入已知数据点,构造牛顿插值多项式。

(2)计算插值多项式在未知点的函数值。

3. 方程求根方法(1)输入方程和初始值。

(2)选择求解方法(二分法、Newton法、不动点迭代法)。

(3)迭代计算,直到满足精度要求。

4. 数值积分方法(1)输入被积函数和积分区间。

(2)选择积分方法(矩形法、梯形法、辛普森法)。

(3)计算积分值。

四、实验结果与分析1. 插值方法(1)拉格朗日插值法:通过构造多项式,可以较好地逼近已知数据点。

(2)牛顿插值法:在拉格朗日插值法的基础上,增加了基函数,提高了逼近精度。

2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,计算简单,但收敛速度较慢。

(2)Newton法:利用函数的导数信息,收敛速度较快,但可能存在数值不稳定问题。

(3)不动点迭代法:将方程转化为不动点问题,收敛速度较快,但可能存在初始值选择不当的问题。

3. 数值积分方法(1)矩形法:计算简单,但精度较低。

数值计算方法实验报告

数值计算方法实验报告

数值计算方法实验报告一、实验介绍本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。

本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。

二、实验内容1. 数值微积分数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。

本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。

2. 线性方程组的求解线性方程组求解是数值计算领域中的重要内容。

本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。

3. 插值与拟合插值与拟合是数值计算中的另一个重要内容。

本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。

4. 常微分方程的数值解常微分方程的数值解是数值计算中的难点之一。

本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。

三、实验结果通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。

在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。

在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。

在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。

在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度更高。

四、实验总结本次实验通过对于数值计算方法的模拟实现,进一步加深了我们对于数值计算方法的理解和掌握。

在实验过程中,我们了解了数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等多个方面的内容,在实践中进一步明确了不同方法的特点和优缺点,并可以通过比较不同方法的计算效率和数值精度来选择合适的数值计算方法。

数值分析2024上机实验报告

数值分析2024上机实验报告

数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。

在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。

本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。

一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。

1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。

常见的数值方法有二分法、牛顿法、割线法等。

在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。

2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。

插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。

在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

3.数值积分这部分实验要求使用数值方法计算给定函数的积分。

常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。

在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。

4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。

常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。

在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。

结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。

2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。

结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。

数值分析实验报告--实验2--插值法

数值分析实验报告--实验2--插值法

1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。

显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。

我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。

龙格(Runge )给出一个例子是极著名并富有启发性的。

设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。

实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。

(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。

(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。

1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。

1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。

Matlab 脚本文件为Experiment2_1_1fx.m 。

可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。

数值分析积分实验报告(3篇)

数值分析积分实验报告(3篇)

第1篇一、实验目的本次实验旨在通过数值分析的方法,研究几种常见的数值积分方法,包括梯形法、辛普森法、复化梯形法和龙贝格法,并比较它们在计算精度和效率上的差异。

通过实验,加深对数值积分理论和方法的理解,提高编程能力和实际问题解决能力。

二、实验内容1. 梯形法梯形法是一种基本的数值积分方法,通过将积分区间分割成若干个梯形,计算梯形面积之和来近似积分值。

实验中,我们选取了几个不同的函数,对积分区间进行划分,计算积分近似值,并与实际积分值进行比较。

2. 辛普森法辛普森法是另一种常见的数值积分方法,它通过将积分区间分割成若干个等距的区间,在每个区间上使用二次多项式进行插值,然后计算多项式与x轴围成的面积之和来近似积分值。

实验中,我们对比了辛普森法和梯形法的计算结果,分析了它们的精度差异。

3. 复化梯形法复化梯形法是对梯形法的一种改进,通过将积分区间分割成多个小区间,在每个小区间上使用梯形法进行积分,然后计算所有小区间积分值的和来近似积分值。

实验中,我们对比了复化梯形法和辛普森法的计算结果,分析了它们的精度和效率。

4. 龙贝格法龙贝格法是一种通过外推加速提高计算精度的数值积分方法。

它通过比较使用不同点数(n和2n)的积分结果,得到更高精度的积分结果。

实验中,我们使用龙贝格法对几个函数进行积分,并与其他方法进行了比较。

三、实验步骤1. 编写程序实现梯形法、辛普森法、复化梯形法和龙贝格法。

2. 选取几个不同的函数,对积分区间进行划分。

3. 使用不同方法计算积分近似值,并与实际积分值进行比较。

4. 分析不同方法的精度和效率。

四、实验结果与分析1. 梯形法梯形法在计算精度上相对较低,但当积分区间划分足够细时,其计算结果可以接近实际积分值。

2. 辛普森法辛普森法在计算精度上优于梯形法,但当积分区间划分较细时,计算量较大。

3. 复化梯形法复化梯形法在计算精度上与辛普森法相当,但计算量较小。

4. 龙贝格法龙贝格法在计算精度上优于复化梯形法,且计算量相对较小。

数值计算基础实验报告(3篇)

第1篇一、实验目的1. 理解数值计算的基本概念和常用算法;2. 掌握Python编程语言进行数值计算的基本操作;3. 熟悉科学计算库NumPy和SciPy的使用;4. 分析算法的数值稳定性和误差分析。

二、实验内容1. 实验环境操作系统:Windows 10编程语言:Python 3.8科学计算库:NumPy 1.19.2,SciPy 1.5.02. 实验步骤(1)Python编程基础1)变量与数据类型2)运算符与表达式3)控制流4)函数与模块(2)NumPy库1)数组的创建与操作2)数组运算3)矩阵运算(3)SciPy库1)求解线性方程组2)插值与拟合3)数值积分(4)误差分析1)舍入误差2)截断误差3)数值稳定性三、实验结果与分析1. 实验一:Python编程基础(1)变量与数据类型通过实验,掌握了Python中变量与数据类型的定义方法,包括整数、浮点数、字符串、列表、元组、字典和集合等。

(2)运算符与表达式实验验证了Python中的算术运算、关系运算、逻辑运算等运算符,并学习了如何使用表达式进行计算。

(3)控制流实验学习了if-else、for、while等控制流语句,掌握了条件判断、循环控制等编程技巧。

(4)函数与模块实验介绍了Python中函数的定义、调用、参数传递和返回值,并学习了如何使用模块进行代码复用。

2. 实验二:NumPy库(1)数组的创建与操作通过实验,掌握了NumPy数组的基本操作,包括创建数组、索引、切片、排序等。

(2)数组运算实验验证了NumPy数组在数学运算方面的优势,包括加、减、乘、除、幂运算等。

(3)矩阵运算实验学习了NumPy中矩阵的创建、操作和运算,包括矩阵乘法、求逆、行列式等。

3. 实验三:SciPy库(1)求解线性方程组实验使用了SciPy库中的线性代数模块,通过高斯消元法、LU分解等方法求解线性方程组。

(2)插值与拟合实验使用了SciPy库中的插值和拟合模块,实现了对数据的插值和拟合,并分析了拟合效果。

数值的转换实验报告

一、实验目的1. 了解数值转换的基本原理和方法;2. 掌握十进制、二进制、八进制、十六进制之间的相互转换;3. 熟悉进制转换在实际应用中的意义。

二、实验原理数值转换是计算机科学中一项基本操作,不同的进制之间可以相互转换。

常见的进制有十进制、二进制、八进制和十六进制。

下面分别介绍它们之间的转换方法。

1. 十进制与二进制之间的转换(1)十进制转二进制:将十进制数转换为二进制数的方法是不断地除以2,并记录下每次除法运算的余数。

将得到的余数从下到上排列,即为所求的二进制数。

(2)二进制转十进制:将二进制数转换为十进制数的方法是将每一位上的数乘以2的幂次方,然后将得到的数相加。

2. 十进制与八进制之间的转换(1)十进制转八进制:将十进制数转换为八进制数的方法是不断地除以8,并记录下每次除法运算的余数。

将得到的余数从下到上排列,即为所求的八进制数。

(2)八进制转十进制:将八进制数转换为十进制数的方法是将每一位上的数乘以8的幂次方,然后将得到的数相加。

3. 十进制与十六进制之间的转换(1)十进制转十六进制:将十进制数转换为十六进制数的方法是不断地除以16,并记录下每次除法运算的余数。

余数在0~9之间时直接写出,余数在10~15之间时用字母A~F表示。

将得到的余数从下到上排列,即为所求的十六进制数。

(2)十六进制转十进制:将十六进制数转换为十进制数的方法是将每一位上的数乘以16的幂次方,然后将得到的数相加。

三、实验仪器与材料1. 计算机;2. 实验指导书;3. 编程软件(如Visual Studio、Eclipse等)。

四、实验步骤1. 编写程序实现十进制与二进制之间的转换;2. 编写程序实现十进制与八进制之间的转换;3. 编写程序实现十进制与十六进制之间的转换;4. 验证程序的正确性。

五、实验结果与分析1. 十进制与二进制之间的转换程序代码如下:```c#include <stdio.h>void dec_to_bin(int num) {int binary[32], i = 0;while (num > 0) {binary[i++] = num % 2;num /= 2;}for (int j = i - 1; j >= 0; j--)printf("%d", binary[j]);}int main() {int num;printf("请输入一个十进制数:");scanf("%d", &num);printf("转换后的二进制数为:%d\n", num); dec_to_bin(num);return 0;}```2. 十进制与八进制之间的转换程序代码如下:```c#include <stdio.h>void dec_to_oct(int num) {int octal[32], i = 0;while (num > 0) {octal[i++] = num % 8;num /= 8;}for (int j = i - 1; j >= 0; j--)printf("%d", octal[j]);}int main() {int num;printf("请输入一个十进制数:");scanf("%d", &num);dec_to_oct(num);return 0;}```3. 十进制与十六进制之间的转换程序代码如下:```c#include <stdio.h>void dec_to_hex(int num) {int hex[32], i = 0;char hex_char[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};while (num > 0) {hex[i++] = num % 16;num /= 16;}for (int j = i - 1; j >= 0; j--)printf("%c", hex_char[hex[j]]);}int main() {int num;printf("请输入一个十进制数:");scanf("%d", &num);dec_to_hex(num);return 0;}```六、实验总结通过本次实验,我们了解了数值转换的基本原理和方法,掌握了十进制、二进制、八进制、十六进制之间的相互转换。

数值分析实验报告心得(3篇)

第1篇在数值分析这门课程的学习过程中,我深刻体会到了理论知识与实践操作相结合的重要性。

通过一系列的实验,我对数值分析的基本概念、方法和应用有了更加深入的理解。

以下是我对数值分析实验的心得体会。

一、实验目的与意义1. 巩固数值分析理论知识:通过实验,将课堂上学到的理论知识应用到实际问题中,加深对数值分析概念和方法的理解。

2. 培养实际操作能力:实验过程中,我学会了使用Matlab等软件进行数值计算,提高了编程能力。

3. 增强解决实际问题的能力:实验项目涉及多个领域,通过解决实际问题,提高了我的问题分析和解决能力。

4. 培养团队协作精神:实验过程中,我与同学们分工合作,共同完成任务,培养了团队协作精神。

二、实验内容及方法1. 实验一:拉格朗日插值法与牛顿插值法(1)实验目的:掌握拉格朗日插值法和牛顿插值法的原理,能够运用这两种方法进行函数逼近。

(2)实验方法:首先,我们选择一组数据点,然后利用拉格朗日插值法和牛顿插值法构造插值多项式。

最后,我们将插值多项式与原始函数进行比较,分析误差。

2. 实验二:方程求根(1)实验目的:掌握二分法、Newton法、不动点迭代法、弦截法等方程求根方法,能够运用这些方法求解非线性方程的根。

(2)实验方法:首先,我们选择一个非线性方程,然后运用二分法、Newton法、不动点迭代法、弦截法等方法求解方程的根。

最后,比较不同方法的收敛速度和精度。

3. 实验三:线性方程组求解(1)实验目的:掌握高斯消元法、矩阵分解法等线性方程组求解方法,能够运用这些方法求解线性方程组。

(2)实验方法:首先,我们构造一个线性方程组,然后运用高斯消元法、矩阵分解法等方法求解方程组。

最后,比较不同方法的计算量和精度。

4. 实验四:多元统计分析(1)实验目的:掌握多元统计分析的基本方法,能够运用这些方法对数据进行分析。

(2)实验方法:首先,我们收集一组多元数据,然后运用主成分分析、因子分析等方法对数据进行降维。

数值分析实验报告总结

一、实验背景数值分析是研究数值计算方法及其理论的学科,是计算机科学、数学、物理学等领域的重要基础。

为了提高自身对数值分析理论和方法的理解,我们进行了数值分析实验,通过实验加深对理论知识的掌握,提高实际操作能力。

二、实验目的1. 理解数值分析的基本理论和方法;2. 掌握数值分析实验的基本步骤和技巧;3. 培养实验设计和数据分析能力;4. 提高编程和计算能力。

三、实验内容本次实验主要分为以下几个部分:1. 线性方程组求解实验:通过高斯消元法、LU分解法等求解线性方程组,并分析算法的稳定性和误差;2. 矩阵特征值问题计算实验:利用幂法、逆幂法等计算矩阵的特征值和特征向量,分析算法的收敛性和精度;3. 非线性方程求根实验:运用二分法、牛顿法、不动点迭代法等求解非线性方程的根,比较不同算法的优缺点;4. 函数插值实验:运用拉格朗日插值、牛顿插值等方法对给定的函数进行插值,分析插值误差;5. 常微分方程初值问题数值解法实验:运用欧拉法、改进的欧拉法、龙格-库塔法等求解常微分方程初值问题,比较不同算法的稳定性和精度。

四、实验过程1. 线性方程组求解实验:首先,编写程序实现高斯消元法、LU分解法等算法;然后,对给定的线性方程组进行求解,记录计算结果;最后,分析算法的稳定性和误差。

2. 矩阵特征值问题计算实验:编写程序实现幂法、逆幂法等算法;然后,对给定的矩阵进行特征值和特征向量的计算,记录计算结果;最后,分析算法的收敛性和精度。

3. 非线性方程求根实验:编写程序实现二分法、牛顿法、不动点迭代法等算法;然后,对给定的非线性方程进行求根,记录计算结果;最后,比较不同算法的优缺点。

4. 函数插值实验:编写程序实现拉格朗日插值、牛顿插值等方法;然后,对给定的函数进行插值,记录计算结果;最后,分析插值误差。

5. 常微分方程初值问题数值解法实验:编写程序实现欧拉法、改进的欧拉法、龙格-库塔法等算法;然后,对给定的常微分方程初值问题进行求解,记录计算结果;最后,比较不同算法的稳定性和精度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科实验报告课程名称:计算机数值方法实验地点:A206专业班级:软件工程1416 学号:2014005978 学生姓名:石慧宇指导教师:王华2016 年4月实验一方程求根一、实验目的和要求熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。

至少选择上述方法中的一种算法(可选多种算法进行对比)求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-x|<0.5×10-5n二、实验内容和原理f(x)在区间(x,y)上连续先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)<0,f(b)>0,a<b①如果f[(a+b)/2]=0,该点就是零点,如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用中点函数值判断。

如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2<=b,从①开始继续使用中点函数值判断。

这样就可以不断接近零点。

通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值三、主要仪器设备VC6.0 笔记本计算机四、操作方法与实验步骤#include"iostream"#include<math.h>using namespace std;float Pro(float x) {return x*x*x + 4 * x*x - 10;}float Half(float left, float right) {float mid = ((right + left) / 2);float mod = (right - left) / 2;float x;if (mod < 0.5 * pow(10,-5) || Pro(mid) == 0)return mid;else if (Pro(mid)*Pro(right) < 0)x=Half(mid, right);elsex=Half(left, mid);return x;}void main() {cout << "方程的根是" << Half(1, 2);cout<<'\n';}五、实验结果与分析六、讨论、心得由于长时间没有用C语言编程,不少语法、函数变得生疏,导致程序经常报错,在学习上算法时学习了迭代法,在编程时采用了迭代法。

实验二 线性方程组的直接解法一、实验目的和要求熟悉消元法、LU 分解法,至少选择上述方法中的一种算法(可选多种算法进行对比)求解下列方程组:① ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡13814142210321321x x x 二、实验内容和原理高斯分解法:⑴将原方程组化为三角形方阵的方程组: l ik =a ik /a kka ij = a ij - l ik * a kj k=1,2,…,n-1i=k+1,k+2, …,n j=k+1,k+2, …,n+1⑵由回代过程求得原方程组的解: x n = a nn+1/ a nnx k =( a kn+1-∑a kj x j )/ a kk (k=n-1,n-2, …,2,1)LU 分解法:将系数矩阵A 转化为A=L*U, L 为单位下三角矩阵,U 为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x.三、主要仪器设备VC6.0 笔记本计算机四、操作方法与实验步骤#include<iostream> using namespace std; int main(){int i,a1,b1,c1;int a[4]={1,2,3,14},b[4]={0,1,2,8},c[4]={2,4,1,13}; a1=a[0]; b1=b[0]; c1=c[0];for(i=0;i<4;i++){b[i]=b[i]-a[i]/a1*b1; c[i]=c[i]-a[i]/a1*c1;}b1=b[1];c1=c[1];for(i=1;i<4;i++){c[i]=c[i]-b[i]/b1*c1;}int x1,x2,x3;x3=c[3]/c[2];x2=(b[3]-b[2]*x3)/b[1];x1=(a[3]-a[2]*x3-a[1]*x2)/a[0];cout<<"x1="<<x1<<" "<<"x2="<<x2<<" "<<"x3="<<x3<<'\n';}五、实验结果与分析六、讨论、心得编写这个程序时,我采用的是最一般的消元方法,即把矩阵化为一个上三角矩阵,接着回代,逐一算出要求的解。

这个程序的缺点是只能处理三行三列的程序,使得求解的问题过于特殊化。

实验三 线性方程组的迭代解法一、实验目的和要求使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。

二、实验内容和原理雅克比迭代法:设线性方程组A x =b的系数矩阵A 可逆且主对角元素a 11,a 22,…,a nn 均不为零,令D=diag(a 11,a 22,…,a nn )并将A 分解成A=(A-D)+D从而线性方程组可写成D x =(D-A)x +b则有迭代公式x (k+1)=B 1x (k)+f 1其中,B 1=I-D -1A,f 1=D -1b 。

三、主要仪器设备VC6.0 笔记本计算机四、操作方法与实验步骤#include "Stdio.h"#include "math.h" #define N 3 void main() {double a[N][N+1]; /*方程组系数及常数项的二维数组*/ double b[N]; /*近似解的组合*/double b1[N]; /*近似解解前一个的组合*/ double s; /*为叠加准备的变量*/ int i,j;⎪⎩⎪⎨⎧=+--=-+-=--2.453.82102.7210321321321x x x x x x x x xprintf("输入系数及常数项矩阵:");printf("\n");for(i=0;i<N;i++)/*输入方程组系数及常数项*/{ for(j=0;j<=N;j++)scanf("%lf",&a[i][j]);}printf("输入解的初值:");printf("\n");for(i=0;i<N;i++) /*输入解的初值*/scanf("%lf",&b[i]);printf("迭代列表如下:");printf("\n");do {for(i=0;i<N;i++)b1[i]=b[i];for(i=0;i<N;i++) {s=0;for(j=0;j<N;j++){ if(i!=j)s=s+a[i][j]*b[j];}b[i]=(a[i][N]-s)/a[i][i];}for(j=0;j<N;j++) {printf("%lf ",b[j]);}printf("\n");}while(fabs(b1[0]-b[0])>0.00005&&fabs(b1[1]-b[1])>0.00005&&fabs(b1[2]-b[2])>0.00005);}五、实验结果与分析六、讨论、心得在使用迭代法求解方程组时,其精确度是通过前一个所求出的解与当前的解的值差的绝对值所决定的。

而且在使用迭代法求解时需赋初值,一般赋的都是0实验四代数插值一、实验目的和要求使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。

二、实验内容和原理设函数在区间[a,b]上n+1互异节点x0,x1,…,xn上的函数值分别为y0,y1,…,yn,求n次插值多项式Pn(x),满足条件Pn(xj)=yj, j=0,1,…,n令Ln (x)=yl(x)+y1l1(x)+…+ynln(x)= ∑yili(x)其中l0(x),l1(x),…, ln(x) 为以x,x1,…,xn为节点的n次插值基函数,则Ln(x)是一次数不超过n的多项式,且满足L n (xj)=yj, L=0,1,…,n再由插值多项式的唯一性,得P n (x)≡Ln(x)三、主要仪器设备VC6.0 笔记本计算机四、操作方法与实验步骤#include "Stdio.h"#define N 6void main(){int i,j;double x[N],y[N];double lx[N]; /*基函数的一维数组*/ double xi; /*xi为题目中给定的变量*/ double Lx; /*所要求的结果*/printf("输出(x,f(x)):");printf("\n");for(i=0;i<N;i++) /*输入(x,f(x))*/scanf("%lf%lf",&x[i],&y[i]);printf("输入要求的xi:");printf("\n");scanf("%lf",&xi); /*输入要求的xi*/printf("输出每个基函数的值:");printf("\n");for(i=0;i<N;i++) /*求N个基函数*/{ lx[i]=1;for(j=0;j<N;j++) {if(x[i]-x[j]!=0) {lx[i]=((xi-x[j])/(x[i]-x[j]))*lx[i];}}printf("lx(%d)=%lf\n",i,lx[i]);}Lx=0;for(i=0;i<N;i++) /*求插值多项式*/{ Lx=y[i]*lx[i]+Lx; }printf("结果为:");printf("%lf",Lx);/*打印出结果*/ }六、实验结果与分析六、讨论、心得拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。

相关文档
最新文档