当前位置:首页 >> 数学 >>

数值分析实习报告-刘仕进


数值分析实习报告

学院:数理学院 专业:数学与应用数学 学号:20091003078 姓名:刘仕进 指导老师:吴振远

20111 年 11 月 27 日

目录
1.绪论

2.用 Matlab 进行插值计算

3.多项式曲线拟合

4.解线性方程

5.用 Matlab 求解非线性方程的跟

1.绪论

数值分析是研究分析用计算机求解数学计算问题的数值计算方法及其理论 的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究 对象。 MATLAB 是主要面对科学计算、可视化以及交互式程序设计的高科技计算 环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和

仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计 以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案。

2.用 matlab 进行插值计算
下列数据点的插值
X Y 0 0 1 1 4 2 9 3 16 4 25 5 36 6 49 7 64 8

可以得到平方根函数的近似,在区间[0, 64]上作图。 (1) 用这 9 个点作 8 次多项式插值

L8 ( x) .

(2) 用三次样条(第一边界条件)程序求 S ( x) . 从得到的结果看在[0, 64]上,哪个插值更精确;在区间[0, 1]上,两种插值哪 个更精确? 2.1 程序文件 建立新的 m 文件 unit2.m: 代码如下: clc; clear; x = [0, 1, 4, 9, 16, 25, 36, 49, 64]; y = [0:8]; xi = [0:64]; p = polyfit(x, y, 8); yi = polyval(p, xi); subplot(2, 2, 1); plot(x, y, 'x', xi, yi, 'k') xlabel('x 轴'); ylabel('y 轴'); legend('插值点', '8 次差值多项式') yi = interp1(x, y, xi, 'cubic'); subplot(2, 2, 2); plot(x, y, 'x', xi, yi, 'k')

xlabel('x 轴'); ylabel('y 轴'); legend('插值点', '三次样条插值') xi = [0:0.01:1]; p = polyfit(x, y, 8); yi = polyval(p, xi); subplot(2, 2, 3); plot(xi, yi, 'k') xlabel('x 轴'); ylabel('y 轴'); legend('8 次差值多项式') yi = interp1(x, y, xi, 'cubic'); subplot(2, 2, 4); plot(xi, yi, 'k') xlabel('x 轴'); ylabel('y 轴'); legend('三次样条插值')

图1

2.2 图样

运行文件得到图 1 2.3 分析

比较两个函数的图像可知,在区间[0, 64]上三次样条插值函数要更精确一些, 在区间[0, 1]上拉格朗日插值函数仍然不如三次样条插值函数更精确

3 多项式曲线拟合
由实验给出数据表
X Y 0.0 1.0 0.1 0.41 0.2 0.50 0.3 0.61 0.5 0.91 0.8 2.02 1.0 2.46

试求 3 次、4 次多项式的曲线拟合,再根据曲线形状,求一个另外函数的拟 合曲线,用图示数据曲线及相应的三种拟合曲线。

3.1 程序文件
建立新的 m 文件 unit3.m: 代码如下: clc; clear; x = [0.0, 0.1, 0.2, 0.3, 0.5, 0.8, 1.0]; y = [1.0, 0.41, 0.50, 0.61, 0.91, 2.02, 2.46]; a = polyfit(x, y, 3); b = polyfit(x, y, 4); xi = [0.0:0.01:1.0]; aa = polyval(a, xi); bb = polyval(b, xi); subplot(1, 2, 1); plot(x, y, 'x', xi, aa, 'k') xlabel('x 轴'); ylabel('y 轴');

legend('插值点', '3 次曲线拟合') subplot(1, 2, 2); plot(x, y, 'x', xi, bb, 'k') xlabel('x 轴'); ylabel('y 轴'); legend('插值点', '4 次曲线拟合') poly2str(a, 'x') poly2str(b, 'x')

3.2 图形和结果
运行程序结果如下: ans = - 6.6221 x^3 + 12.8147 x^2 - 4.6591 x + 0.92659 ans = 2.8853 x^4 - 12.3348 x^3 + 16.2747 x^2 - 5.2987 x + 0.94272 图像如下:

图2

3.2 5 次多项式曲线拟合
下面进行的: 代码如下: clc; clear; x = [0.0, 0.1, 0.2, 0.3, 0.5, 0.8, 1.0];

y = [1.0, 0.41, 0.50, 0.61, 0.91, 2.02, 2.46]; a = polyfit(x, y, 5); xi = [0.0:0.01:1.0]; aa = polyval(a, xi); plot(x, y, 'x', xi, aa, 'k') xlabel('x 轴'); ylabel('y 轴'); legend('插值点', '5 次曲线拟合') poly2str(a, 'x')运行程序结果如下: ans = - 79.3261 x^5 + 195.4554 x^4 - 172.7104 x^3 + 69.0498 x^2 - 11.0044 x + 0.99547 图像如下:

图3

由图像可知,次数越高,拟合越准确。 4.解线性方程

题目

线性方程组 Ax = b 的 A 及 b 为 ?10 ? ?7 A= ? 8 ? ?7 ? 7 5 7? ? 5? 6 10 9 ? ? 5 9 10 ? ? 8 6 ? 32 ? ? ? ? 23 ? ,b = ? ? , 33 ? ? ? 31 ? ? ?

则解 x = (1, 1, 1, 1) .用 MATLAB 内部函数求 detA 及 A 的所有特征值和 cond(A)
2

.若令

