[数值计算] 1. 学习初始与基本概念

0. 引言

博主目前为数学与应用数学系大二下学期一名学生,学校开设《现代数值计算方法》(MATLAB版)由马昌凤、林伟川老师编著,科学出版社出版。学校安排学时为72个课堂教育学时即20个上机学时,由于放假、调课、复习原因的话应该仅有60~65个学时供学习。上机时主要以matlab软件为主,实现课堂的各类数值计算算法,并在课下编写实验报告进行巩固复习。

学习过程中感觉很有意思,对其产生了浓厚的兴趣,希望能够记录下自己的学习经历,及学习中的小心得与大家共同分享。其中可能会参考互联网各位老师的笔记、图片等,如若构成侵权请联系我,个人会进行重写,若造成不便请多多海涵。

1. 数值计算的基本概念

1.1数值计算方法的研究对象和内容

数值计算是数学中关于计算的一门学问,它研究如何借助于计算工具求得数学问题的数值解答。这里的数学问题仅限于数值问题,即给出一组数值型的数据(通常是一些实数,称为初始数据),去求另一组数值型数据,问题的本身反映了这两组数据之间的某种确定关系。如函数的计算、方程的求根都是数值问题的典型例子。

数值计算的历史源远流长,自由数学一来就有关于数值计算方面的研究。古巴比伦人在公元钱2000年左右就有了关于二次方程求解的研究,我国古代数学家刘徽利用割圆术求得圆周率的近似值,而后朱重置求得圆周率的高精度的值都是数值计算方面的杰出成就。数值计算的理论与方法是在解决数值问题的长期实践过程中逐步形成和发展起来的。但在电子计算机出现以前,它的理论和方法发展十分缓慢,甚至长期停滞不前,由于受到计算工具的限制,无法进行大量的复杂的计算。

科学技术的发展与进步提出了越来越多的复杂数值计算问题,这些问题的圆满解决已远非人工手算所能胜任,必须一卡电子计算机快速准确的数据处理能力。这种用计算机处理数值问题的 方法,称之为科学计算。今天,科学计算的应用范围非常广泛,天气预报,工程设计,流体计算,经济规划和预测以及国防尖端的一些科研项目,如核武器的研制,导弹和火箭的发射等等,始终是科学计算最为活跃的领域。

现代数值就散的理论与方法是计算机技术的发展与进步一脉相承的。无论计算机在数据处理,信息加工等方面取得了多么辉煌的成就,科学计算始终是计算机应用的一个重要方面,而数值计算的理论与方法是计算机进行科学计算的依据。它不但为科学计算提供了可靠的理论基础,并且提供了大量性质有效的数值问题的算法。

由于计算机对数值计算这门学科的推动和影响,使得数值计算的重点转移到使用计算机编程算题的方面上来。现在的数值计算理论与方法主要是面对计算机的。研究与寻求适合在计算机上求解各种数值问题的算法是数值计算这门学科的主要内容。

1.2 数值算法的基本概念

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这是上课时所采用课件,与课本同步。值得注意的是推导克拉姆法则计算量时,老师对其进行了着重强调,主要复习大一时《高等代数》知识。书上仅有乘法的计算量,现对其算法全计算量进行推导:

n阶方程组,需要算n+1个n阶行列式,
每个行列式,如果按定义计算,有n!项
每一个项又是n个数的乘积,所以,每个行列式的计算量为
n!·(n-1)+n!-1(因为还有n!-1次加减法) n个数相乘有n-1个乘号
=n·n!-1
所以,总计算量为(还有克拉莫法则n个除法)
(n+1)[n·n!-1]+n
=n·(n+1)!-1

数学理论基础与利用计算机实现算法这两者虽说相似程度已经很高了,但是依计算机结构来讲,数据存储有其局限性:
1) 计算机中实数不具有稠密性。
2) 计算机中的"数"是有范围的,表示程度有限。
这两大局限性,尤其第二点会使得计算过程中产生误差,随着计算量的增大,这些误差在计算中不断累积、越来越大,以致于使得结果严重失真。

在C、C++语言中double类型数据为双精度浮点型,如若进行大小比较时会因为丢失精度而产生预期之外的问题:

#include <iostream>
#define eps 1e-8          //自己先定义精度
using namespace std;
 
int main()
{
    double a,b;
    a = 1.34234343;
    b = 1.32323;
    if (a - b > eps)
    {
    }
  return 0;
}

对于直接的两个double是可以比较的,但是如果是对某两组double数据(比如每组包括3、4个double类型)进行运算后(比较加减乘除运算后),采用与极小数比较是相对可靠的,因为每个源double数据进行运算后,其精度会进一步发生改变,导致结果误差较大。
但是,说的没错,但是这个极小数是多少呢?实际取决于你数据的大小,数据越大,这个极小数也要变得相对大才有意义,比如float,如果数据是12345679这么大的话,那么这个极小数如果小于1,实际上一点意义都没有,跟= = 一点区别都没有,而如果这个数定大了,比如0.0001,如果你的数据在1附近,那么可能造成精度不够,实际要根据具体情况,根据值不同具体应用,而现在的很多书,对于浮点数,都是直接给的0.0000001等数,未必就比 = =好。

所以一个好的算法需要具备如下特征:
1)必须结构简单,易于计算机实现
2)理论上必须保证方法的收敛性和数值稳定性
3)计算效率必须要高,即计算速度快且节省储存量
4)必须经过数值实验检验,证明行之有效
因为可以不断地对所写程序进行优化,而优化到的程度同样是程序设计人员水平高低的直观体现。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ypuyu

如果帮助到你,可以请作者喝水~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值