VBA代码校正

VBA代码校正,vba,Vba,我第一次使用VBA。我从使用Runga-Kutta方法的一个非常基本的代码开始。我不能运行它。我能知道我哪里出了问题吗?你也能为这种类型的微分方程解算器发布一些解决方案吗 Option Explicit Dim K1 As Double Dim K2 As Double Dim K3 As Double Dim K4 As Double Dim y As Double Dim x As Double Dim dx As Double Dim x0 As Integer Dim y0 As I

我第一次使用VBA。我从使用Runga-Kutta方法的一个非常基本的代码开始。我不能运行它。我能知道我哪里出了问题吗?你也能为这种类型的微分方程解算器发布一些解决方案吗

Option Explicit

Dim K1 As Double
Dim K2 As Double
Dim K3 As Double
Dim K4 As Double

Dim y As Double
Dim x As Double
Dim dx As Double
Dim x0 As Integer
Dim y0 As Integer



Function f(x, y) As Double
   f = 0.5 * x - 0.5 * y
    End Function


Sub RK(x, y, dx)

Dim i As Integer
Dim ynew As Double
dx = 0.5
x0 = 0
y0 = 1
K1 = dx * f(x, y)
K2 = dx * f(x + dx / 2, y + K1 / 2)
K3 = dx * f(x + dx / 2, y + K2 / 2)
K4 = dx * f(x + dx, y + K3)
 RK = y + ((K1 + 2 * (K2 + K3 + K4)) / 6)


For i = 0 To 6
ynew = RK(x, y, dx)
x = x + dx
y = ynew
Next i

For j = 1 To 6
Call RK(x, y, dx, ynew)
ActiveCell.Offset(i - 1, 1).Value = x
ActiveCell.Offset(i - 1, 2).Value = y
x = x + dx
y = ynew
Next

End Sub

您需要执行
RK
过程,并为其提供x、y和dx的起始值。
要从VBE(Visual Basic编辑器)中执行此操作,请打开即时窗口。如果不可见,请按Ctrl+G,它应显示在VBE的底部

在即时窗口中键入类似于
RK1、3、2
的内容,结果将显示在活动单元格右侧的两列中,占6行

如果希望在按下按钮或更新值时执行该过程,则需要为此添加额外的代码位

编辑:
刚刚注意到这些行-
RK=y+((K1+2*(K2+K3+K4))/6)
ynew=RK(x,y,dx)

RK
过程不会返回值,您也不能将其设置为值。

此链接可能有助于解释此问题:

代码有什么问题?