数值分析实验报告.docx

上传人:b****3 文档编号:2172217 上传时间:2022-10-27 格式:DOCX 页数:32 大小:300.07KB
下载 相关 举报
数值分析实验报告.docx_第1页
第1页 / 共32页
数值分析实验报告.docx_第2页
第2页 / 共32页
数值分析实验报告.docx_第3页
第3页 / 共32页
数值分析实验报告.docx_第4页
第4页 / 共32页
数值分析实验报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

数值分析实验报告.docx

《数值分析实验报告.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告.docx(32页珍藏版)》请在冰豆网上搜索。

数值分析实验报告.docx

数值分析实验报告

 

学生实验报告

实验课程名称

开课实验室

学院年级专业班

学生姓名学号

开课时间至学年学期

 

总成绩

教师签名

 

课程

名称

数值分析

实验项目

名称

Gauss消元法

实验项目类型

验证

演示

综合

设计

其他

指导

教师

成绩

一、实验目的:

(1)高斯列主元消去法求解线性方程组的过程

(2)熟悉用迭代法求解线性方程组的过程

(3)设计出相应的算法,编制相应的函数子程序

二、实验内容

分别用高斯列主元消元法和直接消元法求解线性方程组:

三、实验原理

对于线性方程组

(1)

常记为矩阵形式

(2)

根据高等代数的知识,若,上式的解存在且唯一。

(1)Gauss直接消元法

考虑上述线性方程组的增广矩阵,对增广矩阵进行行变换,将

(2)式化为等价的三角形方阵,然后回代解之,这就是Gauss消元法。

具体如下:

a)消元

令;

对k=1到n-1,若,进行

b)回代,若

(2)Gauss列主元消元法

设列主元消元法已完成的第k-1()次消元,的到方程组

在进行第k次消元前,先进行2个步骤:

a)在至这一列内选出最大值,即,若,此时

方程组无确定解,应给出退出信息。

b)若,则交换第行和行,然后用Gauss消元法进行消元。

四、MATLAB软件实现

(1)写出Gauss消元法和列主元消元法实现的MATLAB函数

根据以上的算法,写出如下程序:

%%%%%%%Gauss消元法%%%%%%%%%%%%

functiony=Gauss1(A,b)

[m,n]=size(A);

%检查系数正确性

ifm~=n

error('矩阵A的行数和列数必须相同');

return;

end

ifm~=size(b)

error('b的大小必须和A的行数或A的列数相同');

return;

end

%再检查方程是否存在唯一解

ifrank(A)~=rank([A,b])

error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');

return;

end

%这里采用增广矩阵行变换的方式求解

c=n+1;

A(:

c)=b;

%%消元过程

fork=1:

n-1

A(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);

fork=n-1:

-1:

1

x(k)=(A(k,c)-A(k,k+1:

n)*x(k+1:

n))/A(k,k);

end

%显示计算结果

%disp('x=');

%disp(x);

y=x;

%%%%%%%%%%%%高斯列主元消元法求解线性方程组Ax=b%%%%%%%%%%%%%%

%A为输入矩阵系数,b为方程组右端系数

%方程组的解保存在x变量中

functiony=Gauss_line(A,b)

formatlong;%设置为长格式显示,显示15位小数

[m,n]=size(A);

%先检查系数正确性

ifm~=n

error('矩阵A的行数和列数必须相同');

return;

end

ifm~=size(b)

error('b的大小必须和A的行数或A的列数相同');

return;

end

%再检查方程是否存在唯一解

ifrank(A)~=rank([A,b])

error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');

return;

end

c=n+1;

A(:

c)=b;%(增广)

fork=1:

n-1

[r,m]=max(abs(A(k:

n,k)));%选主元

m=m+k-1;%修正操作行的值

if(A(m,k)~=0)

if(m~=k)

A([km],:

)=A([mk],:

);%换行

end

A(k+1:

n,k:

c)=A(k+1:

n,k:

c)-(A(k+1:

n,k)/A(k,k))*A(k,k:

c);%消去

end

end

x=zeros(length(b),1);%回代求解

x(n)=A(n,c)/A(n,n);

fork=n-1:

-1:

1

x(k)=(A(k,c)-A(k,k+1:

n)*x(k+1:

n))/A(k,k);

end

y=x;

formatshort;%设置为默认格式显示,显示5位

(2)建立MATLAB界面

利用MATLAB的GUI建立如下界面求解线性方程组:

详见程序。

五、计算实例、数据、结果、分析

下面我们对以上的结果进行测试,求解:

输入数据后点击和,得到如下结果:

更改以上数据进行测试,求解如下方程组:

得到如下结果:

六、实验中遇到的问题及解决办法

在本实验中,遇到的问题主要有两个:

(1)如何将上述的Gauss消元法的算法在MATLAB中实现

针对此问题我借鉴了网上以及课本上的算法的MATLAB实现的程序;

(2)如何将建立界面使得可以随意输入想要求解的相关矩阵后就可以直接求解

