EXCEL VBA¨D¤@¤¸¤G¦¸¤èµ{¦¡ (¤£¥Î¤½¦¡¸Ñ)(2)
- ©«¤l
- 2025
- ¥DÃD
- 13
- ºëµØ
- 0
- ¿n¤À
- 2053
- ÂI¦W
- 0
- §@·~¨t²Î
- WIN7
- ³nÅ骩¥»
- Office2007
- ¾\ŪÅv
- 100
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ¥x¥_¥«
- µù¥U®É¶¡
- 2011-3-2
- ³Ì«áµn¿ý
- 2024-3-14
     
|
¥»©«³Ì«á¥Ñ ML089 ©ó 2021-10-23 16:43 ½s¿è
'¤@¤¸¤G¦¸¤èµ{¦¡:X2+2X-4=0 ,
'¥Î¤½¦¡¸Ñx=(-b¡Ó¡Ôb^2-4ac)/2aªº¤è¦¡¡A
'¥i¥H¨D¥XX1=1.23606797749979 X2=-3.2360679774997
'°O±o30¦~«eªì¾ÇFortran»y¨¥®É¡A½m²ß¹L ¤û¹yXX¸Ñªk¡A¬ù3~5¨B´N¥i¥H¨D¥Xªñ¦ü¸Ñ¡Aºô¸ô¤W§ä¤@¤U«Ü¦h¡C
'²{¦b¹q¸£pºâ¯à¤O¤Ó±j¤F¡A¥i¥H«Ü¼É¤Oª½±µ¥Ñ -10000 pºâ¨ì 10000¡A¥Hf(x)¡Bf(x+s)¨â¼ÆÈ»~®t¦b¤p¼Æ12¦ì¼Æ®É§@¬°ªñ¦ü¸Ñ¡C
'´`Àô¦¸¼Æ¬ù20000½d³ò+500~800¦¬ÀĨBÆJ´N¥i¥H¨D±o
x1 x2 f(x1)
ªñ¦ü¸Ñ¡G-3.2360679774998 , »~®tÈ4.17443857259059E-14
ªñ¦ü¸Ñ¡G1.23606797749978 , »~®tÈ3.73034936274053E-14
´`Àô¦¸¼Æ¡G20612
pºâ®É¶¡¡G0.156
Function f(x)
f = x ^ 2 + 2 * x - 4
End Function
Sub ¤@¤¸¤èµ{¦¡¼É¤O¸Ñªk_ML089()
Dim r, c1, c2, n, x, x2, s, ss, ct, tm
tm = Timer
'[A:C].Clear
Sheets.Add.Name = Format(Now(), "dd_hhmmss")
x = -10000: x2 = 10000 '¬d¸ß°Ï¶¡
s = 1: ss = 100 'Step ªì©lȤβӤÀ°£¼Æ
r = 3: c1 = 1: c2 = 2 'cells ¦ì¸m
Cells(r, c1).Resize(, 3) = Array("x1", "x2", "f(x1)")
While x <= x2
ct = ct + 1
If Application.Median(f(x), 0, f(x + s)) = 0 Then
r = r + 1
Cells(r, c1).Resize(, 3) = Array(x, x + s, f(x)) 'Debug ¥Î
If Round(f(x), 12) = 0 Then
r = r + 1
Cells(r, c1) = "ªñ¦ü¸Ñ¡G" & x & " , " & f(x)
x = x + s
s = 1
Else
s = s / ss
End If
Else
x = x + s
End If
Wend
Cells(r + 1, c1) = "´`Àô¦¸¼Æ¡G" & ct
Cells(r + 2, c1) = "pºâ®É¶¡¡G" & Format(Timer - tm, "0.000")
End Sub |
|
{...} ªí¥Ü»Ýn¥Î CTRL+SHIFT+ENTER ¤TÁä¿é¤J¤½¦¡
|
|
|
|
|
- ©«¤l
- 2025
- ¥DÃD
- 13
- ºëµØ
- 0
- ¿n¤À
- 2053
- ÂI¦W
- 0
- §@·~¨t²Î
- WIN7
- ³nÅ骩¥»
- Office2007
- ¾\ŪÅv
- 100
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ¥x¥_¥«
- µù¥U®É¶¡
- 2011-3-2
- ³Ì«áµn¿ý
- 2024-3-14
     
|
¥»©«³Ì«á¥Ñ ML089 ©ó 2021-10-23 16:50 ½s¿è
¦b¸É¥R¤@¤U¼Ó¤Wªºµ{¦¡·§©À
¢¯¢°¡@¥Ñ -10000 ¦Ü 10000 STEP s
¢¯¢±¡@¡@·í f(x)¡Bf(x + s)ªºÈ¦b 0 ªº¥ª¥k¤§®É
¢¯¢²¡@¡@¡@Àˬd¤p¼Æ12¦ì¼Æ¥H¤º¬O§_¬° 0¡A
¡@¡@¡@¡@¡@¡@¬O¡G´N¬Oªñ¦ü¸Ñ¤§¤@¡A«·s³] s=1«á¦A«·s¢¯¢±¬d¸ß¤U¤@Óªñ¦ü¸Ñ
¡@¡@¡@¡@¡@¡@§_¡G³] s = s/100¡A¦A«·s¢¯¢±¨BÆJ
x1 x2 f(x1)
-4 -3 4¡@(²Ä¢°¦¸¢¯¦b¢î(-4)»Pf(-3)¤§¶¡¡As=1)
-3.24 -3.23 0.0176¡@(²Ä2¦¸¢¯¦b¢î(-3.24)»Pf(-3.23)¤§¶¡¡As=1/100)
-3.2361 -3.236 0.00014321¡@(²Ä3¦¸¢¯¦b¢î(-3.2361)»Pf(-3.231)¤§¶¡¡As=1/10000)
-3.236068 -3.236067 1.00624E-07
-3.23606798 -3.23606797 1.11813E-08
-3.236067978 -3.236067977 9.56568E-13
-3.236067978 -3.236067977 9.56568E-13
-3.236067977 -3.236067977 4.17444E-14
ªñ¦ü¸Ñ¡G-3.2360679774998 , 4.17443857259059E-14
0.763932023 1.763932023 -1.88854382
1.233932023 1.243932023 -0.009547719
1.236032023 1.236132023 -0.000160794
1.236067023 1.236068023 -4.27089E-06
1.236067973 1.236067983 -2.23588E-08
1.236067977 1.236067978 -4.45365E-10
1.236067977 1.236067978 -2.5846E-12
1.236067977 1.236067977 -3.73035E-14
ªñ¦ü¸Ñ¡G1.23606797749978 , -3.73034936274053E-14
´`Àô¦¸¼Æ¡G20612
pºâ®É¶¡¡G0.168 |
|
{...} ªí¥Ü»Ýn¥Î CTRL+SHIFT+ENTER ¤TÁä¿é¤J¤½¦¡
|
|
|
|
|
- ©«¤l
- 2025
- ¥DÃD
- 13
- ºëµØ
- 0
- ¿n¤À
- 2053
- ÂI¦W
- 0
- §@·~¨t²Î
- WIN7
- ³nÅ骩¥»
- Office2007
- ¾\ŪÅv
- 100
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ¥x¥_¥«
- µù¥U®É¶¡
- 2011-3-2
- ³Ì«áµn¿ý
- 2024-3-14
     
|
¦^´_ 7# Andy2483
¤g¤ì¨tpºâ¾÷µ{¦¡¤~·|±ÐFortran
VBA¤]¬O¦b½×¾Â¬Ý§A¤Î¨ä¥L°ª¤âªºµªÃDºCºC¾Ç²ß¨Óªº¡A·PÁ§Aªº¿ãÅDµªÃD¾Ç²ß¤£¤Ö¡C
«ÂI¬O¦b¬¡¤Æ¦Û¤vªº¸£µ¬ÁקK¦Ñ¦~·ö§b¯g(¤]¤£ª¾¦³¨S¦³®Ä?)
¥±`¤é³£¦^µª¨ç¼Æ¤½¦¡¡A°²¤é¦³ªÅ¤~¯à½m²ß¤@¨ÇVBA¡A²¦³ºVBA¤]¤£¬O¤Ó¼ô¡C |
|
{...} ªí¥Ü»Ýn¥Î CTRL+SHIFT+ENTER ¤TÁä¿é¤J¤½¦¡
|
|
|
|
|
- ©«¤l
- 2025
- ¥DÃD
- 13
- ºëµØ
- 0
- ¿n¤À
- 2053
- ÂI¦W
- 0
- §@·~¨t²Î
- WIN7
- ³nÅ骩¥»
- Office2007
- ¾\ŪÅv
- 100
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ¥x¥_¥«
- µù¥U®É¶¡
- 2011-3-2
- ³Ì«áµn¿ý
- 2024-3-14
     
