求matlab求带参数定积分分

C语言__用六种方法求定积分_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言__用六种方法求定积分
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩10页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢502 Bad Gateway
502 Bad Gateway查看: 7292|回复: 14
ExcelVBA求定积分
阅读权限50
在线时间 小时
本帖最后由 loquat 于
22:01 编辑
自己写了几个一维积分公式Public Function 梯形积分(r As String, a As Double, b As Double, n As Integer) As Double
Dim dx As Double, i As Integer
dx = (b - a) / n
For i = 1 To n
& & 梯形积分 = 梯形积分 + fx(r, (a + dx * (i - 1 / 2))) * dx
Next i
End Function复制代码Public Function 复化辛普生积分(r As String, a As Double, b As Double, n As Integer) As Double
Dim dx As Double, i As Integer, m As Integer
m = 2 * n
dx = (b - a) / m
复化辛普生积分 = fx(r, a) + fx(r, b)
For i = 2 To m Step 2
& & 复化辛普生积分 = 复化辛普生积分 + 4 * fx(r, (a + dx * (i - 1))) + 2 * fx(r, (a + dx * i))
Next i
复化辛普生积分 = (复化辛普生积分 - 2 * fx(r, (a + dx * m))) * dx / 3
End Function
复制代码Public Function fx(f As String, x As Double) As Double
f = LCase(f)
fx = Evaluate(Replace(f, &x&, x))
End Function复制代码两个函数的参数都是
1.积分函数,自变量用x表示,x不区分大小写
2.积分下限
3.积分上限
4.划分次数,不能大于32766,对于梯形积分,越大越接近真值,对于复化辛普生积分,没必要使用大的划分次数
积分区间包含奇点(趋近于无穷的点),复化辛普生公式将不能正确积分,将来可能会修正
也希望高手出招
调用方法:
=梯形积分(&sin(x)^3-ln(x+1)^3+x^5-x&, 0, 2, 2000)
补充内容 ( 12:40):
本贴的研究比较多余。现在VB已经有基本很完善的工程算法了。
本贴内讨论的算法,在书里面都有叙述。。。
阅读权限50
在线时间 小时
本帖最后由 loquat 于
10:25 编辑
占一楼备用
下一步考虑其他方法计算积分,比如随机分布法
以及最后的最后,考虑二重积分,乃至三重积分
阅读权限95
在线时间 小时
占位学习,关于积分在实际中经常用到!但是使用excel解决似乎不容易,经常会去求取立体图形的体积!
阅读权限95
在线时间 小时
loquat 发表于
占一楼备用
下一步考虑其他方法计算积分,比如随机分布法
以及最后的最后,考虑二重积分,乃至三重积分
期待拜读楼主的大作,不知楼主能否给出excel版本的使用附件以方便使用者。感谢感谢!
阅读权限50
在线时间 小时
本帖最后由 loquat 于
09:12 编辑
此贴估计可以结贴了,关于数值计算方法有一本专门的书《科学与工程数值计算算法》
各种数值计算方法该书中都有详尽的源码,不仅仅是数值积分
据我所知,这本书分了VB版,VC++版和JAVA版
对VB版中的相关代码做了修改,原代码需要自定义函数,稍作修改就可以引用单元格或者自定义函数字符串。
以下这个是通用函数Public Function fx(f As String, x As Double) As Double
fx = Evaluate(Replace(LCase(f), &x&, x))
End Function复制代码变步长梯形积分
'&&函数名:NITrapzd
'&&功能:&&用变步长梯形求积法求积,本函数需要调用计算函数f(x)值的函数Func,其形式为:
'& && && & Function fx(f As String, x As Double) As Double
'&&参数:&&a& &&&- Double型变量,积分下限
'& && && & b& &&&- Double型变量,积分上限,要求 b&a
'& && && & eps& &- Double型变量,积分精度要求
'&&返回值:Double型,积分值
Function NITrapzd(r As String, a As Double, b As Double, e As Double) As Double
& & Dim n As Integer, k As Integer, eps As Double
& & Dim fa As Double, fb As Double, h As Double, t1 As Double, p As Double, s As Double, x As Double, t As Double
& &
& & eps = 1/e
& &
& & ' 积分区间端点的函数值
& & fa = fx(r, a)
& & fb = fx(r, b)
& &
& & ' 迭代初值
& & n = 1
& & h = b - a
& & t1 = h * (fa + fb) / 2#
& & p = eps + 1#
& &
& & ' 迭代计算
& & While (p &= eps)
& && &&&s = 0#
& && &&&
& && &&&For k = 0 To n - 1
& && && && &x = a + (k + 0.5) * h
& && && && &s = s + fx(r, x)
& && &&&Next k
& && &&&
& && &&&t = (t1 + h * s) / 2#
& && &&&p = Abs(t1 - t)
& && &&&t1 = t
& && &&&n = n + n
& && &&&h = h / 2#
& & Wend
& &
& & ' 返回满足精度的积分值
& & NITrapzd = t
End Function复制代码变步长辛普生积分'&&函数名:NISimpson
'&&功能:&&用变步长辛卜生求积法求积,本函数需要调用计算函数f(x)值的函数Func,其形式为:
'& && && & Function fx(f As String, x As Double) As Double
'&&参数:&&a& &&&- Double型变量,积分下限
'& && && & b& &&&- Double型变量,积分上限,要求 b&a
'& && && & eps& &- Double型变量,积分精度要求
'&&返回值:Double型,积分值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function NISimpson(r As String, a As Double, b As Double, e As Double) As Double
& & Dim n As Integer, k As Integer, eps As Double
& & Dim h As Double, t1 As Double, t2 As Double, s1 As Double, s2 As Double
& & Dim ep As Double, p As Double, x As Double
& &
& & eps = 1/e
& &
& & ' 迭代初值
& & n = 1
& & h = b - a
& & t1 = h * (fx(r, a) + fx(r, b)) / 2#
& & s1 = t1
& & ep = eps + 1#
& &
& & ' 迭代计算
& & While (ep &= eps)
& && &&&p = 0#
& && &&&
& && &&&For k = 0 To n - 1
& && && && &x = a + (k + 0.5) * h
& && && && &p = p + fx(r, x)
& && &&&Next k
& && &&&
& && &&&t2 = (t1 + h * p) / 2#
& && &&&s2 = (4# * t2 - t1) / 3#
& && &&&ep = Abs(s2 - s1)
& && &&&t1 = t2
& && &&&s1 = s2
& && &&&n = n + n
& && &&&h = h / 2#
& & Wend
& &
& & ' 返回满足精度的积分值
& & NISimpson = s2
End Function复制代码
阅读权限50
在线时间 小时
连分式法'&&函数名:NIPq
'&&功能:&&用连分式法计算一维积分,本函数需要调用计算函数f(x)值的函数Func,其形式为:
'& && && & Function fx(f As String, x As Double) As Double
'&&参数:&&a& &&&- Double型变量,积分下限
'& && && & b& &&&- Double型变量,积分上限,要求 b&a
'& && && & eps& &- Double型变量,积分精度要求
'&&返回值:Double型,积分值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function NIPq(r As String, a As Double, b As Double, e As Double) As Double
& & Dim m As Integer, n As Integer, k As Integer, l As Integer, j As Integer
& & Dim h(10) As Double, bb(10) As Double, hh As Double, t1 As Double, s1 As Double
& & Dim ep As Double, s As Double, x As Double, t2 As Double, g As Double, eps As Double
& &
& & eps = 1/e
& &
& & ' 初值
& & m = 1
& & n = 1
& & hh = b - a
& & h(1) = hh
& & t1 = hh * (fx(r, a) + fx(r, b)) / 2#
& & s1 = t1
& & bb(1) = s1
& & ep = 1# + eps
& &
& & ' 循环计算
& & While ((ep &= eps) And (m &= 9))
& && &&&s = 0#
& && &&&For k = 0 To n - 1
& && && && &x = a + (k + 0.5) * hh
& && && && &s = s + fx(r, x)
& && &&&Next k
& && &&&
& && &&&t2 = (t1 + hh * s) / 2#
& && &&&m = m + 1
& && &&&h(m) = h(m - 1) / 2#
& && &&&g = t2
& && &&&l = 0
& && &&&j = 2
& && &&&
& && &&&While ((l = 0) And (j &= m))
& && && && &s = g - bb(j - 1)
& && && && &
& && && && &If (Abs(s) + 1# = 1#) Then
& && && && && & l = 1
& && && && &Else
& && && && && & g = (h(m) - h(j - 1)) / s
& && && && &End If
& && && && &
& && && && &j = j + 1
& && &&&Wend
& && &&&
& && &&&bb(m) = g
& && &&&
& && &&&If (l && 0) Then bb(m) = 1E+35
& && &&&
& && &&&g = bb(m)
& && &&&
& && &&&For j = m To 2 Step -1
& && && &&&g = bb(j - 1) - h(j - 1) / g
& && &&&Next j
& && &&&
& && &&&ep = Abs(g - s1)
& && &&&s1 = g
& && &&&t1 = t2
& && &&&hh = hh / 2#
& && &&&n = n + n
& & Wend
& &
& & ' 结果返回
& & NIPq = g
& &
End Function复制代码
阅读权限50
在线时间 小时
龙贝格积分'&&函数名:NIRomberg
'&&功能:&&用龙贝格求积法求积,本函数需要调用计算函数f(x)值的函数Func,其形式为:
'& && && & Function fx(f As String, x As Double) As Double
'&&参数:&&a& &&&- Double型变量,积分下限
'& && && & b& &&&- Double型变量,积分上限,要求 b&a
'& && && & eps& &- Double型变量,积分精度要求
'&&返回值:Double型,积分值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function NIRomberg(r As String, a As Double, b As Double, e As Double) As Double
& & Dim m As Integer, n As Integer, i As Integer, k As Integer, eps As Double
& & Dim y(10) As Double, h As Double, ep As Double, p As Double, x As Double, s As Double, q As Double
& &
& & eps = 1/e
& &
& & ' 初值
& & h = b - a
& & y(1) = h * (fx(r, a) + fx(r, b)) / 2#
& & m = 1
& & n = 1
& & ep = eps + 1#
& &
& & ' 循环计算
& & While ((ep &= eps) And (m &= 9))
& && &&&
& && &&&p = 0#
& && &&&
& && &&&For i = 0 To n - 1
& && && && &x = a + (i + 0.5) * h
& && && && &p = p + fx(r, x)
& && &&&Next i
& && &&&
& && &&&p = (y(1) + h * p) / 2#
& && &&&s = 1#
& && &&&
& && &&&For k = 1 To m
& && && && &s = 4# * s
& && && && &q = (s * p - y(k)) / (s - 1#)
& && && && &y(k) = p
& && && && &p = q
& && &&&Next k
& && &&&
& && &&&ep = Abs(q - y(m))
& && &&&m = m + 1
& && &&&y(m) = q
& && &&&n = n + n
& && &&&h = h / 2#
& & Wend
& &
& & ' 求得满意的结果,返回
& & NIRomberg = q
& &
End Function复制代码
阅读权限50
在线时间 小时
自适应梯形积分'&&函数名:NIATrapzd
'&&功能:&&用自适应梯形求积法求积,本函数需要调用计算函数f(x)值的函数Func,其形式为:
'& && && & Function fx(f As String, x As Double) As Double
'&&参数:&&a& &&&- Double型变量,积分下限
'& && && & b& &&&- Double型变量,积分上限,要求 b&a
'& && && & eps& &- Double型变量,积分精度要求
'& && && & d& &&&- Double型变量,对积分区间进行分割的最小步长,当子区间的宽度小于d时,即使没有满足精度要求,
'& && && && && && & 也不再往下进行分割
'&&返回值:Double型,积分值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function NIATrapzd(r As String, a As Double, b As Double, e As Double, dw As Double) As Double
& & Dim h As Double, t As Double, f0 As Double, f1 As Double, t0 As Double, eps As Double, d As Double
& &
& & eps = 1/e
& & d = 1/dw
& &
& & h = b - a
& & t = 0#
& &
& & f0 = fx(r, a)
& & f1 = fx(r, b)
& &
& & t0 = h * (f0 + f1) / 2#
& &
& & Call ppp(r, a, b, h, f0, f1, t0, eps, d, t)
& &
& & NIATrapzd = t
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'&&模块名:NIModule.bas
'&&函数名:ppp
'&&功能:&&供函数NIATrapzd内部调用的递归过程
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ppp(r As String, x0 As Double, x1 As Double, h As Double, f0 As Double, f1 As Double, t0 As Double, eps As Double, d As Double, t As Double)
& & Dim x As Double, f As Double, t1 As Double, t2 As Double, p As Double, g As Double, eps1 As Double
& &
& & x = x0 + h / 2#
& & f = fx(r, x)
& & t1 = h * (f0 + f) / 4#
& & t2 = h * (f + f1) / 4#
& & p = Abs(t0 - (t1 + t2))
& &
& & If ((p & eps) Or (h / 2# & d)) Then
& && &&&t = t + (t1 + t2)
& & Else
& && &&&g = h / 2#
& && &&&eps1 = eps / 1.4
& && &&&
& && &&&Call ppp(r, x0, x, g, f0, f, t1, eps1, d, t)
& && &&&
& && &&&Call ppp(r, x, x1, g, f, f1, t2, eps1, d, t)
& & End If
End Sub复制代码
阅读权限50
在线时间 小时
& & & & & & & &
由于以上全部代码全部修改自《科学与工程数值计算算法Visual Basic版》
对代码的修改可能会造成侵权,如果这样的发布会有问题,请版主宽大处理
阅读权限50
在线时间 小时
两个曾经陈青老师的宏表函数计算定积分。
09:47 上传
点击文件名下载附件
42.75 KB, 下载次数: 137
09:47 上传
点击文件名下载附件
4.82 KB, 下载次数: 76
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
用定积分的定义或几何意义求下列定积分的值
下载积分:400
内容提示:用定积分的定义或几何意义求下列定积分的值
文档格式:PDF|
浏览次数:1456|
上传日期: 20:50:22|
文档星级:
全文阅读已结束,如果下载本文需要使用
 400 积分
下载此文档
该用户还上传了这些文档
用定积分的定义或几何意义求下列定积分的值
关注微信公众号【图文】定积分概念、求解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
定积分概念、求解
&&高等数学 定积分概念
大小:2.44MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 r语言求定积分 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信