上一次我们完成了对第二类边界条件的样条插值的函数编写,现在的问题是:如何求函数上的最大曲率
以我非常有限的python知识,想到了三种办法:
1.先将曲率的表达式给出,再给足x的采样点,得到x对应的曲率的值列表,利用列表的寻找最大值函数来找曲率最大值
当然这个方法弊端比较明显,首先是精度问题,精度肯定不是很高,并且计算量也较大,这里就不给出代码了(因为被我删了)
当然也可以利用取样比较再迭代的方法求得高精度,不过这是后话。
不过max函数有个小技巧,例如一个嵌套列表:[[1,50],[2,40],[5,100]],直接用max函数肯定是不能对其进行排序的,但我们可以:
res = max(cur_all, key=lambda x: x[1])
利用lambda函数就可以得到列表中第1个(列表从第0个开始)的最大值所在的列表,即返回值应当是
res=[5,100]
2.将曲率表达式得出后,利用函数求极值的方法求得最大值
首先我们知道,在样条插值函数里,曲率是连续的,导数分段连续,所以我们可以根据每段的导数正负性找到每段的最大值,再用列表求最大值函数找到全局最大值。
当然,这个方法的优缺点也很明显,优点是给出的最优值精确度较高,计算量相对也不是太大。缺点是实现起来较为复杂。