数值计算实验报告
- 格式:doc
- 大小:767.50 KB
- 文档页数:21
第1篇一、实验目的本次实验旨在通过数值实验,验证不同优化算法在解决特定优化问题时的性能和效率。
实验选取了三种常用的优化算法:黄金分割法、复合形法和进化场优化算法(EFO),分别针对一个典型的无约束优化问题进行实验,并对比分析其性能。
二、实验内容1. 黄金分割法- 基本原理:黄金分割法是一种基于搜索区间分割的优化算法,通过不断缩小搜索区间,寻找最优解。
- 实验设计:选择一个无约束优化问题,设定初始搜索区间,通过迭代计算,逐步缩小搜索区间,直至满足终止条件。
2. 复合形法- 基本原理:复合形法是一种基于几何形状的优化算法,通过迭代构建一个复合形,逐渐逼近最优解。
- 实验设计:选择与黄金分割法相同的优化问题,设定初始复合形,通过迭代调整复合形顶点,直至满足终止条件。
3. 进化场优化算法(EFO)- 基本原理:EFO是一种基于种群的元启发式优化算法,通过模拟自然进化过程,寻找最优解。
- 实验设计:选择与黄金分割法和复合形法相同的优化问题,设定初始种群,通过迭代计算,不断进化种群,直至满足终止条件。
三、实验步骤1. 选择优化问题- 实验选取了如下无约束优化问题:\[ f(x) = \sum_{i=1}^{n} x_i^2, \quad x \in [-5, 5]^n \]- 目标:求解函数 \( f(x) \) 的最小值。
2. 算法实现- 黄金分割法:编写程序实现黄金分割法的基本原理,设置初始搜索区间和终止条件。
- 复合形法:编写程序实现复合形法的基本原理,设置初始复合形和终止条件。
- EFO:编写程序实现EFO算法的基本原理,设置初始种群和终止条件。
3. 实验参数设置- 黄金分割法:设置迭代次数为100,初始搜索区间为 \([-5, 5]\)。
- 复合形法:设置迭代次数为100,初始复合形顶点为随机选取。
- EFO:设置迭代次数为100,初始种群规模为10。
4. 实验结果分析- 对比三种算法的迭代次数、最优解值和收敛速度。
数值方法实验报告学院:化学化工学院专业:过程装备与控制工程工程班级:过控1201班学号:2012002487姓名:周波数值实验一1实验目的:1理解数值计算稳定性;2了解数值计算方法的必要性;3体会数值计算方法的收敛性与收敛速度2实验题目dx x x I ⎰=10sin 3实验原理1复合梯形公式 将区间],[b a 划分为n 等份,分点n k n a b h kh a x k ,,1,0,,⋅⋅⋅=-=+=,在每个子区间],[1+k k x x )(1,,1,0-⋅⋅⋅=n k 上采用梯形公式))()((2)(b f a f a b dx x f ba +-≈⎰,则得 )()]()([2)()(101101f R x f x f h dx x f dx x f I n n k k k n k x x b a k k ++===∑∑⎰⎰-=+-=+ 记)]()(2)([2)]()([21111b f x f a f h x f x f h T n k k n k k k n ++=+=∑∑-=-+ 4实验内容f=inline('sin(x)/(x)'); % 函数表达式可以更换;a=input('a='); %积分区间左端点b=input('b='); %积分区间右端点n=input('n='); %区间n 等分;h=(b-a)/n;temp=f(a);xk=a;for i=1:n-1xk=xk+h;temp=temp+2*f(xk);endtemp=temp+f(b);temp=temp*h/2;fprintf('\n复化梯形公式计算结果:%f',temp);5实验结果a=1b=2n=300复化梯形公式计算结果:0.659330>>6实验结果分析复合梯形公式的精度高于梯形公式,而且节点越多,步长越小,则精度越高。
数值分析第一次上机练习实验报告一、实验目的本次实验旨在通过上机练习,加深对数值分析方法的理解,并掌握实际应用中的数值计算方法。
二、实验内容1. 数值计算的基本概念和方法在本次实验中,我们首先回顾了数值计算的基本概念和方法。
数值计算是一种通过计算机进行数值近似的方法,其包括近似解的计算、误差分析和稳定性分析等内容。
2. 方程求解的数值方法接下来,我们学习了方程求解的数值方法。
方程求解是数值分析中非常重要的一部分,其目的是找到方程的实数或复数解。
我们学习了二分法、牛顿法和割线法等常用的数值求解方法,并对它们的原理和步骤进行了理论学习。
3. 插值和拟合插值和拟合是数值分析中常用的数值逼近方法。
在本次实验中,我们学习了插值和拟合的基本原理,并介绍了常见的插值方法,如拉格朗日插值和牛顿插值。
我们还学习了最小二乘拟合方法,如线性拟合和多项式拟合方法。
4. 数值积分和数值微分数值积分和数值微分是数值分析中的两个重要内容。
在本次实验中,我们学习了数值积分和数值微分的基本原理,并介绍了常用的数值积分方法,如梯形法和辛卜生公式。
我们还学习了数值微分的数值方法,如差商法和牛顿插值法。
5. 常微分方程的数值解法常微分方程是物理和工程问题中常见的数学模型,在本次实验中,我们学习了常微分方程的数值解法,包括欧拉法和四阶龙格-库塔法。
我们学习了这些方法的步骤和原理,并通过具体的实例进行了演示。
三、实验结果及分析通过本次实验,我们深入理解了数值分析的基本原理和方法。
我们通过实际操作,掌握了方程求解、插值和拟合、数值积分和数值微分以及常微分方程的数值解法等数值计算方法。
实验结果表明,在使用数值计算方法时,我们要注意误差的控制和结果的稳定性。
根据实验结果,我们可以对计算结果进行误差分析,并选择适当的数值方法和参数来提高计算的精度和稳定性。
此外,在实际应用中,我们还需要根据具体问题的特点和条件选择合适的数值方法和算法。
四、实验总结通过本次实验,我们对数值分析的基本原理和方法有了更加深入的了解。
第1篇一、实验目的1. 学习数值型数据的处理方法;2. 掌握描述性统计指标的计算方法;3. 熟悉数值型数据的可视化展示方法。
二、实验背景本实验以某地区某年居民收入数据为例,对数值型数据进行处理和分析。
数据包括居民总收入、家庭人口数、平均每人收入等指标。
三、实验数据居民总收入(万元):20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100家庭人口数:4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20平均每人收入(万元):5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5四、实验步骤1. 数据清洗与整理- 检查数据是否存在缺失值、异常值等;- 对数据进行排序,便于后续分析。
2. 描述性统计分析- 计算居民总收入、家庭人口数、平均每人收入的均值、中位数、众数、极值、标准差等指标;- 分析数据的分布情况,如正态分布、偏态分布等。
3. 数值型数据可视化展示- 绘制居民总收入、家庭人口数、平均每人收入的柱状图、折线图、散点图等;- 分析数据之间的关系,如居民总收入与家庭人口数的关系、平均每人收入与家庭人口数的关系等。
五、实验结果与分析1. 描述性统计分析- 居民总收入均值:60.2万元- 居民总收入中位数:60万元- 居民总收入众数:60万元- 居民总收入极值:20万元和100万元- 居民总收入标准差:11.5万元- 家庭人口数均值:12.1- 家庭人口数中位数:12- 家庭人口数众数:12- 家庭人口数极值:4和20- 家庭人口数标准差:2.9- 平均每人收入均值:5万元- 平均每人收入中位数:5万元- 平均每人收入众数:5万元- 平均每人收入极值:5万元- 平均每人收入标准差:0通过描述性统计分析,可以看出居民总收入、家庭人口数、平均每人收入都呈正态分布,且均值、中位数、众数相等。
第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
第1篇一、实验目的本次实验旨在通过编程实现数值分析中的几种重要算法,包括线性方程组求解、方程求根、插值与曲线拟合等,加深对数值分析理论的理解,提高编程能力和实际应用能力。
二、实验内容1. 线性方程组求解(1)高斯消元法:通过将矩阵化为上三角形式,再进行回代求解。
(2)克劳斯消元法:对矩阵进行逐行归一化处理,逐行消元。
(3)列主元素法:每次选取列主元素进行消元。
2. 方程求根(1)二分法:在给定区间内,通过不断缩小区间,逼近方程的根。
(2)Newton法:利用导数信息,通过迭代计算逼近方程的根。
(3)不动点迭代法:通过迭代过程,将初始值逐步逼近方程的根。
(4)弦截法:利用弦线与x轴的交点,近似求解方程的根。
3. 插值与曲线拟合(1)拉格朗日插值法:通过构造拉格朗日插值多项式,逼近函数在给定点的值。
(2)牛顿插值法:利用差商表,构造牛顿插值多项式,逼近函数在给定点的值。
(3)最小二乘法:通过最小化误差平方和,拟合曲线。
三、实验步骤1. 线性方程组求解(1)设计程序,实现高斯消元法。
(2)设计程序,实现克劳斯消元法。
(3)设计程序,实现列主元素法。
2. 方程求根(1)设计程序,实现二分法。
(2)设计程序,实现Newton法。
(3)设计程序,实现不动点迭代法。
(4)设计程序,实现弦截法。
3. 插值与曲线拟合(1)设计程序,实现拉格朗日插值法。
(2)设计程序,实现牛顿插值法。
(3)设计程序,实现最小二乘法。
四、实验结果与分析1. 线性方程组求解(1)高斯消元法:通过实验,验证高斯消元法可以成功求解线性方程组。
(2)克劳斯消元法:通过实验,验证克劳斯消元法可以成功求解线性方程组。
(3)列主元素法:通过实验,验证列主元素法可以成功求解线性方程组。
2. 方程求根(1)二分法:通过实验,验证二分法可以成功逼近方程的根。
(2)Newton法:通过实验,验证Newton法可以成功逼近方程的根。
(3)不动点迭代法:通过实验,验证不动点迭代法可以成功逼近方程的根。
一、实验目的1. 理解科学计数法的概念和意义。
2. 掌握科学计数法的表示方法。
3. 通过实验,学会运用科学计数法进行数值的表示和计算。
二、实验原理科学计数法是一种表示较大或较小数值的方法,将一个数表示成a乘以10的n次幂的形式,其中1≤|a|<10,n为整数。
这种记数方法在处理极大或极小的数值时,可以简化计算,提高计算效率。
三、实验材料1. 计算器2. 白纸3. 铅笔四、实验步骤1. 准备实验数据:列出一些需要用科学计数法表示的数值,如:0.00000025,34500000,6.022×10^23。
2. 将每个数值分别转换为科学计数法形式:- 对于0.00000025,首先将其转换为2.5×10^-7。
- 对于34500000,将其转换为3.45×10^7。
- 对于6.022×10^23,直接表示为6.022×10^23。
3. 对比原数值和科学计数法表示的数值,观察两者之间的差异。
4. 运用科学计数法进行数值的加减运算:- 计算2.5×10^-7 + 3.45×10^7,先将两个数值转换为同一次幂的科学计数法形式,然后进行相加。
- 计算6.022×10^23 - 3.45×10^7,同样先将两个数值转换为同一次幂的科学计数法形式,然后进行相减。
5. 运用科学计数法进行数值的乘除运算:- 计算2.5×10^-7 × 3.45×10^7,将两个数值的系数相乘,指数相加。
- 计算6.022×10^23 ÷ 3.45×10^7,将两个数值的系数相除,指数相减。
6. 将计算结果与直接计算结果进行对比,验证科学计数法的正确性。
五、实验结果与分析1. 通过实验,我们发现科学计数法在表示极大或极小的数值时,可以简化数值,提高计算效率。
2. 在进行数值的加减运算时,我们需要将数值转换为同一次幂的科学计数法形式,然后进行系数的加减运算。
计算数值方法实验报告学院:计算机与软件学院专业:计算机与科学技术班级:计算机学号:11姓名:某某太原理工大学学生实验报告分析:雅克比迭代公式简单,每迭代一次只须计算一次矩阵和向量的乘法。
在计算机运算时需要两组存储单元,以存放x(k)及x(k+1)。
实验地点综合楼六层606室指导教师王峥学院名称 计算机科学与技术 专业班级 计算机 学号 11 学生姓名 某某 实验日期 2011-6-20成绩课程名称数值计算方法实验题目实验四 最小二乘法拟合多项式一、课题名称(1)了解矩阵特征值与特征向量问题解法,掌握幂法。
(2)加深对矩阵特征值与特征向量问题求解方法的认识,掌握算法。
(3)会进行误差分析。
二、目的和意义学习使用最小二乘法拟合多项式 三、计算公式幂法:由已知的非零向量x0和矩阵A 的乘幂构造向量序列{xn}以计算矩阵A 的按模最大特征值及其特征向量的方法,称为幂法。
迭代公式:1max(),1,2,...k k k k kk k y Axm y k y x m结果可取111kk km y x或四、结构程序设计#include <iostream> #include <cmath> const int N(3);using namespace std;void matrixx(double A[N][N],double x[N],double y[N]) {cin>>x;while(1){int choice=3;cout<<"请您选择使用哪种插值法计算:"<<endl;cout<<" (0):退出"<<endl;cout<<" (1):Lagrange"<<endl;cout<<" (2):Newton"<<endl;cout<<"输入你的选择:";cin>>choice;//取得用户的选择项if(choice==2){cout<<"你选择了牛顿插值计算方法,其结果为:";y=Newton(x,count);break;//调用相应的处理函数}if(choice==1){cout<<"你选择了拉格朗日插值计算方法,其结果为:";y=lagrange(x,count);break;//调用相应的处理函数}if(choice==0)break;system("cls");cout<<"输入错误!!!!"<<endl;}cout<<x<<" , "<<y<<endl;//输出最终结果}五、结果讨论和分析分析:拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。
实验报告一、实验目的二、实验内容三、实验环境四.实验方法五、实验过程1实验步骤2 关键代码及其解释3 调试过程六、实验总结1.遇到的问题及解决过程2.产生的错误及原因分析3.体会和收获。
七、程序源代码:八、教师评语实验报告一.试验目的:练习用数值方法求解给定的非线性方程。
二.实验内容:求解人口方程: )1(5.43e 1004.156-+=λλλe要求误差小于410-。
三.实验环境:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。
四.实验方法:牛顿法牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为:,2,1,0,)()(1='-=+k x f x f x x k k k k ,当数列{}k x 收敛时,其极限值x 即为方程的解。
定理:给定方程],[,0)(b a x x f ∈=1)设0)()(<b f a f ;2))(x f ''在],[b a 上不变号,且],[,0)(b a x x f ∈≠'; 3)选取],[0b a x ∈,满足0)()(00>''x f x f ;则牛顿法产生的序列{}k x 收敛于0)(=x f 在],[b a 内的唯一解x 。
五.实验过程:1.编程: 用C 语言编出牛顿法的源程序。
2. 开机, 打开C 语言编译程序,键入所编程序源代码.3. 调试程序, 修改错误至能正确运行.六.实验总结:(1)牛顿法收敛速度快,但初值不容易确定,往往由于初值取得不当而使迭代不收敛或收敛慢,但若能保证)()(1+>K K x f x f (称为下山条件),则有可能收敛。
把新的近似值看作初值的话会比原来的取得好,有可能落入局部收敛的邻域。
(2)牛顿法要求)(x f '在x 附近不为零。
亦即x 只能是单根, 不能求重根。
可用重根加速收敛法求重根。
(3)牛顿法的每一步迭代中,都要计算一次导数值,若计算)(x f '比计算函数的近似值要麻烦的多。
计算机数值模拟实验报告一、实验目的本次计算机数值模拟实验的主要目的是通过运用计算机模拟技术,对特定的物理或工程问题进行分析和研究,以深入理解其内在机制,并预测其行为和结果。
二、实验原理计算机数值模拟是基于数学模型和数值方法来求解问题的一种手段。
在本次实验中,我们主要利用了有限元方法(Finite Element Method)和有限差分方法(Finite Difference Method)。
有限元方法将求解区域划分为若干个小单元,通过对每个单元的分析和组合,得到整个区域的近似解。
而有限差分方法则是通过对微分方程进行离散化,将其转化为差分方程,然后进行求解。
三、实验内容与步骤(一)问题描述本次实验选择了一个热传导问题作为研究对象。
考虑一个长方体金属块,其长、宽、高分别为 L、W、H,初始温度为 T0 。
金属块的一侧保持恒温 T1 ,其余侧面绝热。
我们需要求解在一定时间内金属块内部温度的分布情况。
(二)数学模型根据热传导定律和能量守恒原理,可以建立如下的偏微分方程:∂T/∂t = k(∂²T/∂x² +∂²T/∂y² +∂²T/∂z²)其中,T 为温度,t 为时间,k 为热传导系数。
(三)数值离散采用有限差分方法对上述偏微分方程进行离散化。
在空间上,将金属块划分为均匀的网格,网格间距为Δx、Δy、Δz 。
在时间上,采用显式或隐式的时间积分方法。
(四)编程实现使用 Python 语言编写数值模拟程序。
定义网格参数、初始条件、边界条件和热传导系数等参数。
通过循环计算每个网格点在不同时间步的温度值。
(五)结果分析运行程序后,得到不同时间点金属块内部的温度分布数据。
通过绘制温度云图和温度曲线,直观地展示温度的变化情况。
四、实验结果与分析(一)温度分布云图在不同时间点,金属块内部的温度分布呈现出明显的梯度。
靠近恒温侧面的温度逐渐升高,而远离恒温侧面的温度变化相对较慢。
数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
数值计算方法上机实验报告实验目的:复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。
利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。
上机练习任务:利用计算机基本C 语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。
掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。
一、各算法的算法原理及计算机程序框图1. 列主元高斯消去法算法原理:高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘一个方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。
列选住院是当高斯消元到第k 步时,从k 列的kk a 以下(包括kk a )的各元素中选出绝对值最大的,然后通过行交换将其交换到kk a 的位置上。
交换系数矩阵中的两行(包括常数项),只相当于两个方程的位置交换了,因此,列选主元不影响求解的结果。
●源程序:#define N 200#include "stdio.h"#include "math.h"FILE *fp1,*fp2;void LZ(){int n,i,j,k=0,l;double d,t,t1;static double x[N],a[N][N];fp1=fopen("a1.txt","r");fp2=fopen("b1.txt","w");fscanf(fp1,"%d",&n);for(i=0;i<n;++i)for(j=0;j<=n;++j){fscanf(fp1,"%lf",&a[i][j]);}{d=a[k][k];l=k;i=k+1;do{if(fabs(a[i][k])>fabs(d)) /*选主元*/{d=a[i][k];l=i;}i++;}while(i<n);if(d==0){printf("\n输入矩阵有误!\n");}else{ /*换行*/if(l!=k){for(j=k;j<=n;j++){t=a[l][j];a[l][j]=a[k][j];a[k][j]=t;}}}for(j=k+1;j<=n;j++) /*正消*/ a[k][j]/=a[k][k];for(i=k+1;i<n;i++)for(j=k+1;j<=n;j++)a[i][j]-=a[i][k]*a[k][j];k++;}while(k<n);if(k!=0){for(i=n-1;i>=0;i--) /*回代*/ {t1=0;for(j=i+1;j<n;j++)t1+=a[i][j]*x[j];x[i]=a[i][n]-t1;}for(i=0;i<n;i++)fprintf(fp2,"\n 方程组的根为x[%d]=%lf",i+1,x[i]); fclose(fp1); fclose(fp2); }main() { LZ(); }● 具体算例及求解结果:用列选主元法求解下列线性方程组⎪⎩⎪⎨⎧=++=++=-+28x x 23x 2232832321321321x x x x x x 输入3 输出结果:方程组的根为x[1]=6.0000001 2 -3 8 方程组的根为x[2]=4.000000 2 1 3 22 方程组的根为x[3]=2.000000 3 2 1 28● 输入变量、输出变量说明:输入变量:ij a 系数矩阵元素,i b 常向量元素 输出变量:12,,n b b b 解向量元素2. 杜里特尔分解法解线性方程● 算法原理:求解线性方程组Ax b =时,当对A 进行杜里特尔分解,则等价于求解LUx b =,这时可归结为利用递推计算相继求解两个三角形(系数矩阵为三角矩阵)方程组,用顺代,由Ly b =求出y ,再利用回带,由Ux y =求出x 。
一、实验目的1. 熟悉数值计算的基本原理和方法;2. 掌握数值分析中常用算法的编程实现;3. 通过实验验证算法的数值稳定性和收敛性;4. 提高运用MATLAB进行数值计算的能力。
二、实验内容1. 矩阵运算实验2. 线性方程组求解实验3. 矩阵特征值与特征向量计算实验4. 微分方程数值解法实验三、实验步骤1. 矩阵运算实验(1)编写程序实现矩阵的加法、减法、乘法、转置等基本运算;(2)编写程序实现矩阵的逆矩阵计算;(3)编写程序实现矩阵的行列式计算。
2. 线性方程组求解实验(1)编写程序实现高斯消元法求解线性方程组;(2)编写程序实现LU分解法求解线性方程组;(3)编写程序实现迭代法求解线性方程组。
3. 矩阵特征值与特征向量计算实验(1)编写程序实现幂法求矩阵的特征值与特征向量;(2)编写程序实现逆幂法求矩阵的特征值与特征向量;(3)编写程序实现QR算法求矩阵的特征值与特征向量。
4. 微分方程数值解法实验(1)编写程序实现欧拉法求解常微分方程;(2)编写程序实现改进的欧拉法求解常微分方程;(3)编写程序实现龙格-库塔法求解常微分方程。
四、实验结果与分析1. 矩阵运算实验通过实验,验证了矩阵的基本运算、逆矩阵和行列式的计算正确性。
2. 线性方程组求解实验通过实验,验证了高斯消元法、LU分解法和迭代法求解线性方程组的正确性。
同时,分析了不同算法的收敛速度和稳定性。
3. 矩阵特征值与特征向量计算实验通过实验,验证了幂法、逆幂法和QR算法求矩阵特征值与特征向量的正确性。
同时,分析了不同算法的收敛速度和稳定性。
4. 微分方程数值解法实验通过实验,验证了欧拉法、改进的欧拉法和龙格-库塔法求解常微分方程的正确性。
同时,分析了不同算法的收敛速度和稳定性。
五、实验总结通过本次数值实训实验,我对数值计算的基本原理和方法有了更深入的了解。
在实验过程中,我学会了如何运用MATLAB进行编程实现数值计算算法,并验证了算法的正确性和稳定性。
数值分析上机实验报告数值分析上机实验报告一、引言数值分析是一门研究利用计算机进行数值计算的学科。
通过数值分析,我们可以使用数学方法和算法来解决实际问题,例如求解方程、插值和逼近、数值积分等。
本次上机实验旨在通过编程实现数值计算方法,并应用于实际问题中。
二、实验目的本次实验的目的是掌握数值计算方法的基本原理和实现过程,加深对数值分析理论的理解,并通过实际应用提高编程能力。
三、实验内容1. 数值求解方程首先,我们使用二分法和牛顿迭代法分别求解非线性方程的根。
通过编写程序,输入方程的初始值和精度要求,计算得到方程的根,并与理论解进行对比。
2. 数值插值和逼近接下来,我们使用拉格朗日插值和最小二乘法进行数据的插值和逼近。
通过编写程序,输入给定的数据点,计算得到插值多项式和逼近多项式,并绘制出插值曲线和逼近曲线。
3. 数值积分然后,我们使用梯形法和辛普森法进行定积分的数值计算。
通过编写程序,输入被积函数和积分区间,计算得到定积分的近似值,并与解析解进行比较。
四、实验步骤1. 数值求解方程(1)使用二分法求解非线性方程的根。
根据二分法的原理,编写程序实现二分法求解方程的根。
(2)使用牛顿迭代法求解非线性方程的根。
根据牛顿迭代法的原理,编写程序实现牛顿迭代法求解方程的根。
2. 数值插值和逼近(1)使用拉格朗日插值法进行数据的插值。
根据拉格朗日插值法的原理,编写程序实现数据的插值。
(2)使用最小二乘法进行数据的逼近。
根据最小二乘法的原理,编写程序实现数据的逼近。
3. 数值积分(1)使用梯形法进行定积分的数值计算。
根据梯形法的原理,编写程序实现定积分的数值计算。
(2)使用辛普森法进行定积分的数值计算。
根据辛普森法的原理,编写程序实现定积分的数值计算。
五、实验结果与分析1. 数值求解方程通过二分法和牛顿迭代法,我们成功求解了给定非线性方程的根,并与理论解进行了对比。
结果表明,二分法和牛顿迭代法都能够较好地求解非线性方程的根,但在不同的问题中,二者的收敛速度和精度可能会有所差异。
(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 **:*** 学号:
成绩: 实验编号 实验名称 实验学实验成绩
数值计算方法与算法 实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日 课程名称: 数值计算方法与算法 专业:信息与计算科学 班级 12级5班 实验编号: 1实验项目Neton插值多项式 指导教师:孙峪怀 姓名: 宋元台 学号: 实验成绩:
一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)
时 实验一 Newton插值 2 实验二 Romberg算法 2 实验三 求拟合算法 2 实验四 弦截断法 2 实验五 Courant求解方程组 2 实验六 超松弛迭代求解方程组 2 实验七 幂法和反幂法 2 实验八 R-K方法求解初值问题 2 1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插 值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #include{ int n; int i,j; POINT points[MAX_N+1];double diff[MAX_N+1]; double x,tmp,newton=0; printf("\nInput n value:"); scanf("%d",&n); if(n>MAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i); scanf("%lf %lf",&points[i].x,&points[i].y); } printf("now input the value of x:\n"); scanf("%lf",&x); for(i=0;i<=n;i++) diff[i]=points[i].y; for(i=0;i{ for(j=n;j>i;j--) { diff[j]=(diff[j]-diff[j-1])(points[j].x-points[j-1-i].x); } } tmp=1;newton=diff[0]; for(i=0;i{ tmp=tmp*(x-points[i].x); newton=newton+tmp*diff[i+1]; } printf("newton(%f)=%f\n",x,newton); return 0; } 程序运行结果过程及截图为:
数值计算方法与算法 实验报告 学期: 2014 至2015 第 1 学期 2014年 12月1日 课程名称: 数值计算方法与算法 专业:信息与计算科学 班级 12级5班
实验编号: 2实验项目Romberg算法 指导教师:孙峪怀 姓名: 宋元台 学号: 实验成绩: 一、实验目的及要求 实验目的: 熟练掌握数值积分的基本思想和动手推导积分公式的能力,并写出自己设计的变步长算法,用此算法解决实际问题。主要锻炼分析问题及对数值方法产生的误差在实际执行算法中的变化,体会事前误差和事后误差的不同之处。 实验要求:写出Romberg算法的描述,并用此算法计算下列定积分的值,
要求满足给定误差。 二、实验内容。 (1)用变步长的Romberg方法计算定积分: 给定误差限为 三、实验步骤(该部分不够填写.请填写附页) 1.算法分析: 下面用伪码描述Romberg的算法描述: Sstep1 输入区间端点a,b,精度控制值e,循环次数M,定义函数f(x),取n=1, (x)) #define N_H 20 #define MAXREPT 10 #define a 1.0 #define b 2.0 #define epsilon 0.00001 double computeT(double aa,double bb,long int n) { int i;double sum=0.0;double ; for(i=1;i{ sum+=f(aa+i* (() { int i; long int n=N_H,m=0; double T[MAXREPT+1][2]; T[0][1]=computeT(a,b,n); n*=2; for (m=1;m{ for (i=0;i{ T[i][0]=T[i][1]; } T[0][1]=computeT(a,b,n); n*=2; for (i=1;i<=m;i++) { T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])(pow(2,2*m)-1);
if((T[m-1][1]T[m][1]-epsilon)) { printf("the integrate is %lf\n",T[m][1]); return; } } } printf("return no solved...\n"); } 2.运行结果
数值计算方法与算法 实验报告 学期: 2014 至2015 第 1 学期 2014年 12月1日 课程名称: 数值计算方法与算法 专业:信息与计算科学 班级 12级5班
实验编号: 3实验项目:求拟合算法 指导教师:孙峪怀 姓名: 宋元台 学号: 实验成绩: 一、实验目的及要求 实验目的: 学习了曲线拟合的最小二乘法,会求拟合曲线,线性拟合和二次拟合函数,还有形如aexp(bx)的曲线拟合,实验主要是求形如aexp(bx)的曲线拟合,并理解体会其意义。 实验要求: 1. 形如aexp(bx)曲线拟合的算法; 2. 用C语言实现算法 二、实验内容 用形如p(x)=aexp(bx)的函数拟合给定() 三、实验步骤(该部分不够填写.请填写附页) 1.算法分析: 拟合函数aexp(bx)的算法描述: Step1 输入m值,及(xi,yi),i=1,2,...,m; Step2 解方程组
m a = b
Step3 输出p(x)=aexp(bx)即所求拟合函数 1.算法分析: 2.用C语言实现算法的程序代码 #include{ int m; int i; POINT points[MAX_N]; static double u11,u12,u21,u22,c1,c2; double A,B,tmp; printf("\nInput m value"); scanf("%d",&m); if(m>=MAX_N) { printf("The input m is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(m<=0) { printf("Please input a number between 1 and %d",MAX_N); return 1; } printf("Now input the (x_i,y_i),i=1,...,%d:\n",m); for(i=1;i<=m;i++) {