利用单变量求解和VBA进行批量求解 254 4
杨海从2012-05-10 00:45
楼主
十多天前,对水质模型参数K2的率定让笔者甚是头疼,特别是用VB编的程序后进行参数输入过程,输的苦逼啊。前几天专门学了一些文件和驱动的东西,感觉对处理现存问题不够实用,就琢磨着寻求简便的方法,还真被我找到了,很简单,现记下来与大家分享。
一般地,遇到非线性一元方程,我们常用二分法、不动点迭代法、牛顿迭代法等数值方法编程求解。然而,当需要处理大批量,多参数的此类方程时,用编程的方法求解将是十分愚笨的方法。因为仅对数据的输入(键入)或者格式(文件输入)就会让我们烦闷不已。那么EXCEL的单变量求解将是一个十分快捷简便的方法。现叙述方法如下:
问题,有10个方程A*X*X+B*X-30=0,其中A={1,2,3,4……,9,10};B={2,3,4,……10,11}求解个方程的一个根(因为我们经常只需要求一个合适的参数,所以这里不讨论该方程根的分布情况)。
解决方法: 打开EXCEL,在A列输入参数A的值,在B列输入参数B的值,C列作为解X得盛放列,D列作为函数值,其中的函数当然为A*X*X+B*X-30。
各项输入完毕,请打开工具/宏/录制新宏->在填入需要的各项之后点击确定,即可录制新宏了。(不要着急,您并不需要熟悉VBA,仅需要一点点的编程或者英语基础;当然你可以查词典) 录制的宏当然需要解决这个问题了。步骤是打开工具/单变量求解->填入各项 其中目标单元格为D1,目标值0,可变单元格C1;(各项很容易懂) 单击确定,这个时候第一个方程的一个解应该在C1单元格里。 下面进行批量求解。 按alt+F11,打开EXCEL的VBA模块,找到录制的宏,你可以看的一行刚才录制的代码如下: Sub Macro1() ' Macro1 Macro ' 宏由 微软中国 录制,时间: 2012/5/10 ' Range("D1").GoalSeek Goal:=0, ChangingCell:=Range("C1") End Sub 大部分需要处理这类问题的同学都基本能看明白吧(录制宏的目的就是要我们自己弄够明白EXCEL的内部命令是怎么实现的,这种方法在学习和工作中经常用到) 下面要对上面代码进行修改,已处理批量方程。 需要处理的方程有10个,处理代码如上,故而代码如下
Sub Macro1() ' Macro1 Macro ' 宏由 微软中国 录制,时间: 2012/5/10 Dim i As Integer For i = 1 To 10 Range("D" & i).GoalSeek Goal:=0, ChangingCell:=Range("C" & i) Next i End Sub
点击运行,就搞定啦。 |
|