数值分析
zhutou1280
想做程序员的核物理专业学生
展开
-
全区间拉格朗日插值多项式
上篇文章用了3次拉格朗日插值http://blog.csdn.net/qq_26025363/article/details/53376477,3次插值可能精度不够,如果数据点很密集的话,多次插值可能更好,所以本次编写了通用的插值多项式算法,由于拉格朗日插值插值的精度超过8个点误差就比较大了,所以大于8个点的数据,只取最接近插值点的8个数据。不足8个点的按全区间插值。 下面贴代码:/*本算法是全区原创 2016-11-28 23:36:23 · 1361 阅读 · 1 评论 -
列主元消去法求解线性方程组(C++实现)
接着上次的继续,上次使用了高斯消元法http://blog.csdn.net/qq_26025363/article/details/53027926,但是,在消元过程中,无法使主元素a(ii)≠0,但是很小时,用其做除数,会导致其他元素数量级的严重增长,舍入误差的扩展,最后导致计算结果不可靠。所以这次采用列主元素消去法来进行,思想就是将有小数的那行与该列中数最大的那行进行交换。 还是写帖代码吧#原创 2016-11-05 13:09:21 · 19607 阅读 · 5 评论 -
试位法求解非线性方程的根
本次实现试位法的算法,该算法的背景如下: 该算法的详细解释如下: 该算法的实现如下:/**试位法*方程f(x)=0在区间[a,b]上连续,且f(a)f(b)<0,则方程f(x)=0在区间[a,b]上必有实根。*函数接口:double false_pos(double a,double b,double eps,double f(double))*a:求根区间的左端点*b:求根区间的右端原创 2016-12-20 14:27:40 · 4050 阅读 · 0 评论 -
龙贝格求解数值积分
龙贝格求解数值积分,将梯形公式求解线性组合,得到龙贝格求积分。先贴代码:/*龙贝格求积分*double romb(double a,double b,double eps,double(*f)(double))*double a:给出积分区间下限*double b:积分区间上限*double eps:误差精度*double (*f)(double) :被积函数*函数返回double*/原创 2016-12-26 11:59:13 · 3272 阅读 · 0 评论 -
变步长辛普森求数值积分
先贴代码:整理好了在给出介绍/*变步长辛普森公式*double simp(double a,double b,double eps,double (*f)(double))*double a:区间的左端点*double b:区间的右端点*double eps:误差精度*double (*f)(double):积分函数*返回值为double**/#include<iostream>#原创 2016-12-26 12:01:02 · 9796 阅读 · 0 评论 -
变步长梯形求数值积分
数值积分中,插值求积公式可以近似求积函数。对于插值函数,可以用梯形公式来近似,为了满足一定的精度,需要将求积区间分成很多个小的区间,分别用于梯形公式,但是由于某些时候步长不能很好的控制,所以需要变步长。本算法给出变步长求积公式,该算法的具体形式可以在数值分析的书籍中找到,下面直接给出c++代码/;/*变步长梯形求积法*该函数double tarp_form(double a,double b,do原创 2016-12-24 18:01:06 · 7895 阅读 · 0 评论 -
多项式求值的秦九韶算法
多项式求值算法,如果仅用普通的多项式的求法,对于n次多项式,需要n/(n+1)次的乘法,n次加法,计算量大,改用秦九韶算法,能有效的降低时间复杂度,并且该算法还能顺便给出多项式在该点的导数值,一举多得。秦九韶算法在国外又称Hernor算法。下面贴代码:/**多项式求值的秦九韶算符(国外称Hernor算法)*该算符将一个多项式求值,原本进行n(n+1)/2次乘法,和n次加法运算*简化成n次乘法运原创 2016-12-22 11:45:37 · 4660 阅读 · 0 评论 -
对分法求非线性方程的根
对于非线性方程的求解,有时候很难找到解的解析函数,所以只能才用数值求解。常见的一些非线性方程为基本原理:如果非线性方程f(x)=0,的左端函数f(x)在区间[a,b]上连续,并满足f(a)f(b)<0,则方程至少有一个实根。 基本思想:逐步缩小这个有根的区间,当这个区间减少到一定程序时,就取这个中点作为根的近似值。如果在区间[a,b]内有多个实根,则单独利用对分法只能得到其一个实根。所以,将对分法原创 2016-12-16 13:44:22 · 4255 阅读 · 0 评论 -
三次拉格朗日插值多项式
本文属于代数插值的内容,对于很多数据处理,比如物理实验之类的,得到了很多个数据点,但是并不能找到一个解析的公式来描述,但是我们确实知道该函数是连续的,这样,我们可以通过一系列的点,来插值,找出某个点的值,并且我们使用多项式来逼近,这是多项式的插值。 本次算法使用多项式的插值公式,并且是3次插值,即,只用3个数据点进行插值。对于如果有很多歌数据点,那就找插值点最近的3个数据点进行插值。本算法会自动判原创 2016-11-28 13:43:22 · 23657 阅读 · 0 评论 -
全主元高斯消去法求解线性方程组
本次采用全主元求解线性方程组,比上次的列主元消去法http://blog.csdn.net/qq_26025363/article/details/53044843更加的精确,上次列主元只是选出列中最大的那个数,这次选出行、列中最大的那个数当作主元,无疑增加了可靠性。 本次的算法是完全不同的算法,本次考虑了很多东西,节省了很多空间。输入n*n阶矩阵,和n阶向量,本次算法会改变输入矩阵和输出矩阵的值原创 2016-11-28 01:30:24 · 11046 阅读 · 3 评论 -
高斯消元法解线性方程组(C++实现)
最近在学数值分析,正好学到求解线性方程组。就自己动手简单实现了一下。关于本算法的原理可以在《数值分析》第5版(李庆扬编),对应于该书的P145页,详细讲解了公式。因本人时间有限,暂时不详细编辑公式,等空闲了再来重新补充。 简要的说明下该算法的应用吧,高斯消元法在线性代数那门课肯定学过了,对于一般简单的3、4阶线性方程组,还可以进行纸上的笔运算,但是当数目过多,算起来就比较吃力了,所以借原创 2016-11-03 23:28:04 · 46774 阅读 · 5 评论 -
矩阵的LU分解求解线性方程组(C++实现)
继续解方程组,这次使用LU分解求解方程组的解,该方法思想就是将一个矩阵分解为一个单位下三角矩阵L和一个上三角矩阵U,属于矩阵的三角分解法,又称杜利特尔(Doolittle)分解。其实高斯消元法的进行的每一步消元操作,都是等于左乘一个初等置换阵。具体的该方法的证明在数值分析或者线性代数的课本上应该都有,在这就不给出证明和说明了。本篇文章主要给出具体的C++实现过程。 还是老样子,先贴代码吧!原创 2016-11-07 22:55:19 · 21826 阅读 · 3 评论 -
平方根法求解线性方程组(C++实现)
背景:应用有限元法求解结构力学问题时,最后归结为求解线性方程组,该系数矩阵大多具有对称正定性质。平方根法就是利用对称正定的三角分解求解对称正定方程组的一种有效方法。 前提:系数矩阵A为对称矩阵,且A的所有顺序主子式均不为0。算法1:将系数矩阵A分解为L和L的转置。则求解Ax=b的过程,就变为求解Ly=b,(L转置)x=y的过程。 但是该算法会出现开平方,在计算机中,开平方这个算法本身原创 2016-11-23 21:01:38 · 8604 阅读 · 4 评论 -
迭代法求解线性方程组(C++实现)
本系列是数值分析相关算法的文章,这次用迭代法求解线性方程组,不同于上次用高斯消元法之类的求解。迭代法对于稀疏矩阵方程组的运算,会大大提高。而如果用高斯相关的算法求解,会浪费大量资源计算无用的东西,所以有必要研究此算法。 本文章主要使用了3个算法,分别是雅可比迭代法、高斯-塞德尔迭代法、超松弛迭代法。每一个算法都比前一次的迭代次数少。下面贴代码!#include <iostream>#includ原创 2016-11-22 19:41:49 · 13575 阅读 · 3 评论 -
全区间厄米特插值算法
在某些插值问题中,不仅给出了插值点的值,也给出了插值点的导数值,这便可以运用厄米特插值公式进行插值。厄米特插值公式如下:下面给出代码://Hermite插值/* *函数声明double Hermit(double* x,double* y,double* dy,int n,double t) *x为存放给定n个结点的指针 *y为存放n个节点上的值的指针 *dy为n个结点的导数的指针 *n原创 2016-12-05 23:06:54 · 2624 阅读 · 0 评论 -
艾特肯逐步插值法
艾特肯(Aitken)逐步插值法是代数插值中一个较为普遍的方法,对于拉格朗日插值,误差的余项并不能判断大小,而艾特肯插值法解决了余项的精度问题,该方法可以通过精度的要求逐步提高插值的阶,在插值过程中只需要通过两个低阶的插值结果进行线性拟合即可,并且计算方便。 具体实现过程就不多说了,我在代码里面注释的很清楚了! 代码如下://全区间艾特肯插值//函数接口说明:/* double Aitke原创 2016-12-04 18:39:53 · 4823 阅读 · 0 评论 -
4阶经典龙格库塔公式求解微分方程
本次求解微分方程,用4阶龙格库塔方法,该方法的代数精度高,比欧拉法,三阶龙格库塔都高,本次的实现很粗糙,由于本人没有熟练掌握函数指针的方式,对于不同微分方程,并不能做到一个普适的输入版本,所以本算法只能对本次的微分方程适用,等掌握了函数指针的用法,再来重写,这次的算法很简陋,也没有做一些越界的异常处理、判断。 代码如下://龙哥库塔方法求解微分方程/* *4阶龙格库塔方法,运用了经典公式 *原创 2016-12-02 12:43:35 · 16153 阅读 · 2 评论