7 8 .1 7 .2 ? ? 10 ? ? 6 5 ? ? 7.08 5.04 A + δA = ? , 8 5.98 9.89 9 ? ? ? ? 6.99 5 9 9.98 ? ? ? 求解(A + δA)(x + δx) = b, 输出向量δx 和 两方面分析线性方程组 Ax = b 解的相对误差

δx

2

.从理论结果和实际计算
2

δx 2 / x

及 A 的相对误差

δA 2 / A

2

的关系.

4.1 求 detA 及 A 的所有特征值和 cond(A)
输入程序: A = [10 7 8 7; 7 5 6 5; 8 6 10 9; 7 5 9 10] det(A) [V, D] = eig(A) norm(A, 2) 输出结果为: A= 10 7 8 7 7 5 6 5 8 6 10 9 7 5 9 10

2

ans = 1 V= 0.5016 - 0.8304 0.2086 - 0.1237 D= 0.0102 0 0 0 ans = 30.2887 0 0.8431 0 0 0 0 3.8581 0 0 0 0 30.2887 - 0.3017 0.0933 0.7603 - 0.5676 0.6149 0.3963 - 0.2716 - 0.6254 0.5286 0.3803 0.5520 0.5209

则得到 detA = 1 A 的特征值为 0.0101 0.8431 3.8581 30.2887

cond ( A) 2

= 30.2887

5.用 MATLAB 求解非线性方程的根
题目

求下列方程的实根
2 x (1) x ? 3 x + 2 ? e = 0 ;

3 2 (2) x + 2 x + 10 x ? 20 = 0 .

要求:(1) 设计一种不动点迭代法,要使迭代序列收敛,然后再用斯特芬森 加速迭代,计算到

x k ? x k ?1 < 10 ?8

为 止 .(2) 用 牛 顿 迭 代 , 同 样 计 算 到

x k ? x k ?1 < 10 ?8

.输出迭代初值及各次迭代值和迭代次数 k,比较方法的优劣.

5.1 不动点迭代法
建立新的 m 文件 unit71.m: 代码如下: function [y, n] = unit71(x, eps) if nargin = = 1 eps = 1.0e - 8; else if nargin<1 error return end x1 = gg(x); n = 1;

while (norm(x1 - x)> = 1e - 8)&&(n< = 10000) x = x1; end y = x; 若是 function f = gg(x) f(1) = (exp(x) - 2 - x^2) / ( - 3); 在在命令窗口输入:unit71(1) 输出结果为: n = 15 ans = 0.2575 若是 function f = gg(x) f(1) = - (x^3 + 2 * x^2 - 20) / 10; 在命令窗口输入:unit71(1) 输出结果为: n = 10001 ans = 0.5489 x1 = gg(x); n = n + 1;

5.2 斯特芬森加速迭代法
建立新的 m 文件 unit72.m:

代码如下: function y = unit72(x0, eps) if nargin<2 eps = 1.0e - 8; end a = g(x0); b = g(a); n = 1;

x1 = x0 - (a - x0)^2 / (b - 2 * a + x0); while (abs(x1 - x0)> = eps)&(n< = 10000) x0 = x1; a = g(x0); b = g(a);

x1 = x0 - (a - x0)^2 / (b - 2 * a + x0); end x1 n

n = n + 1;

若是 function y = g(x); y = (exp(x) - 2 - x^2) / ( - 3); 在命令窗口输入:unit72(1) 输出结果为: x1 = 0.2575 n=4 若是 function y = g(x); y = - (x^3 + 2 * x^2 - 20) / 10

在命令窗口输入:unit72(1) 输出结果为: x1 = 1.3688 n=5

5.3 牛顿迭代法
建立新的 m 文件 unit73.m: 代码如下: function y = unit73(x0, eps) if nargin<2

eps = 1.0e - 8; end x1 = x0 - fa(x0) / faa(x0); n = 1;

while (abs(x1 - x0)> = eps)&(n< = 10000) x0 = x1; end x1 n 若是 function y = fa(x); y = x^2 - 3 + 2 * x - exp(x); function y = faa(x); y = 2 * x - 3 - exp(x); x1 = x0 - fa(x0) / faa(x0); n = n + 1;

在命令窗口输入:unit73(0) 输出结果为: x1 = - 3.0123 n = 33 若是 function y = fa(x); y = x^3 + 2 * x^2 + 10 * x - 20; function y = faa(x); y = 3 * x^2 + 4 * x + 10;

在命令窗口输入:unit73(0) 输出结果为: x1 = 1.3688 n=6 通过三种方法的比较,可以看出斯特芬森加速迭代法迭代次数最少,方法最 优,牛顿迭代法次之,而不动点迭代法次数最多,不动点迭代法针对收敛函数求 解,所以在不动点迭代法求解之前要先判断函数敛散性。牛顿迭代法因其效率高 而应用最为广泛,但是它对重很收敛很慢,而且对初值要求严格。

小结:
数值分析是研究如何用计算机解决实际问题的课程.将 MATLAB 与数值分 析课程结合起来,开阔了思路,拓展了解决问题的方法,取得了较好的效

果.MATLAB 在数值计算中发挥着十分重要的作用. 通过最近对 matlab 的学习,我对 matlab 有了更深的了解,学会了用它来 编写一些简单的程序,进行简单的计算。能够用 matlab 解决数值分析的问题让 我十分欣喜。今后我一定更加认真学习这款软件的使用方法,争取在今后能用它 解决更多更高深的数学问题。


赞助商链接
相关文章:
更多相关标签: