0%

段喵教你用20行代码搞定计算方法实验1

哈工大《计算方法》实验课实验作业

  • 其实就是想说。。。Python的科学计算库真的很强大。。

  • 其实老师的本意是想让我们自己实现,但是我却调了现成的类库。

表示已经上了三个星期的计算方法,但是依旧对这门课听的云里雾里。

不过值得一提的是,感觉实验课还是多少有点意思的,想想今早上课的时候老师还在说建议大家用用高级语言来编程完成实验,而不要用matlab,在他看来matlab不能称作一门语言,而是一个软件~~顿时感觉有一点点无语,既然不让用matlab(喂喂,说的好像你会用似的),那么就用我大python来搞定吧。

早有耳闻python非常适合用来做科学计算,没想到真的很方便。我们主要用到的是两个库,一个是numpy还有一个是scipy,其实光看名字也知道是用来干嘛的了。

先上代码,然后再逐行解释一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding: utf-8 -*-
# 引入必要的包
import numpy as np
from scipy.interpolate import lagrange #看到了吗?拉格朗日就是一个函数
# 下面定义两个列表,一个是题目中给定点的个数,另一个是所求点的x坐标
n_list = [5, 10, 20]
request_list = [-0.95, -0.05, 0.05, 0.95]
# 题目中的函数表达式
def fun(x):
return np.e ** x
# 打开一个文件用来写入结果
with open('1.3.2.txt','w') as fp:
#遍历列表n_list来完成n种情况的写入
for n in n_list:
#由于一开始题目给出点的x坐标不均匀是一个关于n和k的余弦函数,所以构建一个列表来装这些值
x = []
for k in xrange(n + 1):
x.append(np.cos(((2 * k + 1) * np.pi) / (2 * (n + 1))))
# 构建函数表达式,用numpy内置的array方法把普通的列表转换成float64的数组来提高精确度,此时返回的y是一个相应结果的数组
y = np.e ** np.array(x)
# 下面这一行的意思就是用x和y构建一个拉格朗日插值多项式。f就变成了一个可调用的多项式。
f = lagrange(x, y)
print>>fp, n, ':'
# 接下来就是打印结果了
for _ in request_list:
true = fun(_)
inter = f(_)
print>>fp, '%f: true: %.12f interpolate: %.12f delta: %.12f' % (_, true, inter, true - inter)

每错就是这么简单~其他几个题目和这个解决方法完全一样,相比之下更简单。换换参数就可以了喵。

老师总不会说python也不是高级语言了吧~~23333

所以说。。。人生苦短,我用python。

请我喝杯奶茶

欢迎关注我的其它发布渠道