| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:新手入门,求指导!我想编写一个不求解程序!求思路!
只看楼主 加入收藏
nieyoughui
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-3-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
新手入门,求指导!我想编写一个不求解程序!求思路!
我想编写一个VB程序求方程序的根,求大神们指点思路!
求X和Y,精度为0.01,方程如图!
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 指导 
2013-03-09 18:19
nieyoughui
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-3-9
收藏
得分:0 
我想是先定义两个函数!分别是上两的两个式子!
然后用0<x<y<1的条件下循环!试差求解x.y如何?
2013-03-09 18:39
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:5 
。。。。

仰望星空...........不忘初心!
2013-03-09 18:43
nieyoughui
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-3-9
收藏
得分:0 
高手支个声啊!!!
2013-03-10 23:08
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30047
注 册:2008-10-15
收藏
得分:5 
可以用你2楼的方法。效率低一点就是了。

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

如果知道 变化的正负的情况下,也可以使用 无限避近法来循环。

授人于鱼,不如授人于渔
早已停用QQ了
2013-03-11 08:23
nieyoughui
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-3-9
收藏
得分:0 
回复 5楼 风吹过b
图片附件: 游客没有浏览图片的权限,请 登录注册

给我看看这段代码怎样?我是先输入一个y比x 大的数,然后无限逼近,但是有点问题,不正确!
2013-03-11 22:38
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:5 
精度看型態~
太精了再給它format就好了~

不要選我當版主
2013-03-12 00:35
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:5 
你这是解方程组,只是方程组好复杂,想用搞死消元法都不行。
你那方法肯定不对,明明方程是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 编辑 ]
2013-03-12 08:22
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
0.675的来历为:2.7/4=0.675,前面错写成1/4=0.675了。更正。
该程序运行需要时间较长,根据电脑优劣时长不等,我的要大概3分钟。

[ 本帖最后由 lowxiong 于 2013-3-12 08:37 编辑 ]
2013-03-12 08:34
快速回复:新手入门,求指导!我想编写一个不求解程序!求思路!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023806 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved