基于WSGI数值线性代数WEB应用设计与开发毕业论文
2020-03-12 10:26:36
摘 要
网络应用程序(web application 简称Web app)是指基于Web技术开发的系统和应用。得益于HTML5,JavaScript以及Ajax等语言或技术的出现和发展,Web app可以提供与桌面应用程序或移动应用程序类似的功能,同时Web app又具有开发便捷,无需下载以及更新及时的优点。可以说Web app是发展前景非常广阔的技术,因此对相关技术进行系统性的研究和学习是十分必要的。
本文研究了如何实现一个基于WSGI的线性代数计算软件。文章首先分析了目前存在的线性代数计算软件的优缺点,提出了设计一个线性代数计算Web应用的想法并说明了这个想法的现实意义。然后对计算系统进行了需求分析和系统分析,探讨了系统的架构和设计中遇到的难点。接下来对系统的具体实现和测试进行了详尽的介绍,包括开发时使用的技术,代码的流程,测试用例等。最后,论文对开发工作进行了总结并给出了进一步完善的设计。
论文给出基于WSGI的线性代数计算软件的一个实例。该实例实现了线性代数的一些主要功能,并搭建了系统的主要框架。该实例能完成一些繁琐的线性代数计算,极大地节约用户的时间,而且因为该系统的主要计算都运行在服务器上,因此用户可以使用任何一种带有Web浏览器的设备访问该系统,给基于Web的科学计算系统的开发提供了借鉴。
关键词:Python;Fortran;WSGI;Flask框架;线性代数
Abstract
Web application (Web app) refers to systems and applications developed based on Web technologies. Thanks to the emergence and development of HTML5, JavaScript, and Ajax and other languages or technologies, Web apps can provide similar functionality to desktop applications or mobile applications, while Web apps are also easy to develop without the need for downloads and updates. It can be said that the Web app is a very promising technology. Therefore, it is necessary to systematically study and study related technologies.
This article studies how to implement a linear algebraic calculation software based on WSGI. The article first analyzes the advantages and disadvantages of the existing linear algebraic computation software, proposes the idea of designing a linear algebraic computational web application, and explains the practical significance of this idea. Then the demand analysis and system analysis of the computing system are carried out, and the difficulties encountered in the architecture and design of the system are discussed. Next, the detailed implementation and testing of the system are described in detail, including the technologies used during development, the flow of code, and test cases. Finally, the thesis summarizes the development work and gives a further improved design.
The paper gives an example of WSGI-based linear algebraic calculation software. This example implements some of the main functions of linear algebra and builds the main framework of the system. This example can perform some tedious linear algebraic calculations, greatly saving the user's time, and because the system's main calculations are all run on the server, users can use any device with a web browser to access the system. The development of Web-based scientific computing system provides a reference..
Key Words:Python; Fortran; WSGI; the Flask framework; Linear algebra
目 录
第1章 绪论 1
1.1 课题背景 1
1.2 课题目的和意义 1
1.2.1 目的 1
1.2.2 意义 1
1.3 论文的研究思路和所作的工作 1
第2章 系统的分析与设计 3
2.1 需求分析 3
2.1.1 特性需求分析 3
2.1.2 数值线性代数的基本内容 3
2.1.3 系统功能分析 4
2.2 数值线性代数系统的分析 5
2.2.1 系统功能结构图 5
2.2.2 系统数据流程图 6
2.3 体系结构设计 7
2.3.1 REST架构 7
2.3.2 系统的三层结构设计 7
2.4 本章小结 8
第3章 系统的实现 9
3.1 系统表现层的实现 9
3.1.1 客户端与服务器的交互流程图 9
3.2 系统业务逻辑层的实现 10
3.3 系统数据计算层的实现 11
3.4 系统的运行环境 11
3.5 本章小结 12
第4章 系统的测试 13
4.1 测试的意义与目标 13
4.2 测试方法 13
4.2.1 模块测试 13
4.2.2 系统测试 14
4.3 本章小结 14
第5章 总结和展望 15
5.1 总结 15
5.2 展望 15
参考文献 16
致谢 17
绪论
课题背景
线性代数是重要的数学工具,在多个领域都有着重要的应用。但是线性代数的计算往往很繁琐,因此我们希望使用计算机来帮助我们计算。目前可以用于线性代数的软件和工具有很多,比如说MATLAB、Python的Numpy等都是非常成熟专业的计算工具。但是专业往往也意味着使用门槛高,不管是MATLAB还是Numpy都需要下载到PC机上之后才能使用,而且两者都需要学习相应的编程语言才能使用。因此,一个能通过浏览器随时随地访问的线性代数计算系统是有研究价值的。
基于上述理由,本文分析并设计了基于WSGI的线性代数计算Web应用,为基于WSGI的科学计算系统的实现进行有益的探索。
课题目的和意义
目的
基于WSGI设计并实现一个可以进行简单线性代数计算的Web应用程序。该应用应该具有操作简单、响应迅速、不需要下载安装等优点。
意义
科学计算是伴随着电子计算机的出现而迅速发展并获得广泛应用的新兴交叉学科,是数学及计算机实现其在高科技领域应用的必不可少的纽带和工具。[1]而线性代数的计算在科学计算中有着重要的作用。但是目前的线性代数计算工具都有着使用门槛高,下载包装步骤繁琐的缺点,因此本文将基于Web技术的线性代数计算系统作为研究对象是有着现实意义的。
论文的研究思路和所作的工作
随着Web技术的不断发展,Web应用已经可以代替原生应用完成相当一部分的工作,在需要高性能运算装置的科学计算领域,如果能通过Web应用的方式降低研究的门槛无疑对该领域的发展有重要的意义。本文针对线性代数的计算领域,使用WSGI、AJAX、混合编程等技术或工具研究如何实现一个线性代数计算Web应用。本文主要完成了以下几方面的任务:
- 对使用计算机计算线性代数的算法进行了研究,对数值线性代数研究的主要内容进行了学习。
- 分析目前已有的线性代数计算软件或工具,对这些工具的优缺点进行深入的了解,提出使用Web应用来进行线性代数计算的想法。
- 对基于WSGI的线性代数计算系统进行了深入的分析与设计,探讨了系统的需求、功能、结构等问题并提出了系统开发中的难点。
- 实现了线性代数计算的主要功能,提出了对系统的完善方案,对基于Web的科学计算系统的开发提供了借鉴。
系统的分析与设计
线性代数是代数学的分支,主要研究各种先行关系问题,线性代数在物理、数学、计算机等领域都有着重要的应用。但是线性代数的计算往往非常复杂和繁琐,对矩阵或向量的一次运算就需要同时计算大量的数据,不仅浪费了时间而且容易出错。因此,开发一款基于Web技术的分布式数值线性代数计算系统是有必要的,使用该系统对线性代数进行计算不仅能提高计算的效率而且能保证数据的正确性。作为一款工具型的Web系统,其不仅需要一个自己的前端页面供用户使用,还应该提供一套完整可用的API以方便其他开发人员调用,使其他开发人员能方便地将该系统集成到其他应用中。本章将对该系统进行简要的分析与设计。
需求分析
特性需求分析
一款简单易用的数值线性代数应用应具有以下一些特性:
- 易获取,易升级的特性。
数值线性代数系统作为一款工具型的应用应该在任何用户需要的时候就能方便快捷地获取并使用,也就是说用户不应该需要花费时间来下载专门的客户端(当然需要有能访问网络的浏览器)使用它。此外,作为一款对计算正确性要求高的应用,开发者需要经常性对其进行维护和更新,因此该系统应该可以是一个能快速灵活地根据需求进行更改地系统。此外,频繁的更新不应该打扰到用户,用户只需要刷新页面就可以获取更新的内容。
- 对终端设备性能不敏感的特性。
作为分布式应用,数值线性代数系统对线性的计算应该在服务器上完成,用户的终端只负责发送用户的输入和将服务器传来的输出显示出来。因此,理论上任何能运行Web浏览器的设备都应该能流畅地运行此应用。此外,随着移动设备的发展和快速普及,该应用也应该能在移动设备上运行。
- 快速响应的特性。
系统长时间没有响应会极大地消磨用户的耐心,降低用户对应用的好感,用户可能因此放弃使用该应用。因此系统的响应要及时,尤其是在网络不理想或计算量过大时尤其应该注意。
数值线性代数的基本内容
数值线性代数又称矩阵运算,它是科学与工程计算的核心。[2]简单地说,数值线性代数就是研究如何使用计算机来进行线性代数运算的学科。线性代数在很多领域都有着重要的应用,但线性代数的计算繁琐而易出错,因此在高度信息化的今天利用计算机来运算线性代数是很自然的选择。数值线性代数除了对矩阵进行基本运算外还包含了求解线性方程组、求线性最小二乘、求矩阵特征值等问题。
系统功能分析
根据上述对数值线性代数研究内容的分析得到系统的功能模块划分,如图2.1所示:
图2.1 系统功能模块图
功能模块说明:
- 矩阵的基本运算
该模块包括求矩阵的行列式、矩阵的转置、矩阵的迹、矩阵的秩、矩阵的逆等矩阵的基本运算。矩阵的运算是数值线性代数的核心,该模块也是整个系统的基础。
- 解线性方程组
该模块主要用于求解线性方程组,包括判断线性方程组是否相容以及使用多种方法求解线性方程组。
- 求线性最小二乘
线性最小二乘法是指用来寻找变量间线性关系的方法。该模块正是通过最小二乘法来计算变量间线性关系的。
- 求矩阵的特征值
该模块用来求解矩阵的特征值和特征向量。
以上各个模块分别对应数值线性代数的各个研究方向,用户通过这些模块可以解决大部分线性代数的基本运算问题。其中矩阵的基本运算模块是整个系统的基础,其中包含了多个矩阵运算方法,如图2.2所示:
图2.2 矩阵的基本运算
其中矩阵的乘法又包括矩阵与实数的乘法、矩阵与矩阵的乘法以及矩阵的幂(矩阵与自己相乘)。
数值线性代数系统的分析
系统分析是在上一节需求分析的基础上对系统进行的整体分析。通过系统分析,开发者进一步掌握系统开发的主要内容,对系统的需求和流程有进一步的认识。
系统功能结构图
通过需求分析可以将系统从功能上分为三个层次,分别为用户交互层、业务层和数据计算层,如图2.3所示:
用户交互层主要负责与用户的交互,主要包括两方面的作用。一方面是获取用户的输入,交互层应该有一个直观简捷的界面以供用户将待计算的数据输入系统,交互层获取数据后将数据发送给业务层。此外,为了提高用户的体验,交互层应首先对用户输入的数据进行检查,对不符合要求的数据应直接报错。另一方面,当交互层接收到业务层传回的结果后,同样应该以一种直观简捷的方式将结果显示给用户。
业务层主要负责对交互层传来的数据进行预处理后调用数据计算层的函数对数据进行计算并将得到的结果返回给交互层。此外,对于数据可能出现的错误也应该由业务层负责处理并返回给交互层以告知用户输入的数据有错误。
数据计算层用于计算数据。当业务层将经过预处理的数据传入响应函数后,函数首先对数据的格式进行检查,如果格式符合要求则进行计算并将结果返回给业务层,如果格式有误则直接返回错误信息。
图2.3 功能结构图
通过上一节的分析我们可以知道系统对响应速度有较高的需求,而很明显数据计算层的运算速度正是整个系统运行速度的瓶颈之一,如何提高数据计算层的计算效率是提高整个系统质量的重要课题。
系统数据流程图
通过对系统的功能结构的分析我们可以得到如图2.4的数据流程图。
图2.4 数据流程图
从图中我们可以看到,用户输入的数据首先要转化为一种计算机可以读取且方便在网络中传输的数据格式,这种格式就是JSON。JSON(JavaScript Object Notation)是一种数据交换格式,是以JavaScript为基础的数据表示语言[3]。在将JSON通过网络发送之前会对数据进行检查,如果数据有误就直接进行出错处理,这样可以提高数据出错是系统的响应速度,从而提高用户体验。如果数据无误则将器通过网络发送。接下来会对从网络接受的数据进行预处理,也就是将JSON格式的数据转化为更适合计算的数据格式。然后对数据进行检查和计算得到结果或是错误信息。最后将结果或错误信息封装成JSON格式的响应通过网络发送。接收到的响应最后会被转化为人类更容易辨识的数学公式(错误信息将转化为弹窗)展现给用户。
从上述分析我们可以发现每次进行计算数据要经过两次网络传输(不出错的情况下)。众所周知网络传输的速度相比而言是比较慢的,因此网络传输速度也是制约应用响应速度的瓶颈。但是用户的网络环境是因人而异的,想要改善网络传输速度,开发者只能从减少网络传输数据的体积入手。本系统使用的JSON格式正是为了减少传输的体积,此外,通过一些其他技术也可以减少传输的体积以得到更好的用户体验。
体系结构设计
REST架构
REST(Representational State Transfer,表现层状态转换)是一种Web应用架构风格。REST提供了一组体系结构约束,在整体应用时强调组件交互的可伸缩性,接口的通用性,组件的独立部署和中间组件以减少交互延迟,强化安全性并封装旧系统[4]。REST最大的特点就是将服务器和客户端完全分离,客户端与服务器的数据交互完全通过URL形式的API来完成,而前端页面的渲染则交给客户端来完成。可以看到,这种架构风格实际上已经很接近原生应用的表现形式,从某种意义上来说正是REST架构的出现才推动了Web应用的发展。
在实际开发中,很明显的,当用户第一次请求一个URL时服务器仍然要通过网络将HTML、CSS、JavaScript等静态文件发送给浏览器,但之后客户端与服务器的交互将全部通过JavaScript代码调用API来实现。本系统中为了体现这种差异(也为了更快的响应速度),会使用专门的静态文件服务器来响应静态文件的请求而将计算请求转发给其他服务器来响应。
系统的三层结构设计
基于上一节对系统功能模块的分析和REST架构的要求,本系统的逻辑结构可以依照功能分为三层,仿照B/S模式的三层架构我们可以将它们称为表现层、业务逻辑层和数据计算层分别对应功能结构中的用户交互层、业务层和数据计算层。表现层负责用户交互,使用前端开发语言如HTML、CSS、JavaScript等完成并运行在用户的浏览器上。业务逻辑层和数据计算层则运行在性能强大的服务器(集群)上,业务逻辑层负责接受网络上的请求,然后根据请求调用数据计算层中的相关函数进行计算,最后将响应返回给表现层。
本章小结
本章分别从系统的需求、系统的功能、系统的架构等方面对数值线性代数系统进行了分析与设计,对系统的逻辑结构进行了划分,对系统开发中的难点进行了阐述。数值线性代数系统相比于数据库系统来说弱化了数据的存储,但其对数据的计算效率和精度都提出了更高的要求。如何提高数据的计算速度以及减少网络传输数据的体积是提高系统响应速度的关键,也是本课题开发的难点。