|
¦^´_ 9# Andy2483
¥ÑUSER¿é¤J¤èµ{¦¡¡A¨ã¦³¹ê¥Î©Ê»ùȼg±o«Ü¦n¡Aµ{¦¡pºâ³t«×«Ü§Ö§óºë·Ç¡AÆg¡C |
|
{...} ªí¥Ü»Ýn¥Î CTRL+SHIFT+ENTER ¤TÁä¿é¤J¤½¦¡
|
|
|
|
|
- ©«¤l
- 2025
- ¥DÃD
- 13
- ºëµØ
- 0
- ¿n¤À
- 2053
- ÂI¦W
- 0
- §@·~¨t²Î
- WIN7
- ³nÅ骩¥»
- Office2007
- ¾\ŪÅv
- 100
- ©Ê§O
- ¨k
- ¨Ó¦Û
- ¥x¥_¥«
- µù¥U®É¶¡
- 2011-3-2
- ³Ì«áµn¿ý
- 2024-3-14
     
|
¥»©«³Ì«á¥Ñ ML089 ©ó 2021-10-26 08:40 ½s¿è
¦^´_ 9# Andy2483
¬P´Á¤é¥hÅSÀç¡A¬P´Á¤@±ß¤W¦^®a¡A¬Ý¨ì§Aªºµ{¦¡¸Ñ¤@¤¸¥|¦¸¡A®M¨ì§Úì¥ýªºµ{¦¡¨S¦³¿ìªk§¹¦¨¸Ñ¥X¡A¤£§¹µ½¦a¤è«Ü¦h¡C
¥»¨ÓÅSÀç¦^¨Ó«Ü²ÖÀ³n¦ºÎªº«o¤SºÎ¤£µÛ¡A«·s×¥¿¤@¤Uì¥ýµ{¦¡¡A²×©ó§¹¦¨¥i¥HºÎı¤F¡C
1 ¤j°Ï¶¡ -10000 ~ 10000 ¬d¸ßn§Ö¡A±N ¬d¸ß Step ¤À¬° ¤j¡B¤¤¡B¤p(¥iÅÜ) ¡Aªì©l s = 100¡A¹J¨ì²Ä¤@¸Ñ«á §ï¬° s = s1 = 0.1¡A·í¸Ñ¦b°Ï¶¡(x ~ x+s)®É¦A²Ó¤À s/ss¡Ass=10³£¥i¥H¡C¥[³t¬d¸ß
¸Ñµª§¹4¦¸¸Ñ´N¥i¥H¸õÂ÷°j°é¡A¥[³t¬d¸ß
³o¦¸Àu¤Æpºâ°j°é¥Ñ 20800¦¸°¦Ü 500¦¸¥ª¥k
2 ¦³ªñ¦ü¸Ñ®É¡A¦A¥Hf( round(x,12) )Àˬd×¥¿¬°¯u¹ê¸Ñ¡C
3 Áٯʤ֧Aªº¤Íµ½¤H¾÷¤¶±¡A³o¬P´Á¦A¨Ó·Q¤@·Q¡C
Function f(x)
'f = x ^ 2 + 2 * x - 4
'f = x ^ 4 - 6 * x ^ 3 + x ^ 2 + 2 * x + 24
f = 2 * x ^ 4 - 4 * x ^ 3 - 3 * x ^ 2 + 7 * x - 2 '¤H¤u¶ñ¤J¤èµ{¦¡
End Function
Sub ¤@¤¸¤èµ{¦¡¼É¤O¸Ñªk_ML089()
Dim r, c1, c2, n, x, x2, s, s1, ss, ct, tm, xNo, xN
tm = Timer
ThisWorkbook.Sheets.Add(After:=Worksheets(1)).Name = Format(Now(), "dd_hhmmss") '
x1 = -10000: x2 = 10000: x = x1 '¬d¸ß°Ï¶¡
s = 100: s1 = 0.1: ss = 10: 'Step ªì©lȨϥÎs,§ä¸Ñ1°Ï¶¡«á¨Ï¥Îs1¡Ass°Ï¶¡²Ó¤À°£¼Æ
xNo = 4: xN = 0 '¤@¤¸´X¦¸ : p¦¸
r = 3: c1 = 1: c2 = 2 'cells ¦ì¸m
'Cells(r, c1).Resize(, 3) = Array("x1", "x2", "f(x1)")
While x <= x2
'DoEvents '·|¼W¥[pºâ®É¶¡
ct = ct + 1 '´`Àô¦¸¼Æ
If Application.Median(f(x), 0, f(x + s)) = 0 Then '¸Ñµª¬O§_¦bx»Px+s¤§¶¡
'r = r + 1: Cells(r, c1).Resize(, 3) = Array(x, x + s, f(x)) 'Debug ¥Î
If Round(f(x), 12) = 0 Then 'ºë«×¤p¼Æ12¦ì¼Æ¬°0®É¬°ªñ¦ü¸Ñ
xN = xN + 1: r = r + 1
ANS = "ªñ¦ü¸Ñ¡GX" & xN & " = "
If f(Round(x, 12)) = 0 Then '¯u¹ê¸Ñ§PÂ_»P×¥¿
x = Round(x, 12)
ANS = "¯u¹ê¸Ñ¡GX" & xN & " = "
End If
Cells(r, c1) = ANS & x & " ,f(x) = " & f(x)
If xN = xNo Then GoTo 999 '¸Ñµª§¹¦¨¸õ¥X°j°é
x = x + s
s = s1
Else
s = s / ss '¥Ø«ex~x+s°Ï¶¡¡As¦A²Ó¤À1/SS¿
End If
Else
x = x + s
End If
Wend
999:
Cells(r + 1, c1) = "¬d¸ß°Ï¶¡¡G" & x1 & " " & x2
Cells(r + 2, c1) = "Step ªì©lȤβӤÀ°£¼Æ¡G" & s1 & " " & ss
Cells(r + 3, c1) = "´`Àô¦¸¼Æ¡G" & ct
Cells(r + 4, c1) = "pºâ®É¶¡¡G" & Format(Timer - tm, "0.000")
End Sub
'¥i¥H§R°£¤é´ú¸Õ¤u§@ªí
Sub Del_Sheet()
Dim MyBook As Workbook, sh As Worksheet
Set MyBook = ThisWorkbook
Application.DisplayAlerts = False '°±¤î¨t²ÎªºÄµ¥Ü
For Each sh In MyBook.Sheets
If sh.Name Like Day(Now()) & "_*" Then sh.Delete '§R°£·í¤é DD_*
Next
Application.DisplayAlerts = True '«ì´_¨t²ÎªºÄµ¥Ü
End Sub |
|
{...} ªí¥Ü»Ýn¥Î CTRL+SHIFT+ENTER ¤TÁä¿é¤J¤½¦¡
|
|
|
|
|