前言
我第一次进行微分方程数值求解是在读硕士的时候,当时查找了很多资料,用现在看来很蹩脚的办法写了大段的Matlab代码解决了一个描述激光器谐振腔的简单边值问题。随后我开始对数值计算产生了强烈的兴趣,继续用不那么专业的方法处理研究中遇到的微分方程。直到读博期间我得到了国家留学基金委的资助,到美国华盛顿大学(University of Washington)应用数学系接受联合培养,在系主任J.Nathan Kutz教授的课堂上、组会上以及每周1~2次的面对面单独指导中,我接触到了谱方法(spectral method)。谱方法巧妙的原理和导师精湛的Matlab编程技艺深深地震撼了我。求解微分方程(组)竟可以如此简洁、高效、优雅,那段时间内几乎每天我都会产生这样的感慨。回国后我曾在不同场合做过关于我理论结果的现场报告,于是常有研究生向我请教那些复杂的微分方程(组)是如何求解的。我在他们身上看到了我当初的影子,同时我也意识到谱方法的实际应用在国内还不普及。例如非线性光纤光学中最基本的非线性薛定谔方程(该方程也出现在非线性量子力学中)可以根据谱方法用寥寥十几行的Matlab代码获得高精度数值解,而我所认识的研究生还在使用既不简便也不精确的分步傅里叶法。不久之后我博士毕业,由于一心想进高校任教的我没有找到想要的教职,所以刚刚拿到博士学位后就待业了3个月。于是我在年近30岁的时候开始面对既无业、也无钱、还单身的人生悲剧,想起昔日的同窗、朋友大多已成家立业,内心的苦闷愈甚却无处排解。这时候我开始着手将已掌握的谱方法及其重要的技巧和经验总结成书,一来要让更多的人接触到这些有价值的数值方法,二来潜心写书可令我暂时忘记眼前的烦恼。之后我来到清华大学物理系做博士后研究工作,开始了一项令人振奋的研究,当然也不忘多方联系本书的出版事宜。如今我很高兴地看到本书即将出版发行,它不但是一本可以教你如何高效、便捷地解决各类微分问题的实用教程,同时也是我身处逆境不甘认命的一个见证。
本书中,常见的微分问题均可在40行代码内解决,其中的核心代码不到10行,且代码只需在默认安装的Matlab上即可执行,并不依赖于第三方插件。此外,Matlab代码中采用的谱方法以及时间步进法是在计算精度、运算量、稳定性等方面颇具优势的数值计算方法,所有掌握高等数学和Matlab语法的读者在看完本书之后,均可以得心应手地、高效简洁地、精确地解决各类常见微分问题。本书分为上篇、中篇和下篇。上篇介绍欧拉法、龙格-库塔法、有限差分法和有限元法等基础数值知识,旨在使读者了解在谱方法之前出现的主要数值方法的基本原理,并能够与后文中的谱方法形成对比,加深理解。中篇和下篇分别介绍了不同边界条件下的谱方法,对数值方法比较了解的读者可快速浏览上篇后直接阅读中篇和下篇。
感谢J.Nathan Kutz教授,他深厚的数学功底和过人的物理直觉令我受益匪浅,极大地感召我在学术的道路上一路前行。感谢我的硕导和博导宋晏蓉教授、张新平教授,这两位教授工作出众并且将学生的自身发展放在首要位置,在研究组人手不足的情况下仍然支持学生出国学习。感谢密云二中的数学老师王嘉新,我对数学的热爱都始于他生动有趣的教学以及慧眼识才的培养。感谢清华大学物理系的薛平教授对我的悉心栽培和提携,他在我学术道路最艰难的起步阶段给予了无私的支持,并为本书作序。最后感谢我的家人、亲戚和朋友多年来予以我的支持和鼓励。
没有几位恩师兢兢业业的工作以及亲友们的关怀,就没有我的这本书,也没有我的今天。(https://www.daowen.com)
张晓
2015年8月于清华园