数值分析第二次作业

  • 格式:doc
  • 大小:301.50 KB
  • 文档页数:36

北航2007级研究生
《数值分析》计算实习作业
(第二题)
院系:航空科学与工程学院
学号: SY0705118
姓名:刘德博
日期: 2007年12月09日
计算实习说明书
目的:训练运用计算机进行科学与工程计算的能力。

要求:
1.独立进行算法设计、程序设计和上机运算,并得出正确的结果。

2.编制程序时全部采用双精度,要求按题目的要求设计输出,并执行打印。

3.只能根据题目给出的信息并且只允许一次计算得出全部结果。

题目:
第二题 关于x ,y ,t ,u ,v ,w 的下列方程组
0.5cos 2.67
0.5sin 1.070.5cos 3.740.5sin 0.79
t u v w x t u v w y t u v w x t u v w y +++-=⎧⎪+++-=⎪

+++-=⎪⎪+++-=⎩ 以及关于z ,t ,u 的下列二维数表
确定了一个二元函数(,)z f x y =。

1.试用数值方法求出(,)f x y 在区域{(,)|00.8,0.5 1.5}D x y x y =≤≤≤≤上的一个近似表达式:
,0
(,)k
r s rs
r s p x y c
x y ==

要求(,)p x y 一最小的k 值达到以下精度:
1020
2700
((,)(,))10i j i j i j f x y p x y σ-===-≤∑∑
其中0.08,0.50.05i j x i y j ==+。

2.计算****
(,),(,)(1
,2,,8;1,2,,5)i j i j f x y p x y i j == 的值,以观察(,)p x y 逼近(,)f x y 的效果,其中**0.1,0.50.2i j x i y j ==+。

说明:
1.用迭代方法求解非线性方程组时,要求近似解向量()k x 满足:
()(1)()12||||/||||10k k k x x x --∞∞-≤
2.作二元插值时,要使用分片二次代数插值。

3.要求由程序自动确定最小的k 值。

4.打印以下内容: (1)算法的设计方案。

(2)全部源程序(要求注明主程序和每个子程序的功能)。

(3)数表:,,(,)(0,1,,10;0,1,,20)i j i j x y f x y i j == 。

(4)选择过程的,k σ值。

(5)达到精度要求时的,k σ值以及(,)p x y 中的系数(0,1,,;rs c r k s ==
0,1,,)k
(6)数表:******
,,(,),(,)(1
,2,,8;1,2,,5)i j i j i j x y f x y p x y i j == 。

5.采用f 型输出**,,,i j i j x y x y 的准确值,其余实型采用e 型输出并至少显示12位有效数字。

一、程序算法的设计
根据题目要求,并结合题目的特点,算法设计方案如下表所示:
二、全部源程序
本人编程所用的软件是Fortran,所编写的程序如下:
三、计算结果
以下为“计算结果.txt”文件中的内容,即为计算结果:
四、心得体会
本次作业从难度上来说要比第一次的大,首先要求解非线性方程,其次就是分片二次插值,再次就是曲面的拟合,而且拟合要自动确定最小的k值。

本题主要是分析好做题的思路,由于本人提前已经开始编写解非线性方程的程序,由于没有分析好题意,以为将t,u代入方程去求解v,w,x,y,所以采用简单迭代法编程,虽然也能解出值来,但是却不能往下做了。

后来才弄明白是要将x,y视为已知,然后确定t,u,v,w。

在用插值法求z。

看来在做一件事的时候,首先要弄明白怎么去做再去下手。

在本次编程过程中遇到很多问题。

比如说精度问题,对结果有明显的影响,这是在程序的后期阶段,由于程序总是不能收敛时才发现的。

再如,在求拟合系数时是解方程还是求矩阵的逆,本人结合矩阵理论的知识,同时翻阅了关于矩阵求拟的资料,觉得对于方阵通过行变换来求逆的根本原理与高斯消元相同,而且比较简练,所以最终采用这种方法。

再如,Fortran里的数组下标默认均是从1开始,而不是从0开始,所以在求拟合多项式的时候,就用到了加减1的情况,使程序可读性有所降低。

在C语言中,有这样的规定就是尽量不用或少用goto语句,在C里也很容易将goto语句用恰当的循环语句来替换,但是在Fortran中,有些不容易替换,在程序编写好以后,有两处用到goto语句,本人都用do while语句替换了,但是在循环前也都添加了程序执行一次的充分条件。

这也算是程序方面新的认识吧。

这次编程觉得收获很大,以后虽然没有像这样的作业了,但是本人觉得数值分析很有意义,也将会一直坚持下去,学会更多的数值分析方法及其程序的实现。