注册 登录
编程论坛 VB6论坛

新手入门,求指导!我想编写一个不求解程序!求思路!

nieyoughui 发布于 2013-03-09 18:19, 617 次点击
我想编写一个VB程序求方程序的根,求大神们指点思路!
求X和Y,精度为0.01,方程如图!
只有本站会员才能查看附件,请 登录
8 回复
#2
nieyoughui2013-03-09 18:39
我想是先定义两个函数!分别是上两的两个式子!
然后用0<x<y<1的条件下循环!试差求解x.y如何?
#3
Susake2013-03-09 18:43
。。。。
#4
nieyoughui2013-03-10 23:08
高手支个声啊!!!
#5
风吹过b2013-03-11 08:23
可以用你2楼的方法。效率低一点就是了。

记录 记算结果与 X ,Y 相差最小的那一组。 两个变量可以使用 相差绝对值求和来计算。

如果知道 变化的正负的情况下,也可以使用 无限避近法来循环。
#6
nieyoughui2013-03-11 22:38
回复 5楼 风吹过b
只有本站会员才能查看附件,请 登录

给我看看这段代码怎样?我是先输入一个y比x 大的数,然后无限逼近,但是有点问题,不正确!
#7
wube2013-03-12 00:35
精度看型態~
太精了再給它format就好了~
#8
lowxiong2013-03-12 08:22
你这是解方程组,只是方程组好复杂,想用搞死消元法都不行。
你那方法肯定不对,明明方程是x=.....,y=.....,你怎么变成了fx=....、fy=....,凭空少了个x和y。
我的思路是:首先人为对方程组进行变换,将方程1和方程2相乘,可以消去很多项(算是高斯消元法的变种--高斯消项法--别当真),相对简化些。变换两步后结果如图:
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

我程序设计的思路是y从0.0001到0.999循环,确保了y值大于0且小于1,在y循环内嵌套x循环,x循环是从y+0.0001到0.999循环,这就确保了x大于y且小于1。根据该思路的程序代码和运行结果如下:

Private Function getF(x As Single, y As Single) As Double
  '求方程值并返回
  Dim f As Double
  f = 0.675 * ((x - y) ^ 2) * ((3 * x + y) ^ 2) / ((1 - x) * (3 + x) ^ 2)  '变换后的方程式右边,1/4=0.675
  f = f - y + x * y   '方程式的右边减去方程式左边,结果返回,有解的情况下应该为0,我们只能取最接近0的情况
  getF = f
End Function

Private Sub Command1_Click()
  Dim x As Single, y As Single, f As Double, k As Integer
  Me.AutoRedraw = True     '确保输出方程解能显示出来
  k = 0
  For y = 0.0001 To 0.999 Step 0.0001
    For x = y + 0.0001 To 0.999 Step 0.0001
      '这样循环可确保0<y<x<1
      f = getF(x, y)       '计算方程计算结果,越逼近于0越可能是方程解
      If Abs(f) < 0.000000005 Then
        k = k + 1
        Me.Print "x="; x, "y="; y, "计算结果:"; f
        Me.Refresh
      End If
    Next
  Next
  If k > 0 Then
    MsgBox "解方程组完毕,有" & k & "个解"
  Else
    MsgBox "解方程组完毕,无解"
  End If
End Sub
只有本站会员才能查看附件,请 登录


[ 本帖最后由 lowxiong 于 2013-3-12 08:27 编辑 ]
#9
lowxiong2013-03-12 08:34
0.675的来历为:2.7/4=0.675,前面错写成1/4=0.675了。更正。
该程序运行需要时间较长,根据电脑优劣时长不等,我的要大概3分钟。

[ 本帖最后由 lowxiong 于 2013-3-12 08:37 编辑 ]
1