Iterative Methods for Optimization: Matlab Codes

 

Iterative Methods for Optimization: Matlab Codes

จดไว้ใช้ยามยาก

Advertisements

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;

 

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