我用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 <= ε)
我按提示已经对程序做了修改,但是运行时没有响应,请各位高手再帮忙看看程序还有什么问题。多谢!
vb.net 索引超过数组界限
答案:2 悬赏:70 手机版
解决时间 2021-02-19 22:06
- 提问者网友:鐵馬踏冰河
- 2021-02-19 08:55
最佳答案
- 五星知识达人网友:夜风逐马
- 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) '重新定义
解决方法:使用动态数组。
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) 时就会产生错误。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