Page 1 of 1

รับค่าสมการ

Posted: Thu Mar 24, 2011 9:13 am
by talk2benz
สวัสดีคุณคนควนค่ะ
มีเรื่องอยากสอบถามค่ะ คือว่า อยากจะรับสมการเพื่อไปคำนวณหาพื้นที่ใต้กราฟค่ะ เช่น สมการ f(x)=ax+b หาพื้นที่ใต้กราฟระหว่าง 0 ถึง 10 หรือ สมการ f(x)=a*e^(-bx) แล้วหาพื้นที่ใต้กราฟอ่ะคะ หาวิธีคำนวณพื้นที่ใต้กราฟได้แล้วอะคะ แต่หาวิธีรับสมการไม่ได้ค่ะ รบกวนด้วยนะคะ

Re: รับค่าสมการ

Posted: Thu Mar 24, 2011 5:31 pm
by snasui
ช่วยส่งตัวอย่างมาให้ดูด้วยครับ ระบุปัญหาและตัวอย่างคำตอบที่ถูกต้องมาด้วย เพื่อจะหาวิธีคำนวณเปรียบเทียบครับ

Re: รับค่าสมการ

Posted: Fri Mar 25, 2011 9:17 am
by talk2benz
นี้เป็น code ตัวอย่างที่ใช้ในการคำนวณหาพื้นที่

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 เป็นการคำนวณหาพื้นที่ค่ะ

Re: รับค่าสมการ

Posted: Fri Mar 25, 2011 12:04 pm
by snasui
ผมอ่านแล้วไม่เข้าใจ คงต้องรอท่านอื่นครับ

รับค่าสมการ

Posted: Fri Mar 25, 2011 1:11 pm
by Nakorn
น้องครับ..
ผมขอถามหน่อยครับ ว่า
โจทย์พวกนี้มีที่มาที่ไปอย่างไร?
ตัวแปรต่างๆคืออะไร?
ผมไม่แน่ใจว่า น้องเอามาจาก VBA, List, Ect.

Re: รับค่าสมการ

Posted: Fri Mar 25, 2011 3:05 pm
by talk2benz
ขอโทษคุณคนควนด้วยนะค่ะที่ดิฉันอธิบายไม่ละเอียดนะค่ะ

นี้เป็น 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

ส่งตัวอย่างมาให้ดูด้วยนะค่ะ

Re: รับค่าสมการ

Posted: Fri Mar 25, 2011 3:42 pm
by snasui
ไม่ทราบว่าตรงตามที่ต้องการหรือเปล่านะครับ ผมเพิ่มให้สามารถเลือกได้ว่าเราจะใช้สมการไหน โดยผู้ใช้เป็นผู้เลือก ลองดู Code ด้านล่างครับ

Code: Select all

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

Re: รับค่าสมการ

Posted: Fri Mar 25, 2011 8:45 pm
by talk2benz
ดีใจจังค่ะที่คนควรเริ่มเข้าใจงานที่ต้องการ รบกวนอีกนิดค่ะ
อย่างในกรณี 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
เพิ่งคิดออกเลยรีบตอบก่อน ถ้าคุณคนควนมีวิธีที่ดีกว่านี้ก็ยินดีนะค่ะ

Re: รับค่าสมการ

Posted: Fri Mar 25, 2011 9:13 pm
by talk2benz
ทำได้แล้วค่ะ แต่มีข้อเสียคือ พอ enter แล้วมันจะคำนวณทันที (ประมาณว่าเลือกได้แค่ start ยังไม่ทันเลือก end and interval ก็คำนวณไปแล้ว๗
ขอบคุณคนควนอีกครั้งค่ะ ถ้าคุณคนควนมีวิธีที่ดีกว่าก็ยินดีนะค่ะ

Re: รับค่าสมการ

Posted: Mon Mar 28, 2011 8:30 am
by talk2benz
รบกวนท่านใดได้โหลดไป ช่วยส่งผลลัพธ์ด้วยนะคะ อยากรู้ว่ามีปัญหาอะไรตรงไหนหรือเปล่านะคะ