ขอต้อนรับ ผู้มาเยือน กรุณา ล็อกอิน หรือ สมัครสมาชิก

ล็อกอินด้วยชื่อผู้ใช้ รหัสผ่่าน และระยะเวลาใช้งาน

มีน้ำใจ ไม่อวดตัว มั่วไม่ทำ
 
Advanced search

40727 Posts in 6010 Topics- by 5868 Members - Latest Member: PeakPawit
mPEC Forumบทเรียนการใช้โปรแกรม Mathematica (Moderator: psaipetc)วิธีทำ Simpson Integration สามวิธีใน Mathematica
Pages: 1   Go Down
Print
Author Topic: วิธีทำ Simpson Integration สามวิธีใน Mathematica  (Read 2402 times)
0 Members and 1 Guest are viewing this topic.
psaipetc
Moderator
SuperHelper
*****
Offline Offline

Posts: 653


kostuff.blogspot.com


WWW
« on: February 11, 2008, 01:56:24 PM »

เขียนแบบ procedural ทั้ง หมด:

simpsonInt1[f_, a_, b_, n_] := Module[{sum, delta},
  delta = (b - a)/n;
  sum = 0;
  For[i = 1, i <= n, i += 2,
   sum += f[a + (i - 1) delta] + 4 f[a + i delta] +  f[a + (i + 1) delta]
   ];
  sum delta/3
  ]

เขียนแบบ procedural ผสม functional:
simpsonInt2[f_, a_, b_, n_] := Module[{delta, list},
  delta = (b - a)/n;
  list = Table[f[a + i delta], {i, 0, n}];
  delta/3 Apply[Plus, Partition[list, 3, 2].{1, 4, 1}]
  ]

เขียนแบบ functional หมด:
simpsonInt3[f_, a_, b_, n_] := (b - a)/(3 n) Apply[Plus, Partition[table[f[a + i (b - a)/n], {i, 0, n}], 3, 2].{1, 4, 1}]

ผลที่ได้ เหมือนกัน
Table[{2^k, simpsonInt1[Sin, 0., Pi/2, 2^k], simpsonInt2[Sin, 0., Pi/2, 2^k], simpsonInt3[Sin, 0., Pi/2, 2^k]}, {k, 1, 10}] // TableForm

2   1.00228   1.00228   1.00228
4   1.00013   1.00013   1.00013
8   1.00001   1.00001   1.00001
16   1.   1.   1.
32   1.   1.   1.
64   1.   1.   1.
128   1.   1.   1.
256   1.   1.   1.
512   1.   1.   1.
1024   1.   1.   1.

« Last Edit: June 25, 2008, 10:39:20 PM by psaipetc » Logged

Life Lessons (related to science anyway):
http://www.guardian.co.uk/print/0,3858,5164417-111414,00.html
Pages: 1   Go Up
Print
Jump to:  

คุณสมบัติของเด็กดี

ไม่ฟังเวลามีการนินทากัน ไม่มองหาข้อด้อยของผู้อื่น ไม่พูดนินทาเหยีบบย่ำผู้อื่น