300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > EXCEL (VBA) 自定义函数 迭代计算 悬链线索长

EXCEL (VBA) 自定义函数 迭代计算 悬链线索长

时间:2020-11-16 16:01:10

相关推荐

EXCEL (VBA) 自定义函数 迭代计算 悬链线索长

文章目录

前言一、工程背景二、功能实现其他

前言

众所周知Excel是一款非常强大的实用的办公软件,其内嵌的数量巨大的函数库基本能够满足我们日常工作需求。但由于需求的多样性,仍有一些功能无法满足,如需要进行迭代计算的函数功能等,这就需要自己定义特殊的函数以供特殊需求用啦。本贴以迭代求解悬链线索长为例,给出在VBA中自定义函数的方法,以飨读者。

一、工程背景

悬链线是自然界中最常见的一类线形,如晾衣绳、轮船系泊链、斜拉桥拉索等,关于其介绍请读者参考其他相关读物。悬链线微分方程(已知索力T求索长S)的求解思路如下:

显然,方程式(6)为隐函数方程,通常没有解析解,因此需要构造迭代方程,进行迭代求解,思路如下:

选定迭代初值:取水平索力的迭代初值为H0=T*cos(atan(h/l));根据公式(4)计算中间参数C1;根据公式(5)计算A点斜率KA;根据公式(6)迭代计算索力水平分力H1比较迭代前后H0与H1的差值,如果满足误差精度要求,则结束迭代,否则令H0=H1,返回到步骤2索力水平分力为H1根据公式(7)和(9)计算索长与无应力索长。

二、功能实现

点击开发工具>Visual Basic,插入“模块”,添加代码

直接上代码了

Function HForceCal(TAR As Range, qR As Range, lR As Range, hR As Range)'获取形参的值Dim TA As Double, q As Double, l As Double, h As DoubleTA = TAR.Valueq = qR.Valuel = lR.Valueh = hR.Value'定义其他变量Dim H0 As Double, Htemp As Double, Hend As Double, zjbl As Double, C1 AS Double, KA AS Double, WuCha as doubleH0 = TA * Cos(Application.WorksheetFunction.Atan2(l, h))Htemp=H0'迭代计算DO zjbl = q*l/2/HtempC1 = Application.WorksheetFunction.Asinh(q * h / (2 * Htemp * Application.WorksheetFunction.Sinh(zjbl))) - zjbl '中间参数C1KA = Application.WorksheetFunction.SINH(C1)Hend = TA/(1+KA^2)^0.5WuCha = Abs(Hend-Htemp)Htemp = Hendloop while wucha>0.1'赋值HForceCal = HendEnd Function

然后你就可以愉快地使用自定义的函数了。

调用方法同Excel内置函数类似,=HForceCal(TA,q,l,h)

其他

由于定义的函数形参规定了数据类别,因此形参必须是选的单元格,不接受数字或文字。当然你也可以自己改改。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。