Guest User

Untitled

a guest
Jun 28th, 2026
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. Function SolvePolyR(ParamArray CoeffA() As Variant) As Variant
  2.  
  3. 'SolvePolyR - works as SolvePoly to find the roots of any polynomial but returns only real roots
  4.  
  5. Dim i As Long, j As Long
  6. Dim PArray As Variant, PArray2 As Variant
  7. Dim Num_Coeff As Long
  8. Dim vtype As Long
  9. Dim n_1 As Long, n_2 As Long
  10. Dim Res As Variant
  11. Dim Numreal As Long
  12. Dim RRes As Variant
  13.  
  14. vtype = VarType(CoeffA(0))
  15. If vtype = 8204 Then
  16. PArray = CoeffA(0).Value2
  17. If UBound(PArray) = 1 Then PArray = Transpose1(PArray)
  18. Num_Coeff = UBound(PArray)
  19. n_2 = UBound(CoeffA)
  20. If n_2 > 0 Then
  21. n_1 = Num_Coeff
  22. Num_Coeff = n_1 + n_2
  23. ReDim PArray2(1 To Num_Coeff, 1 To 1)
  24. For i = 1 To n_1
  25. PArray2(i, 1) = PArray(i, 1)
  26. Next i
  27. j = n_1 + 1
  28. For i = 1 To n_2
  29. If IsNumeric(CoeffA(i)) Then
  30. PArray2(j, 1) = CoeffA(i)
  31. Else
  32. PArray2(j, 1) = CoeffA(i).Value2
  33. End If
  34. j = j + 1
  35. Next i
  36. PArray = PArray2
  37. End If
  38. Else
  39. Num_Coeff = UBound(CoeffA) + 1
  40. ReDim PArray(1 To Num_Coeff, 1 To 1)
  41. For i = 0 To Num_Coeff - 1
  42. If IsNumeric(CoeffA(i)) Then
  43. PArray(i + 1, 1) = CoeffA(i)
  44. Else
  45. PArray(i + 1, 1) = CoeffA(i).Value2
  46. End If
  47. Next i
  48. End If
  49.  
  50. Select Case Num_Coeff
  51. Case Is < 3
  52. SolvePolyR = "Num_Coeff must be >= 3"
  53. Exit Function
  54. Case Is < 4
  55. Res = Quadratic(PArray)
  56. Case 4
  57. Res = CubicC(PArray)
  58. Case 5
  59. Res = Quartic(PArray)
  60. Case Else
  61. Res = RPolyJT(PArray)
  62. End Select
  63. Numreal = Res(Num_Coeff, 1)
  64.  
  65. If Numreal = 0 Then
  66. SolvePolyR = "No real roots"
  67. Exit Function
  68. End If
  69.  
  70. ReDim RRes(1 To 1, 1 To Numreal)
  71.  
  72. For i = 1 To Numreal
  73. RRes(1, i) = Res(i, 1)
  74. Next i
  75.  
  76. SolvePolyR = RRes
  77. End Function
Advertisement
Add Comment
Please, Sign In to add comment