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

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

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

40716 Posts in 6006 Topics- by 5827 Members - Latest Member: wiwitthawin
mPEC Forumบทเรียนการใช้โปรแกรม Mathematica (Moderator: psaipetc)วิธีทำ Simpson Integration สามวิธีใน Mathematica
Pages: 1   Go Down
Print
Author Topic: วิธีทำ Simpson Integration สามวิธีใน Mathematica  (Read 2350 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:  

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

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