EXCEL VBA求一元二次方程式 (不用公式解)(2)
- 帖子
- 8
- 主題
- 6
- 精華
- 0
- 積分
- 27
- 點名
- 0
- 作業系統
- WIN10
- 軟體版本
- Office 2016
- 閱讀權限
- 10
- 註冊時間
- 2021-10-18
- 最後登錄
- 2021-12-22
|
回復 2# Andy2483
前輩您好 可以稍微簡單說明一下每項代表的意義嗎
這串以下好像是公式 設定這串的用意是什麼 (4 * a * c - b ^ 2) / 4 * a = 0 (如果不能用公式解是否可以不設定此項)
If n = 2 Then
If (4 * a * c - b ^ 2) / 4 * a = 0 Then
MsgBox "唯一解 X= " & (-b) / (2 * a): Exit Sub
ElseIf ((4 * a * c - b ^ 2) / 4 * a > 0 And a > 0) Or ((4 * a * c - b ^ 2) / 4 * a < 0 And a < 0) Then
MsgBox " X 無解!": Exit Sub
請前輩稍微說明一下
888 和999和 S0及S0 =-100*J和S1和 S1 =100*J 是什麼
還有以下的設定說明 想了解詳細
End If
888: S0 = -100 * J: S1 = 100 * J: S = J: P = 1
999
For X = S0 To S1 Step S
Y0 = a * X ^ n + b * X + c
Y1 = (a * (X + S)) ^ n + (b * (X + S)) + c
P = Y0 * Y1
If (S < 10 ^ -13 And J = 1) Or (S > -(10 ^ -13) And J = -1) Then P = 0
If P = 0 Then
If c = 0 And J = 1 Then X1 = X
If c = 0 And J = -1 Then X2 = X
If J = -1 Then: MsgBox "X1= " & X1 & vbLf & vbLf & "X2= " & X2: Exit Sub
J = -1: GoTo 888
ElseIf P < 0 Then
S0 = X: S1 = S0 + S: S = S / 10 '
If J = 1 Then
MsgBox "X1 介於 " & S0 & " ~ " & S1
X1 = S1
Else
MsgBox "X2 介於 " & S0 & " ~ " & S1
X2 = S1
End If
GoTo 999
End If
Next
End Sub
上述程式跑出來
X1=1.2360679774997,X2=-3.2360679774997
答案後面好像還少一項數字
X1=1.23606797749979,X2=-3.23606797749979
程式應該要怎麼改
感謝前輩 |
|
|
|
|
|
|
- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
2#
發表於 2021-10-20 14:20
| 只看該作者
本帖最後由 Andy2483 於 2021-10-20 14:32 編輯
回復 1# 森野
參考
Option Explicit
Sub TEST()
Dim X, Y, a, b, c, n, U1, U2, u, v, S, S0, S1, Y0, Y1, X1, X2, P, J
J = 1: Y = a * X ^ n + b * X + c: a = 1: b = 2: c = -4: n = 2
If n = 2 Then
If (4 * a * c - b ^ 2) / 4 * a = 0 Then
MsgBox "唯一解 X= " & (-b) / (2 * a): Exit Sub
ElseIf ((4 * a * c - b ^ 2) / 4 * a > 0 And a > 0) Or ((4 * a * c - b ^ 2) / 4 * a < 0 And a < 0) Then
MsgBox " X 無解!": Exit Sub
End If
If b = 0 And c < 0 Then X1 = (-c / a) ^ 0.5: X2 = -(-c / a) ^ 0.5
End If
888: S0 = -100 * J: S1 = 100 * J: S = J: P = 1
999
For X = S0 To S1 Step S
Y0 = a * X ^ n + b * X + c
Y1 = (a * (X + S)) ^ n + (b * (X + S)) + c
P = Y0 * Y1
If (S < 10 ^ -13 And J = 1) Or (S > -(10 ^ -13) And J = -1) Then P = 0
If P = 0 Then
If c = 0 And J = 1 Then X1 = X
If c = 0 And J = -1 Then X2 = X
If J = -1 Then: MsgBox "X1= " & X1 & vbLf & vbLf & "X2= " & X2: Exit Sub
J = -1: GoTo 888
ElseIf P < 0 Then
S0 = X: S1 = S0 + S: S = S / 10 '
If J = 1 Then
MsgBox "X1 介於 " & S0 & " ~ " & S1
X1 = S1
Else
MsgBox "X2 介於 " & S0 & " ~ " & S1
X2 = S1
End If
GoTo 999
End If
Next
End Sub
End Sub |
|
|
|
|
|
|