永发信息网

VB高手进~~~给程序帮忙看看哪里错了~~

答案:4  悬赏:50  手机版
解决时间 2021-07-31 16:06

Option Base 1
Private h As Single, th As Single, t0 As Single, t As Single, t1 As Single, y0 As Single, y As Single, y1 As Single, yh As Single, yh1 As Single, a As Single, b As Single, e As Single, z As Single, k As Single, k1 As Single, k2 As Single, k3 As Single, k4 As Single
Private i As Integer, m As Integer, n As Integer

Private Function fun(t, y)
fun = -0.011 * y + 0.00236
End Function

Private Sub fx(t, y, k)
k = fun(t, y)
End Sub

Private Sub rk(t0, y0, y1)
t1 = t0
y1 = y0
Call fx(t0, y0, k)
k1 = k
t0 = t1 + h / 2
y0 = y1 + h * k1 / 2
Call fx(t0, y0, k)
k2 = k
y0 = y1 + h * k2 / 2
Call fx(t0, y0, k)
k3 = k
t0 = t1 + h
y0 = y1 + h * k3
Call fx(t0, y0, k)
k4 = k
y1 = y1 + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6
t0 = t1 + h
End Sub

Private Sub command1_click()
a = InputBox("请输入所要计算的求解区间的下限:a=")
b = InputBox("请输入所要计算的求解区间的上限:b=", b = 1)
t0 = InputBox("请输入所求常微分方程的初始条件:t0=")
y0 = InputBox("请输入所求长微分方程的初始条件:y0=")
e = InputBox("请输入所要求的误差限:e=")
h = InputBox("请输入所要求的预设的步长")
th = 1: m = 1: n = 0 '在此:a=t0=0,b=th=1
Picture1.Print
Picture1.Print
Picture1.Print "用四阶R-K方法所得 解";
Picture1.Print Tab(1); "时间";
Picture1.Print Tab(28); "步长";
Picture1.Print Tab(50); "精确解";
Picture1.Print Tab(68); "R-K 法高误差阶的解";
Picture1.Print Tab(90); "R-K 方法所得解";
Picture1.Print
Picture1.Print
Picture1.Print

Do Until t >= th
t = t0
y = y0
Do
t0 = t
y0 = y
Call rk(t0, y0, y1)
yh = y1
h = h / 2
t0 = t
y0 = y
For i = 1 To 2
Call rk(t0, y0, y1)
y0 = y1
Next i
b = Abs((yh - y1) / (2 ^ 4 - 1))
Loop Until b < e
yh1 = (2 ^ 4 * y1 - yh) / (2 ^ 4 - 1)
Do
t0 = t
y0 = y
Call rk(t0, y0, y1)
yh = y1
h = h * 2
t0 = t
y0 = y
For i = 1 To 2
Call rk(t0, y0, y1)
y0 = y1
Next i
b = Abs((yh - y1) / (2 ^ 4 - 1))
Loop Until b >= e
h = h / 2
t0 = t
y0 = y
Call rk(t0, y0, y1)
y0 = y1
z = Sqr(1 + 2 * t0)
'If t >= m * (1 - 0) / 10 - 0.001 And t <= m * (1 - 0) / 10 + 0.001 Then
Picture1.Print Tab(1); "t="; t;
Picture1.Print Tab(28); "h="; h;
Picture1.Print Tab(45); "y(i)="; z;
Picture1.Print Tab(68); "y="; yh1;
Picture1.Print Tab(90); "yi="; y0


m = m + 1
' End If
n = n + 1
h = h * 2
Loop
Picture1.Print "N="; n
Picture1.Print Tab(1); "t="; t;
Picture1.Print Tab(28); "h="; h;
Picture1.Print Tab(45); "y(i)="; z;
Picture1.Print Tab(68); "y="; yh1;
Picture1.Print Tab(90); "yi="; y0
End Sub

结果应该有很多行,为什么就只有几行~~

最佳答案

程序在哪里啊?

全部回答

我刚刚给你测试了,花了半天功夫把问题给你找到了,问题主要是出现在你的函数定义上

Private Function fun(t, y) Private Sub fx(t, y, k) Private Sub rk(t0, y0, y1) 这3个函数你定义的时候都没有指定它们的变量类型,从而再调用函数的时候没有把值传给相应的变量,比如拿第一个来说:

Private Function fun(t, y) fun = -0.011 * y + 0.00236 End Function

你定义完这个函数后,本想在下一个函数中调用,将值传给k

Private Sub fx(t, y, k) k = fun(t, y) End Sub

但在这个函数中实际上值并没有传给k,k的值还是0.

解决方法:把你的函数中的参数加上类型值,比如byval t as single,这样之类的,还有需要返回值的比如

这个函数中的k,要用byref k as 某种类型的方式来定义。如有问题可以继续讨论

结果与你程序没错吧!!?是不是达不到你要的结果。好好看看循环的条件。

头大了 看不懂

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
吃了益母草会把体内的脏东西排出来吗?
用英语介绍公司名字的由来!
求《长恨歌》全文,谢谢!
西安区牡丹江方圆欢乐购(朗诗德店)怎么去啊,
mp3比较新款比较便宜的多少钱啊
跑步可以增加打仗的能力吗?
索爱W580i这款手机怎样?
用“晓”“君”两个字组成一个成语,可以用谐
数学分析该怎么学啊?
荷塘区株洲湖南铁路科技职业技术学院(芙蓉路)
QQ邮箱可以成功发送邮件,但对方无法打开是怎
阿迪达斯如何辨别真假,如何辨别真假牛肉
求深圳移动的网址?
当看到别人和你拥有同一件衣服,你心里怎么想
如果我让你把一批梳子卖给和尚,你要怎么做?
推荐资讯
市场上男装哪个品牌最受欢迎?
亲爱的,你要坚强奥.我永远爱你.英文、翻译.三
你好,我的农场好友列表为什么打不开?从昨晚
川汇区周口晴天客栈(六一路)我想知道这个在什
教我一些抢篮板的技巧。
你和女朋友分手了,你会心痛吗?
青山区武汉精益眼镜(印象城店)这个地址怎么能
问问为什么 还可以减积分的
求三年级周长应用题
昨晚我梦见跟我的前男友离婚了,而且在梦里很
你举不起的东西是什么
求几部搞笑的电影、
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?