ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3223|回复: 15

[求助] 请教一个有关range操作和求根的问题(已上传测试文件)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-9-27 08:34 | 显示全部楼层 |阅读模式
本帖最后由 书生春秋 于 2011-9-28 12:18 编辑

这个问题很有实际意义,发上来求助各位老师。

关于求根的问题,搜索过版面,有几个帖子讨论过,但是一直没有很好的解决。
希望能有一个函数,可以像matlab里的roots一样,方便求解所有根。
excel里对多项式处理的函数似乎很好,只知道有个多项式拟合的函数。
没用过也不熟悉,加上数学功底差,不能确定是不是可以用来解决求根的问题
但是我觉得VBA一定是有办法解决这个问题的,因此求各位熟悉VBA的高手,不吝赐教,小弟拜谢!

已经实现功能的部分代码

  1. Public leng As Integer
  2. Public data As Variant
  3. Public datas As Variant

  4. Private Sub inputdata_Click() '输入系数 按钮
  5. Dim i As Integer
  6. Dim fc As String
  7. fc = "所求解的方程表达式为:"
  8. Do
  9. doo: datas = InputBox("请按降幂输入特征方程系数,用英文逗号分开", "提示:必须输入正数" _
  10. & "如:1,3,3,2", "1,3,3,2")
  11. data = Split(datas, ",")
  12. leng = UBound(data)
  13. If (StrPtr(datas) = 0) Or leng < 2 Then '????
  14. MsgBox "无效输入统", 0 + 64, "提示"
  15. Exit Sub
  16. Else
  17. If datas <> "" Then Exit Do
  18. End If
  19. Loop
  20. Range(Cells(7, leng + 1), Cells(8, 256)).ClearContents
  21. Cells(7, 1) = "方程系数"
  22. Cells(8, 1) = "方程的根"
  23. For i = 0 To leng
  24. Cells(7, i + 2) = data(i)
  25. If i = 0 Then
  26. fc = fc & Str(data(i)) & "*X^" & Str(leng)
  27. Else
  28. fc = fc & "+" & Str(data(i)) & "*X^" & Str(leng - i)
  29. End If
  30. Next
  31. Cells(10, 1).Clear
  32. Cells(10, 1) = fc
  33. End Sub
  34. Private Sub newin_Click() '在新窗口中显示 按钮
  35. '将区域Range(Cells(6, 1), Cells(7, leng + 2))在新窗口里显示
  36. End Sub
  37. Private Sub roots_Click() '求根 按钮
  38. '解出cells(10,1)单元格的方程,并将所有根写入第8行
  39. End Sub

复制代码
多项式求根.rar (10.55 KB, 下载次数: 20)



TA的精华主题

TA的得分主题

发表于 2011-9-27 09:25 | 显示全部楼层
可用照相机功能试试。
楼主的要求还是不太明确。

TA的精华主题

TA的得分主题

发表于 2011-9-27 09:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主的要求是不是有点电视机的画中画?

TA的精华主题

TA的得分主题

发表于 2011-9-27 10:18 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-27 11:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 书生春秋 于 2011-9-27 11:09 编辑

谢谢各位老师,1楼上传了问题说明

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-27 11:41 | 显示全部楼层
本帖最后由 书生春秋 于 2011-9-27 11:49 编辑
蓝桥玄霜 发表于 2011-9-27 09:25
可用照相机功能试试。
楼主的要求还是不太明确。


上传了说明,见到蓝版主真亲切
上次就是您帮我解决了一个图表显示的问题

还有个问题一并问了:在VBA里怎么求解一元高次方程的解?
比如求问题中定义的函数y=0的所有x的值

TA的精华主题

TA的得分主题

发表于 2011-9-27 13:36 | 显示全部楼层
蓝桥玄霜 发表于 2011-9-27 09:25
可用照相机功能试试。
楼主的要求还是不太明确。

版主能详细说下怎么使用照相机功能吗?

TA的精华主题

TA的得分主题

发表于 2011-9-27 15:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("B5", "B7:F7")) Is Nothing Then Exit Sub
[d5] = [b7] * [b5] ^ 4 + [c7] * [b5] ^ 3 + [d7] * [b5] ^ 2 + [e7] * [b5] + [f7]
End Sub
附件中的问题是求y的值,不是求x。
求解一元高次方程的解,可画出函数的图形,与x轴相交的即是解。

TA的精华主题

TA的得分主题

发表于 2011-9-27 15:59 | 显示全部楼层
Excel 中对函数求解,有一个自动猜数字的Goal Seek方法。

录制代码如下:
Sub Macro1()
    ActiveCell.GoalSeek Goal:=0, ChangingCell:=ActiveCell.Offset(0, -1)
    ActiveCell.Offset(1, 0).Select
End Sub

这样得到的数值,有时可能误差还是很大。

于是,用逐位测试结果比较的方法,可以较为精确地得到模拟解。

Sub gs()
    Set x = ActiveCell
    Set y = ActiveCell.Offset(0, 1)
    x0 = x.Value
    t0 = Abs(y)
    If InStr(x, ".") = 0 Then
        If x > 0 Then s = x & "." Else s = "-" & (-x - 1) & "."
    Else
        s = Left(x, Len(x) - 1) & (Right(x, 1) - 1)
    End If
    t = Abs(y * 2)
    For i = 1 To 8
        k = 0
        For j = 0 To 9
            x.Value = Val(s & j)
            If Abs(y) < t Then
                t = Abs(y)
                k = j
            End If
        Next
        s = Left(x, Len(x) - 1) & k
        If InStr(s, "E") Then GoTo Ext
        x.Value = Val(s)
    Next
Ext:
    If t0 <= Abs(y) Then x.Value = x0
'    ActiveCell.Offset(1, 0).Select
End Sub

目前求解方法是假定y函数在小区间内单向增减,求y为最小值时的x值。




TA的精华主题

TA的得分主题

发表于 2011-9-27 16:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Excel 中对函数求解,有一个自动猜数字的Goal Seek方法。

录制代码如下:
Sub Macro1()
    ActiveCell.GoalSeek Goal:=0, ChangingCell:=ActiveCell.Offset(0, -1)
    ActiveCell.Offset(1, 0).Select
End Sub

这样得到的数值,有时可能误差还是很大。

于是,用逐位测试结果比较的方法,可以较为精确地得到模拟解。

Sub gs()
    Set x = ActiveCell
    Set y = ActiveCell.Offset(0, 1)
    x0 = x.Value
    t0 = Abs(y)
    If InStr(x, ".") = 0 Then
        If x > 0 Then s = x & "." Else s = "-" & (-x - 1) & "."
    Else
        s = Left(x, Len(x) - 1) & (Right(x, 1) - 1)
    End If
    t = Abs(y * 2)
    For i = 1 To 8
        k = 0
        For j = 0 To 9
            x.Value = Val(s & j)
            If Abs(y) < t Then
                t = Abs(y)
                k = j
            End If
        Next
        s = Left(x, Len(x) - 1) & k
        If InStr(s, "E") Then GoTo Ext
        x.Value = Val(s)
    Next
Ext:
    If t0 <= Abs(y) Then x.Value = x0
'    ActiveCell.Offset(1, 0).Select
End Sub

目前求解方法是假定y函数在小区间内单向增减,求y为最小值时的x值。




test.zip

14.85 KB, 下载次数:

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-9 04:42 , Processed in 0.049488 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表