Numerical Differentiation with MATLAB


ช่วงนี้กำลังกลุ้มใจมาก เพราะต้องหา Jacobian ของ Spline ปัญหาคือมันไม่สามารถหาเชิง
วิเคราะห์ได้ จำเป็นต้องหาเชิงเลขบน MATLAB เพราะต้องการหาจุดตรึงของ Spline ที่เหมาะ
สมที่สุด

ทางเลือกหนึ่งคือใช้ฟังก์ชัน fndir ซึ่งมากับ Spline Toolbox อันนี้ไม่ค่อยอยากใช้นักเพราะว่า
เครื่องที่บ้านไม่มี Toolbox อันนี้ (เวอร์ชันนักเรียน) ต้องไปใช้ที่ห้องทำงาน อีกทางเลือกหนึ่ง
ดูเป็นเรื่องทั่วไปกว่า โดยการใช้ Automatic Numerical Differentiation ของคุณ John
 D’Errico ซึ่งยังไม่รู้ว่าดีแค่ไหน

ตัวผมเองไม่ได้สนใจศึกษาเรื่อง Numerical Computing เลย จนหลัง ๆ อ่านมากชักจะชอบ
ไปเจอบทเรียน Numerical Methods in Mechanics ของ Lund University ก็ขอจดไว้
หน่อย รหัสต้นข้างล่างนี้ลอกมาแปะไว้เลย ตัวฟังก์ชันชื่อ jacobian ก็ควรจะเปลี่ยนนะครับเพราะ
ไปซ้ำกับ jacobian แบบ symbolic ของ MATLAB เค้า

function [J]=jacobian(func,x)
% computes the Jacobian of a function
n=length(x);
fx=feval(func,x);                                         %บรรทัดนี้คือการคำนวณค่าฟังก์ชันที่ x
eps=1.e-8; % could be made better
xperturb=x;
for i=1:n
   xperturb(i)=xperturb(i)+eps;
   J(:,i)=(feval(func,xperturb)-fx)/eps;     %อันนี้คือการหาค่าอนุพันธ์
   xperturb(i)=x(i);
end;

 

น่าสนุกดีเหมือนกัน

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s