R语言数值积分
前两天对学习了R里面计算的基本范围,以及一些求解方程的方法,今天来看看积分,其实上个学期学了数值分析,对这部分的算法是有所了解的,当时是用matlab写了一遍,已经忘了怎么实现的了,现在用R重新写一遍吧,算法有梯形积分法,辛普森积分法,自适应积分法。
- 梯形积分法
梯形积分法可以用下图很好的解释
就是将微积分的时候用的方法,取Δx,则一小块面积就约等于f(x)*Δx,连续函数在Δx趋于0的时候,该公式会越来越精确。
###设置小数位数
options(digits = 8)
func1 <- function(x) return(4*x^3)
###梯形积分法
tixing <- function(func, a, b, n=100){
x <- 0
h <- (b-a)/n
for(i in 1:n){
x <- h*func(a+i*h) + x
}
return(x)
}
tixing(func1,0,1,n=10000) ###可以看到这种近似较为粗糙,可以稍微改进一些
tixing2 <- function(func, a, b, n=100){
h <- (b-a)/n
add_by <- seq(a,b,by=h)
f_x <- sapply(add_by,func)
x <- h*sum(f_x[1]/2,f_x[2:n],f_x[n+1]/2)
return(x)
}
tixing2(func1,0,1,n=100)
- 辛普森方法
辛普森方法和梯形方法类似,但是做了改进,前面我们改进的方法用的是梯形逼近,这样子f(x)其实是表示成了一段直线,辛普森方法使用抛物线来拟合,可 以降低误差。
这里直接给出辛普森的计算公式
S=h/3(f(x0)+4f(x1)+2f(x2)+4f(x3)+```+4f(xn-1)+f(xn))
###辛普森方法
simpson <- function(func, a, b, n=100){
h <- (b-a)/n ###奇数项
add_by_1 <- seq(a+h,b-h,by=2*h)
###偶数项
add_by_2 <- add_by_1+h
add_by_2 <- add_by_2[-length(add_by_2)]
x <- h/3*sum(func(a),4*sapply(add_by_1,func),2*sapply(add_by_2,func),func(b))
return(x)
}
目前为止我们指定了运算次数n,而不是指定误差来计算,当然指定误差也是可以的,考虑一种循环,每次n都增加1,就可以完成这个目标了,但是这样运算 量会越来越大,所以推荐使用另一种方法,即公式本身具有的误差,可以又其本身和其n阶导数一起表示出来,具体的见数值分析相关书籍。
- 自适应积分法
这种方法我以前也没有过接触,书上讲它的基本思想是越是陡峭(导数大)的函数,需要的分割越细,越是平坦(导数小)的函数,需要的分割越少。详细 的,在进行运算的时候,先限定一个误差,然后将函数分割为两半,每边的误差均是误差的一半。这种方法的程序我再思考一下,还没想到怎么实现较好。
R语言数值积分的更多相关文章
- R语言手册
在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data analysis and visualization which is built bas ...
- R语言(资源)
#学习 R 的方法 知识和耐心,是成为强者的唯一方法. - 通过阅读来学习.包括了阅读经典的教材.代码.论文.学习公开课.- 通过牛人来学习.包括同行的聚会.讨论.大牛的博客.微博.twitter.R ...
- R语言编程艺术(4)R对数据、文件、字符串以及图形的处理
本文对应<R语言编程艺术> 第8章:数学运算与模拟: 第10章:输入与输出: 第11章:字符串操作: 第12章:绘图 =================================== ...
- R语言作为BI中ETL的工具
R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...
- R语言环境安装与基本使用
R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...
- R语言绘制空间热力图
先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...
- [R]R语言中的%>%和%.%
最近在网上看R的代码,常常看到 x %>% y 的写法. 样子看着像是pipe的用法,搜了一下, 没找到语法的相关说明. 今天突然开窍,想着 %>% 可能不是语言本身支持的语法,可能是某个 ...
- .Net调用R语言
///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...
- 用R语言的quantreg包进行分位数回归
什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...
随机推荐
- topcoder srm 635 div1
problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. p ...
- LGOJ P3834 【模板】可持久化线段树 1(主席树)
代码 #include <cstdio> #include <iostream> #include <algorithm> using namespace std; ...
- Java之二分查找算法
算法说明:取中间位置的值与待查字比较.如果比待查字更大,则去列表的前半部分查找,如果比待查字小,则去列表的后半部分查找,直到找到这个待查字,或者返回没有找到这个待查字.其中给定的列表是从大到小排列的有 ...
- 关于transactionscope 事务的脏数据
在一个项目中,关于新客的检测,如果查询到积分记录就是老客,因为检测的之前先积分,因为使用的是事务,造成本地代码没提交前已经有该会员的积分记录,而到数据库中却查询不到记录.造成永远都是老客,解决的方法是 ...
- WinForm 设置窗体启动位置在活动屏幕右下角
WinForm 设置窗体启动位置在活动屏幕右下角 在多屏幕环境下, 默认使用鼠标所在的屏幕 1. 设置窗体的 StartPosition 为 FormStartPosition.Manual. 2. ...
- jQuery添加删除
//代码 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <titl ...
- 安装vue-cli-service和webpack
https://www.zacms.com/index.php/archives/106/ http://www.cnblogs.com/sloong/p/5584684.html
- unity - ios打包真机测试及模拟器测试
本文介绍unity游戏如何在iphone机和ios模拟器上进行测试打包 准备工作:mac电脑一台.iphone一部.连接mac和iPhone的数据线.unity.Xcode.苹果开发者账号. 苹果开发 ...
- [转载] 修改linux终端用户名的颜色
此文章为转载,来源:https://blog.csdn.net/vactivx/article/details/62219349,目的是怕以后他博客打不开,文章就没了.存个档. 这个基本都需要手动修改 ...
- Windows 下Jenkins进程误删,如何重启
手残误删了Jenkins运行的java进程,结果.... 用管理员身份启动cmd 然后进入jenkins目录.运行 net start jenkins 否则会报系统错误5 延伸: net stop j ...