永发信息网

vb.net 索引超过数组界限

答案:2  悬赏:70  手机版
解决时间 2021-02-19 22:06
  • 提问者网友:鐵馬踏冰河
  • 2021-02-19 08:55
我用vb.net编了一段程序,用步长加速法求min (1-x)*(1-x),但运行时老出现索引超过数组界限,因为是初学,也不知是哪里出现错误,请各位高手帮忙改改,多谢!
源代码如下:
Dim K, ac As Integer 'K:迭代次数 h:步长 ac:加速步长因子
Dim x, Y, Z, h As Double
Dim F0, F1, F2, F3, F4, F(x) As Double
Dim ε As Double '迭代精度

ε = Val(TextBox1.Text)
x = Val(TextBox2.Text)

ac = 1 : h = 0.5 : K = 1

F(x) = (1 - x) * (1 - x)

Do '步长加速循环

Y = x

F0 = F(x)
F1 = F(Y)
Do
'正步长试探:+ h

Y = Y + h
F2 = F(Y)
If F2 < F1 Then '正步长试探成功

Y = Y + h

Else '正步长试探失败 (探测移动)

'负步长试探:- h
Y = Y - 2 * h
F3 = F(Y)

If F3 < F1 Then

Y = Y - 2 * h

Else
Y = Y
End If
End If
F4 = F(Y)

'判断试探是否成功

ac = 1 'ac:加速因子

If F4 < F0 Then '试探成功
Z = Y

Y = Z + ac * (Z - x) '(模式移动)

x = Z
End If
'判断加速是否成功

If F(x) < F0 Then '加速成功
F0 = F(x)
End If

Loop Until (F4 >= F0)

If F4 > F0 Then '试探失败
h = h / 2

K = K + 1
End If

Loop Until (h <= ε)

我按提示已经对程序做了修改,但是运行时没有响应,请各位高手再帮忙看看程序还有什么问题。多谢!
最佳答案
  • 五星知识达人网友:夜风逐马
  • 2021-02-19 09:32
F(X)数据定义有问题。X此时为0。

解决方法:使用动态数组。
Dim F0, F1, F2, F3, F4, F() As Double 'F为动态数组
x = Val(TextBox2.Text)
REDIM F(x) '重新定义
全部回答
  • 1楼网友:孤独入客枕
  • 2021-02-19 10:11
你在 max 函数中的这句 if varray(i) > min() then 错了,应该是 > max then 你写成 min() 就会误调用 min() 函数,但是没有参数,结果执行 min() 中的 min = varray(0) 时就会产生错误。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