先纠正昨天的一个错误,昨天搞错了,一直在用拉格朗日法生成的文件来绘图,所以今天重新运行牛顿法的时候老是出现一些莫名其妙的错误,今天先来改一下:
这里应该是table(row,col),我写的时候脑子糊涂了,行列两个英文单词记错了。
之后就没啥了,如果要用牛顿法来处理其他函数,只需要在generatdata里面吧datas(i)%y改成
datas(i)%y=function(r)
!这个function是自己写的
直接在module里面声明这个function就好。
其实学了这么一段时间之后,我还是挺有感触的,Fortran和c++很像,尤其是module,它其实就是c++里面的class,只不过Fortran的module不需要声明对象,完全是过程化,直接调用就行,而c++的class,需要在主程序或者需要使用他的函数或者其他结构体里面要声明一个对象,然后通过对象调用这个class里的函数,在就是一些基础语法的区别,我觉得这是开发者的不同造成的,都是编译语言,大家差不多的,然后的话,作者的绘图花活我是整不来,我直接给写文件了,写好文件,pandas直接读文件,然后两个列表里的数就是坐标[x,y],直接plot,多省事,好了,言归正传,今天还有几个插值方法要学的。
3、最小方差法:
最小方差法用在已经可以用理论推出数据的函数形式,但是我们却不知道函数里各个系数的数值。
这个方法的理论恒简单:对于一条系数未知的直线:,只要计算每个点到这条直线尚的距离,再利用偏微分的方法求出a,b使得每个点到这条直线的距离的平方和最短。
要是的距离的平方和最短,就可以对上式进行偏微分:
联立之后,解:
ok,这个和曲线近似法就到这吧,Fortran的作图太难看了,matlab和python的matplotlib包里面都有专门的插值拟合工具,那个做的好,三次插值、样条插值等,都比我们在这硬抄简单得多,所以,今天的数值计算方法就到这吧。