河北工业大学数值分析实验五
- 格式:doc
- 大小:92.75 KB
- 文档页数:6
实验(五):熟悉IP协议实验说明:6个人一组参考内容:网络协议仿真教学系统(通用版)课件实验三网际协议IP实验报告:给出拓扑图(表明各主机的IP地址和MAC地址)给出各个练习网卡捕获的数据(需要说明是哪一个练习)练习一:各主机打开协议分析器,进入相应的网络结构并验证网络拓扑的正确性,如果通过拓扑验证,关闭协议分析器继续进行实验,如果没有通过拓扑验证,请检查网络连接。
本练习将主机A、B、C、D、E、F作为一组进行实验。
1.主机B在命令行方式下输入staticroute_config命令,开启静态路由服务。
2.主机A启动协议编辑器,编辑一个IP数据报,其中:MAC层:目的MAC地址:主机B的MAC地址(对应于172.16.1.1接口的MAC)。
源MAC地址:主机A的MAC地址。
协议类型或数据长度:0800。
IP层:总长度:IP层长度。
生存时间:128。
源IP地址:主机A的IP地址(172.16.1.2)。
目的IP地址:主机E的IP地址(172.16.0.2)。
校验和:在其它所有字段填充完毕后计算并填充。
自定义字段:数据:填入大于1字节的用户数据。
【说明】先使用协议编辑器的“手动计算”校验和,再使用协议编辑器的“自动计算”校验和,将两次计算结果相比较,若结果不一致,则重新计算。
●IP在计算校验和时包括哪些内容?只包括IP报文中的首部,不包括数据部分3. 在主机B(两块网卡分别打开两个捕获窗口)、E上启动协议分析器,设置过滤条件(提取IP协议),开始捕获数据。
4. 主机A发送第1步中编辑好的报文。
5. 主机B、E停止捕获数据,在捕获到的数据中查找主机A所发送的数据报,并回答以下问题:●第1步中主机A所编辑的报文,经过主机B到达主机E后,报文数据是否发生变化?若发生变化,记录变化的字段,并简述发生变化的原因。
报文数据发生变化。
发生变化的字段有:“生存时间”和“首部校验和”。
其截图如下:主机B的截图中,本机连接2对应的是路由,其IP地址为172.16.0.1,“生存时间”字段的值为128,“首部校验和”字段的值为0D78,而主机E中,“生存时间”字段的值为127,“首部校验和”字段的值为0E78。
数值分析实验报告
一、实验背景
本实验主要介绍了数值分析的各种方法。
在科学计算中,为了求解一
组常微分方程或一些极限问题,数值分析是一种有用的方法。
数值分析是
一种运用计算机技术对复杂模型的问题进行数学分析的重要手段,它利用
数学模型和计算机程序来解决复杂的数学和科学问题。
二、实验内容
本实验通过MATLAB软件,展示了以下几种数值分析方法:
(1)拉格朗日插值法:拉格朗日插值法是由法国数学家拉格朗日发
明的一种插值方法,它可以用来插值一组数据,我们使用拉格朗日插值法
对给定的点进行插值,得到相应的拉格朗日多项式,从而计算出任意一个
点的函数值。
(2)最小二乘法:最小二乘法是一种常用的数据拟合方法,它可以
用来拟合满足一定函数的点的数据,它的主要思想是使得数据点到拟合曲
线之间的距离的平方和最小。
(3)牛顿插值法:牛顿插值法是一种基于差商的插值方法,它可以
用来插值一组数据,可以求得一组数据的插值函数。
(4)三次样条插值:三次样条插值是一种基于三次样条的插值方法,它可以用来对一组数据进行插值,可以求得一组数据的插值函数。
三、实验步骤
1.首先启动MATLAB软件。
实验一数据预处理一、实验目的1、熟悉 VC++编程工具和完全数据立方体构建、联机分析处理算法。
2、浏览拟被处理的的数据,发现各维属性可能的噪声、缺失值、不一致性等,针对存在的问题拟出采用的数据清理、数据变换、数据集成的具体算法。
3、用 VC++编程工具编写程序,实现数据清理、数据变换、数据集成等功能。
4、调试整个程序获得清洁的、一致的、集成的数据,选择适于全局优化的参数。
5、写出实验报告。
二、实验原理1、数据预处理现实世界中的数据库极易受噪音数据、遗漏数据和不一致性数据的侵扰,为提高数据质量进而提高挖掘结果的质量,产生了大量数据预处理技术。
数据预处理有多种方法:数据清理,数据集成,数据变换,数据归约等。
这些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间。
2、数据清理数据清理例程通过填写遗漏的值,平滑噪音数据,识别、删除离群点,并解决不一致来“清理”数据。
3、数据集成数据集成将数据由多个源合并成一致的数据存储,如数据仓库或数据立方体。
4、数据变换通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。
5、数据归约使用数据归约可以得到数据集的压缩表示,它小得多,但能产生同样(或几乎同样的)分析结果。
常用的数据归约策略有数据聚集、维归约、数据压缩和数字归约等。
三、实验内容和步骤1、实验内容1、用VC++编程工具编写程序,实现数据清理、数据变换、数据集成等功能,并在实验报告中写出主要的预处理过程和采用的方法。
2、产生清洁的、一致的、集成的数据。
3、在试验报告中写明各主要程序片段的功能和作用。
2、实验步骤1)仔细研究和审查数据,找出应当包含在你分析中的属性或维,发现数据中的一些错误、不寻常的值、和某些事务记录中的不一致性。
2)进行数据清理,对遗漏值、噪音数据、不一致的数据进行处理。
例如:1、日期中的缺失值可以根据统一的流水号来确定。
2、购买的数量不能为负值。
一、 实验名称解线性方程组的直接方法二、 目的和意义1、通过该课题的实验,体会模块化结构程序设计方法的优点;2、运用所学的计算方法,解决各类线性方程组的直接算法;3、提高分析和解决问题的能力,做到学以致用;4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。
三、 计算公式●Gauss 顺序消去法计算公式n n nnb x a ⇒1,1,2,1nk kj j k j k b a x x k n =+-⇒=-∑四、 结构程序设计● Gauss 顺序消去法程序如下: %Gauss 法求解线性方程组Ax=b%A 为输入矩阵系数,b 为方程组右端系数 %方程组的解保存在x 变量中 %先输入方程系数A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1]; b=[5 12 3 2 3 46 13 38 19 -21]'; [m,n]=size(A); %检查系数正确性if m~=nerror('矩阵A 的行数和列数必须相同'); return; endif m~=size(b)error('b 的大小必须和A 的行数或A 的列数相同'); return;end%再检查方程是否存在唯一解if rank(A)~=rank([A,b])error('A 矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解'); return;end%这里采用增广矩阵行变换的方式求解c=n+1;A(:,c)=b;%%消元过程for k=1:n-1A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c);end%%回代结果x=zeros(length(b),1);x(n)=A(n,c)/A(n,n);for k=n-1:-1:1x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);end%显示计算结果disp('x=');disp(x);Gauss列主元消去法程序如下:%Gauss列主元消元法求解线性方程组Ax=b%A为输入矩阵系数,b为方程组右端系数%方程组的解保存在x变量中format long;%设置为长格式显示,显示15位小数A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1];b=[5 12 3 2 3 46 13 38 19 -21]';[m,n]=size(A);%先检查系数正确性if m~=nerror('矩阵A的行数和列数必须相同');return;endif m~=size(b)error('b的大小必须和A的行数或A的列数相同');return;end%再检查方程是否存在唯一解if rank(A)~=rank([A,b])error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');return;endc=n+1;A(:,c)=b;%(增广)for k=1:n-1[r,m]=max(abs(A(k:n,k)));%选主元m=m+k-1;%修正操作行的值if(A(m,k)~=0)if(m~=k)A([k m],:)=A([m k],:);%换行endA(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c);%消去endendx=zeros(length(b),1);%回代求解x(n)=A(n,c)/A(n,n);for k=n-1:-1:1x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);enddisp('x=');disp(x);format short;%设置为默认格式显示,显示5位●平方根法程序如下:A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];b=[0 -6 6 23 11 -22 -15 45]';% 先输入矩阵L=chol(A);%先对A矩阵作Cholesky分解L'*L%检验其正确性L=L';%将L转化为下三角矩阵y=L\b;%解方程组Ly=bx=L'\y%再解方程组L T x=y,得到最终解●改进平方根法程序如下:A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];b=[0 -6 6 23 11 -22 -15 45]';% 先输入矩阵[L,D]=ldl(A);%先对矩阵A作LDL分解L*D*L'%检验其分解正确性y=L\b;%解方程组Ly=bx=(D*L')\y%解方程组DL T x=y●追赶法程序如下:format long%三对角线性方程组的追赶法解方程组%输入矩阵A=[4 -1 0 0 0 0 0 0 0 0;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0;0 0 0 0 -1 4 -1 0 0 0;0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0;0 0 0 0 0 0 0 -1 4 -1;0 0 0 0 0 0 0 0 -1 4];f=[7 5 -13 2 6 -12 14 -4 5 -5];[n,m]=size(A);%分别取对角元素a(2:n)=diag(A,-1);c=diag(A,1);%此处用变量d存储A主对角线上的元素,因已用变量b存储方程右边的系数b=diag(A);if b(1)==0error('主对角元素不能为0');return;end%初始计算alpha(1)=b(1);beta(1)=c(1)/b(1);for i=2:n-1alpha(i)=b(i)-a(i)*beta(i-1);if alpha(i)==0error('错误:在解方程过程中α为0');return;endbeta(i)=c(i)/alpha(i);end%对最后一行作计算alpha(n)=b(n)-a(n)*beta(n-1);if alpha(n)==0error('错误:在解方程过程中最后一个α为0');return;end%解Ly=fy(1)=f(1)/b(1);for i=2:ny(i)=(f(i)-a(i)*y(i-1))/alpha(i);end%解Ux=yx(n)=y(n);for i=n-1:-1:1x(i)=y(i)-beta(i)*x(i+1);enddisp('x=');format shortdisp(x');五、结果讨论和分析对线性方程组(1),利用Gauss顺序消去法与Gauss列主元消去法求解。
数值分析实验报告⼀.实验⽬的1.通过实际计算体会各种积分⽅法的精确度;会编写⽤龙贝格算法求定积分的程序。
2.熟悉求解线性⽅程组的有关理论和⽅法;并会编制列主元消去法、LU 分解法。
⼆.实验环境及要求MATLAB 软件等。
三.实验学时2学时四.实验内容1.数值积分实验:复化积分、龙贝格积分;2.线性代数⽅程组的直接解法:列主元消去法、LU 分解法。
五.实验题及结果1. ⽤复化⾟欧森公式计算积分I=dx x ?+10211。
int_com_simp.m ⽂件:function s=int_comp_simp(f,a,b,n)format long ;h=(b-a)/(2*n);s1=0;s2=0;for k=1:nx=a+h*(2*k-1);s1=s1+f(x);endfor k=1:(n-1)x=a+h*2*k;s2=s2+f(x);ends=h*(f(a)+f(b)+4*s1+2*s2)/3;函数f1.m ⽂件:function y=f1(x)y=1/(1+x*x);对函数调⽤的f11.m ⽂件:for i=1:4n=2^i;s=int_comp_simp(@f1,0,1,n);display(n);display(s); end结果及其分析:结果:>> f11n =2s =0.785392156862745n =4s =0.785398125614677n =8s =0.785398162806206n =16s =0.785398163388209 结果分析:当n=8时结果已经达到6位有效数字;2. ⽤龙贝格⽅法计算积分I=dx x ?+10211 。
龙贝格⽅法的函数⽂件:function [T,quad,err,h]=int_romberg(f,a,b,n,tol) format longM=1;h=b-a;err=1;k=0;T=zeros(4,4);T(1,1)=h*(f(a)+f(b))/2;while ((err>tol)&&(kk=k+1;h=h/2;s=0;for p=1:Mx=a+h*(2*p-1);s=s+f(x);endT(k+1,1)=T(k,1)/2+h*s;M=2*M;for kk=1:kT(k+1,kk+1)=T(k+1,kk)+(T(k+1,kk)-T(k,kk))/(4^kk-1);enderr=abs(T(k,k)-T(k+1,kk+1));endquad=T(k+1,k+1);所求函数的⽂件:function y=f1(x)y=1/(1+x*x);结果及其分析:>> [T,quad,err,h]=int_romberg(@f1,0,1,4,1e-6)T =Columns 1 through 40.750000000000000 0 0 0 0.775000000000000 0.783333333333333 0 00.782794117647059 0.785392156862745 0.785529411764706 00.784747123622772 0.785398125614677 0.785398523531472 0.785396445940468 0.785235403010347 0.785398162806206 0.785398165285641 0.785398159599199 Column 50.785398166319429quad =0.785398166319429err =1.720378960845537e-06h =0.062500000000000结果分析:最后结果是0.785398166319429,误差为1.720378960845537e-06;3.⽤列主元消去法解⽅程组0.101x1+2.304x2+3.555x3=1.183-1.347x1+3.712x2+4.623x3=2.137-2.835x1+1.072x2+5.643x3=3.035⾼斯主元消去法的m⽂件:function solution=Gauss_main(gauss,precision)if nargin==2trydigits(precision);catchdisp('您输⼊的精度有误,这⾥按照缺省的精度(10位有效数字)计算');digits(10);endA=vpa(gauss);row=size(A,1);col=size(A,2);if ndims(A)~=2|col-row~=1disp('矩阵的⼤⼩有误,不能使⽤Gauss主元素消去法')returnendif det(gauss(:,1:row))disp('该⽅程的系数矩阵⾏列式为零,⽆解或有⽆穷多解,不能使⽤Gauss主元素消去法') returnendfor i=1:rowMax=0.0;for j=i:rowif double(abs(A(j,i))-Max)>0Max=abs(A(j,i));max_row=j;endendtemp=A(i,:);A(i,:)=A(max_row,:);A(max_row,:)=temp;for k=i+1:rowA(k,:)=vpa(A(k,:)-A(i,:)*A(k,i)/A(i,i));endendfor i=row:-1:1temp=A(i,col);for k=i+1:rowtemp=vpa(temp-soulution(k)*A(i,k));endsolution(i)=vpa(temp/A(i,i));end结果:>> solution=Gauss_main(A,4)solution =[ -0.3982, 0.0138, 0.3351]结果分析:x(1)=-0.3982,x(2)=0.0138,x(3)=0.3351;4.LU直接分解法求⽅程组0.101x1+2.304x2+3.555x3=1.183-1.347x1+3.712x2+4.623x3=2.137-2.835x1+1.072x2+5.643x3=3.035LU的m⽂件:function solution=Mlu(M,precision)if nargin==2trydigits(precision);catchdisp('你输⼊的精度有误,这⾥按照缺省的精度(10位有效数字)计算'); digits(10);endelsedigits(10);endA=vpa(M);row=size(A,1);col=size(A,2);if ~ismatrix(A)||col-row~=1disp('矩阵的⼤⼩有误,不能使⽤LU分解')returnendif det(M(:,1:row))==0disp('该⽅程的系数矩阵⾏列式为零,⽆解或有穷多解,不能使⽤LU分解') returnend[L,U,P]=lu(double(A));for i=row:-1:1temp=U(i,col);for k=i+1:rowtemp=vpa(temp-t_solution(k)*U(i,k));endt_solution(i)=vpa(temp/U(i,i));endfor i=1:rowtemp=t_solution(i);for k=1:i-1temp=vpa(temp-t_solution(k)*U(i,k));endsolution(i)=temp;end结果及分析:结果:>> solution=Mlu(A,4)solution =[ -0.3982, 0.0138, 0.3351]结果分析:x(1)=-0.3982,x(2)=0.0138,x(3)=0.3351;。
数值分析实验实验1 方程求根一、实验目的:1.掌握常用的求非线性方程近似根的数值方法,用所学方法求非线性方程满足指定精度要求的数值解,比较各种方法的异同点并进行收敛性分析。
2.通过对二分法与牛顿迭代法作编程练习与上机运算,进一步体会二分法与牛顿迭代法的不同特点。
3.编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。
二、实验内容:1.用二分法求方程0104)(23=-+=x x x f 在1.5附近的根。
2.用牛顿迭代法求方程033)(23=--+=x x x x f 在1.5附近的根。
3.用简单迭代法求解非线性方程3sin )1(2=-+x x 的根。
取迭代函数)1sin 3(*5.0)(2x x x --+=ϕ,精度取2101-⨯4.(选做)用牛顿法求下列方程的根: (1)02=-x e x ; (2)01=-x xe ; (3)02lg =-+x x 。
5.(选做)编写一个弦截法程序,求解题目4中的方程。
6.(选做)Matlab 函数fzero 可用于求解非线性方程的根。
例如,fzero(@(x) x^3+4*x^2-10, 1.5)可以求解题目1。
尝试用此方法求解实验中的其他题三、实验要求:1.程序要添加适当的注释,程序的书写要采用缩进格式。
2.程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
3.程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
四、实验步骤1.按照实验内容和实验要求编写代码 2.编译并运行代码 3.检查是否发生错误五、实验源代码与实验结果实验1源代码:运行结果:实验2源代码:运行结果:实验3源代码:运行结果:4(1)的源代码:运行结果:4(2)的源代码:运行结果:4(3)的源代码:运行结果:5(3)的源代码:运行结果:六、实验心得体会通过本次实验我加深了对二分法、简单迭代法、牛顿迭代法和弦截法算法思想的了解,并对各个不同方法的优劣有了更深的理解。
《数值分析》课程实验报告数值分析实验报告《数值分析》课程实验报告姓名:学号:学院:机电学院日期:20__ 年 _ 月_ 日目录实验一函数插值方法 1 实验二函数逼近与曲线拟合 5 实验三数值积分与数值微分 7 实验四线方程组的直接解法 9 实验五解线性方程组的迭代法 15 实验六非线性方程求根 19 实验七矩阵特征值问题计算 21 实验八常微分方程初值问题数值解法 24 实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。
试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。
数据如下:(1) 0.4 0.55 0.65 0.80 0.95 1.05 0.41075 0.57815 0.69675 0.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算, 的值。
(提示:结果为, )(2) 1 2 3 4 5 6 7 0.368 0.135 0.050 0.018 0.007 0.002 0.001 试构造Lagrange多项式,计算的,值。
(提示:结果为, )二、要求 1、利用Lagrange插值公式编写出插值多项式程序;2、给出插值多项式或分段三次插值多项式的表达式;3、根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何;4、对此插值问题用Newton插值多项式其结果如何。
Newton 插值多项式如下:其中:三、目的和意义 1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;2、明确插值多项式和分段插值多项式各自的优缺点;3、熟悉插值方法的程序编制;4、如果绘出插值函数的曲线,观察其光滑性。
四、实验步骤(1) 0.4 0.55 0.65 0.80 0.951.05 0.41075 0.57815 0.69675 0.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算, 的值。
数值分析的实验报告实验目的本实验旨在通过数值分析方法,探讨数学问题的近似解法,并通过实际案例进行验证和分析。
具体目的包括: 1. 理解和掌握数值分析的基本原理和方法; 2. 学会使用计算机编程语言实现数值分析算法; 3. 分析数值分析算法的精确性和稳定性; 4. 根据实验结果对数值分析算法进行优化和改进。
实验步骤1. 问题描述首先,我们选择一个数学问题作为实验的对象。
在本次实验中,我们选取了求解非线性方程的问题。
具体而言,我们希望找到方程 f(x) = 0 的解。
2. 数值方法选择根据非线性方程求解的特点,我们选择了牛顿迭代法作为数值方法。
该方法通过不断迭代逼近方程的解,并具有较好的收敛性和精确性。
3. 程序设计与实现为了实现牛顿迭代法,我们使用了Python编程语言,并使用了相应的数值计算库。
具体的程序实现包括定义方程 f(x) 和其导数f’(x),以及实现牛顿迭代法的迭代过程。
4. 实验案例与结果分析我们选择了一个具体的方程,例如 x^3 - 2x - 5 = 0,并通过程序运行得到了方程的解。
通过比较实际解与数值解的差异,我们可以分析数值方法的精确性和稳定性。
5. 优化与改进基于实验结果的分析,我们可以对数值分析算法进行优化和改进。
例如,通过调整迭代的初始值、增加迭代次数或修改算法公式等方式,改进算法的收敛性和精确性。
实验结论通过本次实验,我们深入理解了数值分析的基本原理和方法,并通过具体案例验证了牛顿迭代法的有效性。
同时,我们也意识到数值分析算法的局限性,并提出了一些改进的建议。
在今后的数学问题求解中,我们可以运用数值分析的方法,通过计算机编程实现更精确的近似解。
数值分析实验实验报告数值分析实验实验报告引言在现代科学与工程领域,数值分析是一项重要的技术手段。
通过数值方法,我们可以利用计算机模拟和解决各种实际问题,如物理、化学、生物、经济等领域中的方程求解、优化问题、数据拟合等。
本实验旨在通过实际案例,探讨数值分析的应用和效果。
实验一:方程求解首先,我们考虑一个简单的方程求解问题。
假设我们需要求解方程f(x) = 0的根,其中f(x)是一个在给定区间[a, b]上连续且单调的函数。
为了实现这个目标,我们可以采用二分法、牛顿法、弦截法等数值方法。
在本实验中,我们选择使用二分法来求解方程f(x) = 0。
这种方法的基本思想是通过不断缩小区间[a, b]的范围,直到找到一个近似的根。
我们首先选取一个中间点c,计算f(c)的值,然后根据f(c)与0的关系,将区间[a, b]分成两部分。
重复这个过程,直到找到满足精度要求的根。
实验二:数据拟合接下来,我们考虑一个数据拟合的问题。
假设我们有一组离散的数据点,我们希望找到一个函数,使得该函数与这些数据点的拟合误差最小。
为了实现这个目标,我们可以采用最小二乘法等数值方法。
在本实验中,我们选择使用最小二乘法来进行数据拟合。
这种方法的基本思想是通过最小化数据点与拟合函数之间的误差平方和,来确定拟合函数的参数。
我们首先选择一个拟合函数的形式,如线性函数、多项式函数等。
然后,通过最小化误差平方和的方法,计算出拟合函数的参数。
实验三:优化问题最后,我们考虑一个优化问题。
假设我们需要在给定的约束条件下,找到一个使得目标函数取得最大或最小值的变量。
为了实现这个目标,我们可以采用梯度下降法、遗传算法等数值方法。
在本实验中,我们选择使用梯度下降法来解决优化问题。
这种方法的基本思想是通过迭代的方式,不断调整变量的取值,直到找到一个满足约束条件的最优解。
我们首先计算目标函数关于变量的梯度,然后根据梯度的方向和大小,更新变量的取值。
通过不断迭代,我们可以逐步接近最优解。
计算方法实验五 线性方程组数值解法
目的与要求:
1) 熟悉求解线性方程组的有关理论和方法;
2) 会编制列主元消去法、LU 分解法、雅可比及高斯-塞德尔迭代法的程序;
3) 通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。
矩阵直接三角分解法 算法
将方程组b Ax =中的A 分解为LU A =,其中L 为单位下三角矩阵,U 为上三角矩阵,则方程组b Ax =化解为2个方程组b Ly =,y Ux =,具体算法如下
11i1i11j 1j a /a l n ,2,3,i ,a u n ,1,2,3,j (1)====计算对计算对
∑∑==-=++=-=+==1
-k 1q kk
qk iq ik ik 1-k 1q qj
kq kj kj u /)u l a (l n ,2,k 1,k i .b u l a u n ,1,k k,j a.:
n ,1,2,3,k (2)计算对计算对对
∑-=-===1
k 1q q kq k k 11y l b y n ,2,3,k ,b (3)y 计算对
kk n 1k q q kq k k nn n n u /)x u y (x ,2,12,-n 1,n k ,u /y (4)x ∑+=-
=-==计算对
[]。
列元素即为的第此时施行算法可直接对增广矩阵
的公式形式上一样,故的公式与计算注:由于计算y 1n U ),3)(2(a a a a a a a a a a a a b |A y u 1n n,nn n2n11n 2,2n 22211n 1,1n 1211+⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎣⎡=+++ 程序与实例
求解方程组b Ax =
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----=4911427b 3 812- 6 5 973274581221A , 作业
用LU 分解法解方程组b Ax =
⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=16 2 6 6-2 20 6 012 12 24 24-12- 0 24- 48A ⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛--=2244b #include<stdio.h>
void main(void)
{
float a[4][4]={48,-24,0,-12,-24,24,12,12,0,6,20,2,-6,6,2,16}; float b[4][1]={4,4,-2,-2},x[4][1],y[4][1],u[4][4],l[4][4],ex; float ix[4][4]={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1},ff;
int i,j,k,m,n,p;
printf("A:\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%8.3f",a[i][j]);
l[i][j]=ix[i][j];
}
printf("\n");
}
printf("b:\n");
for(i=0;i<4;i++)
{
printf("%8.3f",b[i][0]);
printf("\n");
}
for(i=1,j=0;i<4,j<3;i++,j++)
{
for(p=i;p<4;p++)
{
ex=a[p][j]/a[i-1][j];
l[p][j]=ex;
{
for(k=0;k<4;k++)
a[p][k]=a[p][k]+a[i-1][k]*(-ex);
}
}
}
printf("u:\n");
for(m=0;m<4;m++)
{
for(n=0;n<4;n++)
{
u[m][n]=a[m][n];
printf("%8.3f",u[m][n]);
}
printf("\n");
}
printf("l:\n");
for(m=0;m<4;m++)
{
for(n=0;n<4;n++)
{
printf("%8.3f",l[m][n]);
}
printf("\n");
}
for(i=0;i<4;i++)
{
ff=0;
for(j=0;j<i;j++)
{
if(i==0)
break;
ff=ff+l[i][j]*y[j][0];
}
y[i][0]=(b[i][0]-ff)/l[i][i];
}
printf("y:\n");
for(i=0;i<4;i++)
printf("%8.3f\n",y[i][0]);
for(i=3;i>=0;i--)
{
ff=0;
for(j=3;j>i;j--)
ff=ff+x[j][0]*u[i][j];
x[i][0]=(y[i][0]-ff)/u[i][i];
}
printf("x:\n");
for(i=0;i<4;i++)
printf("%8.3f\n",x[i][0]);
}
一、 雅可比迭代法 算法:
设方程组b Ax =的系数矩阵的对角元素n),1,2,0(i a ii =≠,M 为迭代次数容许的最大值,为容许误差ε
())2(,1k k M k )4()
4(,x x x )3();x a b (a 1x
n ,,21i )2(0k ,x ,,x ,x x (1))1k (n 1
i )k (i )1k (i n i j 1j )k (j ij i ii )1k (i T
)0(
n )0(
2)0(1转;否则,则不收敛,终止程序如果结束;否则执行,则输出如果计算,对;令取初始向量+←≥<--====+=+≠=+∑∑ε 程序与实例
求解方程组⎪⎩⎪⎨⎧==+=++16x -3x -x 213x -8x 2x 8x 2x 5x 321
321321 作业
用雅可比迭代方求解方程组⎪⎪⎩⎪⎪⎨⎧=+-+=+=+=+-25
3x x 11x x -62x x -10x -118x x -3x -1110x x 2x 432132
1432321 #include<stdio.h>
void main()
{
float x[4]={3,5,12,2};
float a[4][4]={2,-1,10,0,0,3,-1,8,10,-1,2,0,-1,11,-1,3};
float b[4]={-11,-11,6,25};
int i,j,k,sum;
for(k=0;k<50;k++)
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(i!=j)
sum=a[i][j]*x[j];
x[i]=(b[i]-sum)/a[i][i];
}
printf("k:%d\n",k);
for(i=0;i<4;i++)
{
printf("%f",x[i]);
printf("\n");
}
} }。