MENU

Tony Yang

About Me

小学生,读书期间。由于时常涉及到力学、有限元法、数值计算等内容,作为非数学、非力学、非计算机专业的student,对于这些知识的学习过程尤为艰辛,最为痛苦之处在于,所买到的大部分教材对于一个学习者来说极为不友好,理工科的教材往往是写给会的人看的,对于初学者来说,这一过程是十分让人恼人的。因此想把自己对于这些知识的学习心得与理解进行分享,以一个学习者的角度去分享我的认识,这也是做这个网站最大的动力。如果你也是个学习者,那么你会在这得到收获!

Python

在所有的学习中,编程实现全部采用Python语言进行,这是我喜爱的语言!它能帮助你解决很多苦恼,并且足够的易用。

Life is short, you need Python!

事实上,在最初的学习中,对于非计算机专业的学生而言,绝大部分数值计算实现时用到的是Matlab,对我也不列外。当接触到Python后,感受到了Python在科学计算领域具有良好的支持时,便进行了尝试,其线性代数的计算与Matlab中的函数差别不是很大,毕竟这些高级语言中对于线性代数的实现都是基于久经考验的LPACK库和BLAS库,Python的Numpy库使得线性代数的运算得以完美进行;此外,对于数值计算,结果的可视化是一个非常重要的一点,Matlab的绘图效果有着比较强烈的锯齿感。在使用了matplotlib后,其pyplot模块中命令与Matlab十分相近,对入门十分友好。对于data visualization,我始终认为颜值即是正义!

1568714142386.png

在所有的学习中,问题的解决都是通过Python中如下几个库解决的,这里主要是在科学计算领域对Python的应用。无论是通过pip管理Python库,还是conda来管理,对于科学计算来说,以下几个库是必须要被安装的,同时也是你应当掌握的。

  • Numpy
  • Scipy
  • Matplotlib
  • Numba
  • Sympy

Anaconda是Python在科学计算方面的一个整合,极大的方便了库的管理,希望采用它进行Python的部署。

1568714277794.png

注意,对于Python的掌握,你不必对其进行十分深入、全面的学习,但你必须熟悉Numpy以及matpltlib库的使用,足够地熟悉线性代数在Python的用法,这是Scientific Calculation的基础。

What Do You Learn from Here?

这里以下内容都是将要被分享的。

  • 数值计算及其Python的编程实现
  • matplotlib的可视化
  • 变分法以及原理
  • PDE理论
  • 有限元法的原理以及编程的实现
  • 有限差分法
  • 深度学习

我会分享这几年自己对于上述知识的学习心得与理解,从一个“不会者”的角度去阐述我的理解。之所以我会学习这些内容,并不是我主要研究的对象就是这些,多数是为了到达、解决主要问题,而不得不得进行学习掌握的。这里,主要的核心知识是如何采用数值方式去求解偏微分方程,核心学习是有限元法的编程实现;有限元法从更加广泛地角度看,FEM是一种求解PDE的数值方法。

为了让数值解结果更有意义,那么PDE的解析解自然应当被了解;作为基本的数值计算方法,FDM的求解思路十分明确,易于学习与理解,因此对于PDE的数值求解,第一个被掌握的方法应当是FDM;而该方法在几何上的局限性使得我们去学习FEM更加具有迫切感。

多数人对于FEM的认识或者了解,大部分都是从接触商业的有限元软件开始的。这一阶段是一个“黑盒子”的学习过程,但是它提供了足够强烈的感性认识。对有限元法的数学原理学习,是精通有限元法这一数值方法的必要过程。FEM的学习源于力学的分析,但是对于该方法的认识不应当局限于力学问题范畴,从更为广泛的PDE的求解以及方程与对应泛函之间的关系入手,将其作为一种数值方法来学习,不仅仅关注于方法本身,更有价值的在于要认识到所要研究的物理问题的本质意义

之所以要学习数值分析这方面的知识,是因为对于现实中的绝对大部分问题的解决来说,数值结果是唯一可能实现的一个途径,积分的数值求解具有极大的实用价值,因为有限元法所涉及到本质就是一个积分方程的求解,且在实现过程中对于单元刚度矩阵的求解时往往是利用数值结果来完成。