前两天对学习了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语言数值积分的更多相关文章

  1. R语言手册

    在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data analysis and visualization which is built bas ...

  2. R语言(资源)

    #学习 R 的方法 知识和耐心,是成为强者的唯一方法. - 通过阅读来学习.包括了阅读经典的教材.代码.论文.学习公开课.- 通过牛人来学习.包括同行的聚会.讨论.大牛的博客.微博.twitter.R ...

  3. R语言编程艺术(4)R对数据、文件、字符串以及图形的处理

    本文对应<R语言编程艺术> 第8章:数学运算与模拟: 第10章:输入与输出: 第11章:字符串操作: 第12章:绘图 =================================== ...

  4. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  5. R语言环境安装与基本使用

    R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...

  6. R语言绘制空间热力图

    先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...

  7. [R]R语言中的%>%和%.%

    最近在网上看R的代码,常常看到 x %>% y 的写法. 样子看着像是pipe的用法,搜了一下, 没找到语法的相关说明. 今天突然开窍,想着 %>% 可能不是语言本身支持的语法,可能是某个 ...

  8. .Net调用R语言

    ///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...

  9. 用R语言的quantreg包进行分位数回归

    什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...

随机推荐

  1. windows微信双开

    下面的代码写到xxx.bat文件中 @echo off start /d "D:\software\WeChat\" WeChat.exe start /d "D:\so ...

  2. linux下的nmap工具能干什么?

    答:可以用来探测远程主机的操作系统类型,使用方法如下: nmap -A <ip address>

  3. 【新特性】JDK1.9

    一.目录结构 JDK9具体目录结构如下所示: bin: 该目录包含所有的命令. conf: 包含用户可以编辑的配置文件,例如以前位于jre\lib 目录中的.properties 和 .policy ...

  4. Summary on deep learning framework --- Theano && Lasagne

     Summary on deep learning framework --- Theano && Lasagne 2017-03-23 1. theano.function outp ...

  5. Conclusions about Deep Learning with Python

     Conclusions about Deep Learning with Python  Last night, I start to learn the python for deep learn ...

  6. JVM即时编译器

    为何HotSpot虚拟机要使用解释器与编译器并存的架构? 为何HotSpot虚拟机要实现两个不同的即时编译器? 程序何时使用解释器执行?何时使用编译器执行? 哪些程序代码会被编译为本地代码?如何编译为 ...

  7. 浏览器输入URL后,HTTP请求返回的完整过程

    1.Redirect,跳转    浏览器记录里这个地址永久跳转的新地址,浏览器先去判断需不需要跳转 2.Application cache ,应用缓存    浏览器看请求的资源是否有缓存 3.DNS解 ...

  8. Date中before和after方法的使用

    Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false: Date1.before(Date2),当Date1小于Date2时,返回TRUE,当 ...

  9. xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证

    xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...

  10. ExtJs常用功能

    1.判断内容是否修改 1) var cgrid = query_panel.cgrid; var v = cgrid.getValues(); //console.log(v); if (v != & ...