你这是解方程组,只是方程组好复杂,想用搞死消元法都不行。
你那方法肯定不对,明明方程是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 编辑 ]