针对此问题,我通过网上的一些关于MATLAB的GUI设计的相关资料,总结经验完成了此项任务。

七、实验结论

通过以上的测试,我们发现以上算法和程序能够求出线性方程组的比较精确解。

八、参考文献

[1]杨大地,王开荣.2006.数值分析.北京:

科学出版社

[2]何光辉.2008.数值分析实验.重庆大学数理学院数学实验教学中心

[3]XX文库,XX知道

 

教师签名

年月日

课程

名称

数值分析

实验项目

名称

插值方法

实验项目类型

验证

演示

综合

设计

其他

指导

教师

何光辉

成绩

一、实验目的:

(1)学会拉格朗日插值、牛顿插值等基本方法

(2)设计出相应的算法,编制相应的函数子程序

(3)会用这些函数解决实际问题

二、实验内容

(1)设计拉格朗日插值算法,编制并调试相应的函数子程序

(2)设计牛顿插值算法,编制并调试相应的函数子程序

(3)给定函数四个点的数据如下:

X

1.1

2.3

3.9

5.1

Y

3.887

4.276

4.651

2.117

试用拉格朗日插值确定函数在x=2.101,4.234处的函数值。

(4)已知用牛顿插值公式求的近似值。

三、实验原理

(1)拉格朗日插值

n次拉格朗日插值多项式为:

Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)

n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0)

n=2时,称为二次插值或抛物线插值,精度相对高些

L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1)

对节点xi(i=0,1,…,n)中任一点xk(0<=k<=n)作一n次多项式lk(xk),使它在该点上取值为1,而在其余点xi(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)

上式表明:

n个点xi(i=0,1,…,k-1,k+1,…,n)都是lk(x)的零点。

(2)牛顿插值

插商公式

Newton插值多项式为

四、MATLAB软件实现

(1)分别写出lagrange插值法和Newton插值法的求解函数

%%%%%%%%%%%%%%lagrange插值法求解函数%%%%%%%%%%%%%%%%

%x,y为初始数据,z为插值点

functionz=lagrange(x,y,a)

formatlong;%显示15位

n=length(x);%取长度

%初始计算

s=0;

%进入公式计算

forj=0:

(n-1)

t=1;

fori=0:

(n-1)

ifi~=j

t=t*(a-x(i+1))/(x(j+1)-x(i+1));

end

end

s=s+t*y(j+1);

end

z=s;%显示输出结果

formatshort;

%%%%%%%%%%%%%%%Newton插值法求解函数%%%%%%%%%%%%%%

%x,y为初始数据,z为插值点

functionj=Newton(x,y,z)

n=max(size(x));

l=1;

a=y

(1);

B=a;

s=1;%一次因子的乘积,预设为1

dx=y;%差商

fori=1:

n-1

dx0=dx;

forj=1:

n-i

dx(j)=(dx0(j+1)-dx0(j))/(x(i+j)-x(j));

end

df=dx

(1);

s=s*(z-x(i));%一次因子乘积

a=a+s*df;%计算各次Newton插值的值

l=l+1;

B=a;%结果保存在变量B中

end

j=B;

(2)建立界面

利用MATLAB中的GUI编程建立如下界面:

详见程序。

五、计算实例、数据、结果、分析

下面我们对以上的问题进行测试:

输入数据:

计算结果如下:

当x=2.101时,

x=4.234时,

同理可以测试(4)中的的值。

六、实验中遇到的问题及解决办法

在本实验中,遇到的问题主要有两个:

(3)如何将上述的插值的算法在MATLAB中实现

针对此问题我借鉴了网上以及课本上的算法的MATLAB实现的程序;

(4)如何将建立界面使得可以随意输入想要求解的相关矩阵后就可以直接求解

针对此问题,我通过网上的一些关于MATLAB的GUI设计的相关资料,总结经验完成了此项任务。

七、实验结论

通过以上的测试,我们发现以上算法和程序能够求出插值的比较精确解。

八、参考文献

[1]杨大地,王开荣.2006.数值分析.北京:

科学出版社

[2]何光辉.2008.数值分析实验.数理学院数学实验教学中心

[3]XX文库,XX知道

 

教师签名

年月日

课程

名称

数值分析

实验项目

名称

数值微积分

实验项目类型

验证

演示

综合

设计

其他

指导

教师

何光辉

成绩

一、实验目的:

(1)学会复化梯形、复化辛浦生求积公式的应用

(2)设计出相应的算法,编制相应的函数子程序

(3)会用这些函数解决实际问题

二、实验内容

(1)设计复化梯形公式求积算法,编制并调试相应的函数子程序

(2)设计复化辛浦生求积算法,编制并调试相应的函数子程序

(4)分别用复化梯形公式和复化辛浦生公式计算定积分

三、实验原理

(1)复化梯形求积公式

开始

图1复化梯形求积公式算法的流程图

Step1给出被积函数、区间端点和等分数;

Step2求出;

Step3计算;

Step4得

(2)复化辛普森求积公式

图2复化辛普森求积

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1