snasui.com ยินดีต้อนรับ ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
Function f(x)
f = 3 * Exp(-5* x)
End Function สิ่งที่ต้องการคือ ต้องการเปลี่ยน f(x) ได้อ่ะค่ะ จากตัวอย่างข้างบน f = 3 * Exp(-5* x) สมมุติว่าต้องการเปลี่ยนเป็น f=2x+7 เป็นต้นนะค่ะ
Function Trapezium(a, b, n)
h = (b - a) / n
i = 0
i = h * (f(a) + f(b)) / 2
For m = 2 To n
i = i + f(a + h * (m - 1)) * h
Next
Range("A1").Value = i
End Function
ส่วน part เป็นการคำนวณหาพื้นที่ค่ะ
นี้เป็น code VBA ที่ใช้ในการคำนวณหาพื้นที่ใต้กราฟ โดยส่วนที่ 1จะกำหนดสมการที่เราต้องการหาพื้นที่ก่อน(ตรงนี้แหละค่ะที่เป็นปัญหา)ต่อมาส่วนที่2 จะทำการหาพื้นที่ใต้กราฟจาก a ถึง b จากสมการส่วนที่ 1(ส่วนนี้ไม่มีปัญหาค่ะ)
Function f(x) f = 3 * Exp(-5* x)
End Function
part นี้เป็นการกำหนดสมการที่ต้องการหาพื้นที่ใต้กราฟนะคะ สิ่งที่ต้องการคือ การเปลี่ยนสมการ เป็นรูปแบบใด ๆ ก็ได้นะค่ะ เช่น จากตัวอย่างข้างบน f = 3 * Exp(-5* x) สมมุติว่าต้องการเปลี่ยนเป็น f=2x+7 ก้อจะต้องเขียน code ใหม่เป็น
Function f(x)
f = 2*x+7
End Function
พอจะมีวิธีไหนไหมค่ะ ที่ไม่ต้องทำแบบนี้ทุกครั้งที่ต้องการเปลี่ยนสมการนะค่ะ
ส่วน code ข้างล่างนี้(เปลี่ยนวิธีการคิดค่ะ)เป็นการหาพื้นที่ใต้กราฟ จากการใช้ Simpson's rule คล้ายการ integrate นะค่ะ โดย a = ค่าเริ่มต้น b= ค่าสุดท้าย และ n= จาก a ถึง b ต้องการแบ่งเป็นช่องเล็กก ๆ กี่ช่องนะค่ะ
f(a) = นำค่า a ไปแทนในสมการสีเหลืองในส่วนที่1
f(b) = ในทำนองเดียวกันกับด้านบน
Function Simpson(a, b, n)
h = (b - a) / n
i = 0
For m = 1 To n - 2 Step 3
i = i + (f(a + h * (m - 1)) + 3 * f(a + h * m) + 3 * f(a + h * (m + 1)) + f(a + h * (m + 2)))
Next
Simpson = i * h * 3 / 8
End Function
ส่งตัวอย่างมาให้ดูด้วยนะค่ะ
You do not have the required permissions to view the files attached to this post.
Dim myval As Integer
Function f(x)
Select Case myval
Case 1
f = 2 * x + 7
Case 2
f = 3 * Exp(-5 * x)
Case 3
'equation
Case 4
'equation
'Case other
'....
End Select
End Function
Function Simpson(a, b, n)
h = (b - a) / n
i = 0
myval = InputBox("Select variable")
For m = 1 To n - 2 Step 3
i = i + (f(a + h * (m - 1)) + 3 * f(a + h * m) + 3 * f(a + h * (m + 1)) + f(a + h * (m + 2)))
Next
Simpson = i * h * 3 / 8
End Function
ดีใจจังค่ะที่คนควรเริ่มเข้าใจงานที่ต้องการ รบกวนอีกนิดค่ะ
อย่างในกรณี case 1 f = 2 * x + 7 ถ้าเราต้องการเปลี่ยนให้เลข 2 และเลข 7 เป็นเลขที่เราเปลี่ยนเป็นอะไรก็ได้ที่มี form เดียวกัน f=a*x+b
เช่น f = 3*x+5, f = 9*x+1 อะไรประมาณนี้นะค่ะ
ทำได้แล้วค่ะสำหรับการหาพื้้นที่ใต้กราฟ กรณีเป็นสมการเส้นตรงแบบ Simpson's Rule
Sub Test()
Dim one As String
Dim two As String
Dim Result As String
Dim a As String
Dim b As String
Dim n As String
Dim h As String
Result = 0
a = 1
b = 2
n = 100
one = InputBox("Enter the one.")
two = InputBox("Enter the two.")
MsgBox "The equation is " & one & "*x+" & two & ".", vbInformation
'Result = one * (1 + 0.1 * (1 - 1)) + two
h = (b - a) / n
i = 0
For m = 1 To n - 2 Step 3
i = i + ((one * (a + h * (m - 1)) + two) + 3 * (one * (a + h * m) + two) + 3 * (one * (a + h * (m + 1)) + two) + (one * (a + h * (m + 2))) + two)
Next m
Result = i * h * 3 / 8
MsgBox " Result " & Result & ".", vbInformation
End Sub
เพิ่งคิดออกเลยรีบตอบก่อน ถ้าคุณคนควนมีวิธีที่ดีกว่านี้ก็ยินดีนะค่ะ
ทำได้แล้วค่ะ แต่มีข้อเสียคือ พอ enter แล้วมันจะคำนวณทันที (ประมาณว่าเลือกได้แค่ start ยังไม่ทันเลือก end and interval ก็คำนวณไปแล้ว๗
ขอบคุณคนควนอีกครั้งค่ะ ถ้าคุณคนควนมีวิธีที่ดีกว่าก็ยินดีนะค่ะ
You do not have the required permissions to view the files attached to this post.