Numerical Analysis Week 2-7

สรุป Numerical Analysis แบบเริ่มจากศูนย์

คู่มืออ่านเข้าใจต่อเนื่องจาก Week 2-7: พื้นฐานการวิเคราะห์เชิงตัวเลข, error, การหารากสมการไม่เชิงเส้น, interpolation, cubic spline และ numerical integration พร้อมสูตร ขั้นตอน และตัวอย่างหลักที่ควรรู้

อ่านก่อนสอบ มีสูตรสำคัญ มีขั้นตอนทำโจทย์ ตรวจครบทุกไฟล์
5ไฟล์ PDF
189หน้าที่ตรวจ
6บทใหญ่

ภาพรวมวิชา

Numerical Analysis คือการใช้วิธีคำนวณแบบประมาณเพื่อแก้ปัญหาคณิตศาสตร์และวิศวกรรมที่แก้แบบ exact ได้ยาก เช่น สมการไม่เชิงเส้น ระบบสมการเชิงเส้น การประมาณค่าจากข้อมูลจริง การหาพื้นที่ใต้กราฟ และการจำลองระบบที่ซับซ้อน จุดสำคัญคือคำตอบอาจไม่ใช่ค่าจริง 100% แต่ต้องควบคุมความคลาดเคลื่อนให้ยอมรับได้

ประเภทปัญหาใน Numerical Analysis

RootRoot finding

หา \(x\) ที่ทำให้ \(f(x)=0\) เช่น จุดสมดุล จุดตัดแกน หรือคำตอบของโมเดล

DataInterpolation

ประมาณค่าที่อยู่ระหว่างจุดข้อมูลที่รู้ เช่น อุณหภูมิ เวลา ระดับน้ำ หรือค่าจาก sensor

AreaNumerical integration

ประมาณ \(\int_a^b f(x)\,dx\) เมื่อ integral exact ยาก หรือรู้แค่ค่าเป็นตาราง

CurveCurve fitting / regression

สร้างความสัมพันธ์จากข้อมูลเพื่อพยากรณ์แนวโน้มและลดผลกระทบจาก noise

RateNumerical differentiation

ประมาณ derivative เมื่อไม่มีสูตรจริง หรือข้อมูลมีเฉพาะจุดทดลอง

ModelDifferential equations

แก้สมการที่อธิบายระบบจริง เช่น การเคลื่อนที่ ความร้อน การไหล และวงจร

Week 2: Error และพื้นฐานที่ต้องรู้

ในการคำนวณเชิงตัวเลข error เกิดได้เสมอ เพราะข้อมูลจริงอาจไม่แม่น เครื่องคอมพิวเตอร์เก็บทศนิยมได้จำกัด และวิธีคำนวณมักตัดกระบวนการอนันต์ให้เป็นขั้นตอนจำกัด เราจึงต้องรู้ว่า error มาจากไหนและวัดอย่างไร

ชนิดของ Error

ชนิดความหมายตัวอย่างที่พบบ่อย
Inherent error / Data error ความคลาดเคลื่อนที่ติดมากับข้อมูลหรือโมเดลตั้งแต่ก่อนคำนวณ เครื่องมือวัดไม่ละเอียด, สมมติฐานวิศวกรรมง่ายกว่าความจริง, ข้อมูลทดลองมี noise
Round-off error เกิดจากคอมพิวเตอร์เก็บเลขจริงได้จำกัด จึงต้องปัดเศษหรือตัดเศษ ใช้ \(3.1416\) แทน \(\pi\), การลบเลขใกล้กันมาก ๆ ทำให้สูญเสีย significant digits
Truncation error เกิดจากแทนกระบวนการ exact/อนันต์ด้วยวิธีประมาณแบบจำกัด ใช้ Taylor polynomial แค่ไม่กี่พจน์, แทนพื้นที่ใต้กราฟด้วยรูปสี่เหลี่ยม/สี่เหลี่ยมคางหมู

สูตรวัด Error

Absolute Error

บอกว่าค่าประมาณห่างจากค่าจริงเท่าไร

\[ E_a = |x_{\text{true}} - x_{\text{approx}}| \]

Relative Error

บอกว่า error ใหญ่เมื่อเทียบกับค่าจริงหรือไม่ ใช้เปรียบเทียบปัญหาคนละขนาดได้ดี

\[ E_r = \frac{|x_{\text{true}} - x_{\text{approx}}|}{|x_{\text{true}}|} \]

ถ้าต้องการเปอร์เซ็นต์ ให้คูณ \(100\%\)

แนวคิดสำคัญ: ค่า absolute error เท่ากันไม่ได้แปลว่าแม่นเท่ากัน เช่น ผิด 1 หน่วยจาก 1,000 ถือว่าน้อย แต่ผิด 1 หน่วยจาก 2 ถือว่าเยอะมาก จึงต้องดู relative error ด้วย

Week 3 และ Week 5: การแก้สมการไม่เชิงเส้น

เป้าหมายคือหา \(x\) ที่ทำให้ \(f(x)=0\) หรือเรียกว่า root/zero ของฟังก์ชัน วิธีที่เรียนมีหลายแบบ ต่างกันที่ความเร็ว เงื่อนไขเริ่มต้น และความเสี่ยงที่จะไม่ลู่เข้า

เปรียบเทียบวิธีหา Root

วิธีต้องใช้อะไรจุดเด่นจุดอ่อน
Bisection ช่วง \([a,b]\) ที่ \(f(a)f(b)<0\) มั่นคงและรับประกัน convergence ถ้าเงื่อนไขครบ ช้ากว่าวิธีอื่น
Newton-Raphson ค่าเริ่ม \(x_0\) และ derivative \(f'(x)\) เร็วมากเมื่อเดาใกล้ root อาจพังถ้า \(f'(x)\approx0\) หรือเดาเริ่มไม่ดี
Secant ค่าเริ่มสองค่า \(x_0,x_1\) ไม่ต้องหา derivative และมักเร็วกวา Bisection ไม่รับประกันเสมอ อาจแกว่งหรือ diverge
Fixed-point iteration จัดรูป \(x=g(x)\) เข้าใจง่าย ทำซ้ำ \(x_{n+1}=g(x_n)\) ขึ้นกับการจัดรูป ถ้า \(|g'(x)|\) ไม่เล็กพออาจไม่ลู่เข้า
False position / Regula Falsi ช่วงที่มี sign change รวมแนวคิด Bisection กับ Secant บางกรณีปลายช่วงข้างหนึ่งแทบไม่ขยับ ทำให้ช้า

Bisection Method

ใช้หลักว่า ถ้า \(f(x)\) ต่อเนื่องบน \([a,b]\) และ \(f(a)\) กับ \(f(b)\) คนละเครื่องหมาย จะมี root อย่างน้อยหนึ่งค่าระหว่างช่วงนั้น จากนั้นแบ่งครึ่งช่วงซ้ำ ๆ

\[ c = \frac{a+b}{2} \]
เลือกช่วงเริ่มต้น ให้ \(f(a)f(b)<0\)
หาจุดกลาง \(c=(a+b)/2\)
ตรวจ sign ถ้า \(f(a)f(c)<0\) ให้ root อยู่ใน \([a,c]\); ถ้าไม่ใช่ให้อยู่ใน \([c,b]\)
ทำซ้ำ จน \(|f(c)|\) เล็กพอ หรือช่วง \([a,b]\) แคบพอตาม tolerance
ตัวอย่างจากสไลด์: แก้ \(f(x)=x^3-x-2\) บน \([1,2]\) ด้วย Bisection จะได้ root ใกล้ \(1.52\) เพราะ \(f(1)<0\), \(f(2)>0\) และช่วงถูกบีบเข้าเรื่อย ๆ

Newton-Raphson Method

ใช้เส้นสัมผัสที่จุดปัจจุบันเพื่อคาดตำแหน่ง root ใหม่ ถ้าเริ่มใกล้คำตอบจะลู่เข้าเร็วมาก

\[ x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)} \]
เลือกค่าเริ่มต้น \(x_0\)
คำนวณ \(f(x_n)\) และ \(f'(x_n)\)
แทนสูตรเพื่อหา \(x_{n+1}\)
ทำซ้ำจน \(|x_{n+1}-x_n|\) หรือ \(|f(x_{n+1})|\) ต่ำกว่า tolerance
ระวัง: ถ้า derivative เป็นศูนย์หรือใกล้ศูนย์ สูตรจะหารด้วยค่าที่เล็กมาก ทำให้กระโดดไกล และถ้าเริ่มไกล root อาจไม่ลู่เข้า

Secant Method

Secant คล้าย Newton แต่ใช้เส้นตรงผ่านสองจุดล่าสุดแทน derivative จึงไม่ต้องคำนวณ \(f'(x)\)

\[ x_{n+1} = x_n - f(x_n)\frac{x_n-x_{n-1}}{f(x_n)-f(x_{n-1})} \]

ข้อดี

  • ไม่ต้องหา derivative
  • มักเร็วกว่าวิธี Bisection
  • เหมาะกับฟังก์ชันที่ derivative ยุ่งยาก

ข้อเสีย

  • ต้องมีค่าเริ่มต้นสองค่า
  • ไม่รับประกัน convergence เหมือน Bisection
  • ถ้า \(f(x_n)-f(x_{n-1})\) เล็กมาก จะไม่เสถียร

ตัวอย่างจากสไลด์ที่ควรจำ:

Fixed-Point และ False Position แบบย่อ

Fixed-Point Iteration

แปลง \(f(x)=0\) ให้อยู่ในรูป \(x=g(x)\) แล้วทำซ้ำ

\[ x_{n+1}=g(x_n) \]

จะลู่เข้าได้ดีเมื่อบริเวณ root มี \(|g'(x)|<1\)

False Position

ใช้เส้นตรงเชื่อม \((a,f(a))\), \((b,f(b))\) แล้วเอาจุดตัดแกน x เป็นค่าใหม่

\[ c=\frac{a f(b)-b f(a)}{f(b)-f(a)} \]

ยังรักษาช่วงที่มี sign change เหมือน Bisection

Week 5: Polynomial Interpolation

Interpolation คือการประมาณค่าที่อยู่ระหว่างข้อมูลที่เรารู้แล้ว ไม่ใช่การทำนายนอกช่วงข้อมูล ใช้มากในงานวิศวกรรม เช่น อุณหภูมิ ความสูง ประชากร ระดับน้ำทะเล fuel efficiency และการจำลองเชิงตัวเลข

Linear Interpolation

เมื่อรู้สองจุด \((x_0,y_0)\) และ \((x_1,y_1)\) แล้วต้องการประมาณ \(y\) ที่ \(x\) อยู่ระหว่างสองจุดนั้น ให้ใช้เส้นตรงเชื่อมสองจุด

\[ y = y_0 + \frac{y_1-y_0}{x_1-x_0}(x-x_0) \]
วิธีคิด: หา slope ก่อน แล้วเดินจาก \(y_0\) ไปตามระยะ \(x-x_0\) ตัวอย่างในสไลด์มีการประมาณ elevation, population growth และ fuel efficiency

Lagrange Interpolation

ใช้สร้าง polynomial ที่ผ่านทุกจุดข้อมูลพอดี เหมาะเมื่อมีหลายจุดและต้องการ polynomial โดยไม่ต้องแก้ระบบสมการโดยตรง

\[ P(x)=\sum_{j=0}^{n} y_j L_j(x), \qquad L_j(x)=\prod_{\substack{m=0\\m\ne j}}^n \frac{x-x_m}{x_j-x_m} \]

กรณี 2nd-order Lagrange Interpolation

ถ้ามี 3 จุด \((x_0,y_0),(x_1,y_1),(x_2,y_2)\) จะได้ quadratic polynomial:

\[ P_2(x)=y_0L_0(x)+y_1L_1(x)+y_2L_2(x) \]
\[ L_0(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)},\quad L_1(x)=\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)},\quad L_2(x)=\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)} \]

ตัวอย่างอุณหภูมิจากสไลด์

ข้อมูล: 9 AM = 15°C, 12 PM = 21°C, 3 PM = 18°C ต้องการประมาณอุณหภูมิที่ 1 PM หรือ \(x=13\) โดยใช้จุด \(x_0=9, x_1=12, x_2=15\)

\[ L_0(13)=-\frac{1}{9},\qquad L_1(13)=\frac{8}{9},\qquad L_2(13)=\frac{2}{9} \]
\[ P(13)=15\left(-\frac{1}{9}\right)+21\left(\frac{8}{9}\right)+18\left(\frac{2}{9}\right)=21 \]

คำตอบ: อุณหภูมิที่ 1 PM ประมาณ \(21^\circ C\)

แบบฝึกจากสไลด์

จุดข้อมูล \((1,2),(2,3),(4,1)\) สร้าง polynomial ด้วย Lagrange ได้

\[ P(x)=-\frac{2}{3}x^2 + 3x - \frac{1}{3} \]

วิธีตรวจเร็ว: แทน \(x=1,2,4\) แล้วต้องได้ \(2,3,1\) ตามลำดับ

Week 6: Cubic Spline Interpolation

ถ้าใช้ polynomial degree สูงผ่านหลายจุดพร้อมกัน เส้นอาจแกว่งแรง โดยเฉพาะใกล้ปลายช่วง Cubic spline แก้ปัญหานี้ด้วยการใช้ polynomial degree 3 แยกทีละช่วง แล้วบังคับให้ต่อกันอย่างเรียบ

แนวคิดหลัก

Piecewise cubic

แต่ละช่วง \([x_j,x_{j+1}]\) ใช้ cubic polynomial ของตัวเอง

\[ S_j(x)=a_j+b_j(x-x_j)+c_j(x-x_j)^2+d_j(x-x_j)^3 \]

Smoothness

ที่ node ทุกจุด เส้นต้องต่อกันทั้งค่า function, first derivative และ second derivative

  • \(S_j(x_j)=y_j\)
  • \(S_j(x_{j+1})=y_{j+1}\)
  • \(S'_j(x_{j+1})=S'_{j+1}(x_{j+1})\)
  • \(S''_j(x_{j+1})=S''_{j+1}(x_{j+1})\)

Natural Cubic Spline

Natural spline คือ spline ที่กำหนด curvature ที่ปลายทั้งสองเป็นศูนย์ หมายถึงปลายเส้นมีลักษณะค่อนข้างตรง ไม่โค้งฝืนเกินไป

\[ S''(x_0)=0,\qquad S''(x_n)=0 \]

ขั้นตอนสร้าง Natural Cubic Spline

เรียงข้อมูล ให้มี node \(x_0,x_1,\ldots,x_n\) และค่า \(y_i=f(x_i)\)
คำนวณความกว้างช่วง \(h_i=x_{i+1}-x_i\)
ตั้ง tridiagonal system เพื่อหา second derivative หรือ coefficient ที่เกี่ยวข้อง
ใส่ natural boundary โดยให้ค่าปลาย \(M_0=0\) และ \(M_n=0\)
แก้ระบบสมการ เช่น Thomas algorithm สำหรับ tridiagonal matrix
ประเมินค่า เลือกช่วงที่ \(x\) อยู่ แล้วแทนสูตร spline ของช่วงนั้น

สูตรประเมินค่า Spline ด้วย \(M_i=S''(x_i)\)

เมื่อ \(x\in[x_i,x_{i+1}]\) และ \(h_i=x_{i+1}-x_i\):

\[ S(x)= \frac{M_i}{6h_i}(x_{i+1}-x)^3 + \frac{M_{i+1}}{6h_i}(x-x_i)^3 + \left(\frac{y_i}{h_i}-\frac{M_i h_i}{6}\right)(x_{i+1}-x) + \left(\frac{y_{i+1}}{h_i}-\frac{M_{i+1}h_i}{6}\right)(x-x_i) \]

ตัวอย่างจากสไลด์

ตัวอย่าง 1

สร้าง natural cubic spline ผ่าน \((1,2),(2,3),(3,5)\)

  • มี 2 ช่วง: \([1,2]\), \([2,3]\)
  • ตั้ง \(S_0(x)\), \(S_1(x)\)
  • ใช้ interpolation conditions, derivative continuity, second derivative continuity
  • ใช้ boundary \(S''_0(1)=0\), \(S''_1(3)=0\)

ตัวอย่าง 2

ใช้จุด \((0,1),(1,e),(2,e^2),(3,e^3)\) เพื่อสร้าง natural spline ประมาณ \(f(x)=e^x\)

  • ตั้งระบบ \(Ax=b\)
  • แก้หา coefficient
  • ได้ spline แบบ piecewise สำหรับช่วง \([0,1]\), \([1,2]\), \([2,3]\)
จำแก่นให้ได้: Cubic spline ไม่ได้หา polynomial เดียวครอบทุกจุด แต่หา polynomial หลายชิ้น แล้วบังคับให้รอยต่อเนียนทั้งเส้น ค่า slope และ curvature

Week 7: Numerical Integration

Numerical Integration หรือ quadrature คือการประมาณพื้นที่ใต้กราฟ \(\int_a^b f(x)\,dx\) ใช้เมื่อ integrate exact ยาก หรือมีข้อมูลเป็นจุด ๆ จากการวัด

สัญลักษณ์ร่วม

แบ่งช่วง \([a,b]\) เป็น \(n\) ช่วงเท่า ๆ กัน

\[ h=\frac{b-a}{n},\qquad x_i=a+ih,\qquad f_i=f(x_i) \]

1. Rectangle Rule

ประมาณพื้นที่ด้วยรูปสี่เหลี่ยม โดยมักใช้ค่าที่จุดซ้ายของแต่ละช่วง

\[ \int_a^b f(x)\,dx \approx h\sum_{i=0}^{n-1} f(x_i) \]

เป็น first-order method จึงง่ายแต่ความแม่นยำน้อยกว่าวิธีที่ใช้เส้นหรือพาราโบลา

ตัวอย่างจากสไลด์: ประมาณ \(\int_0^2 x^2\,dx\) ด้วย Rectangle Rule และ \(n=2\) จะมี \(h=1\), ใช้ \(x_0=0,x_1=1\), ได้ \(I\approx1(0^2+1^2)=1\) ขณะที่ค่าจริงคือ \(8/3\)

2. Trapezoidal Rule

ใช้สี่เหลี่ยมคางหมูแทนพื้นที่ใต้กราฟในแต่ละช่วง เหมาะกว่า rectangle เพราะคำนึงถึงค่าทั้งต้นช่วงและปลายช่วง

\[ \int_a^b f(x)\,dx \approx \frac{h}{2} \left[f_0+2\sum_{i=1}^{n-1}f_i+f_n\right] \]

ตัวอย่างจากสไลด์: ใช้ Trapezoidal Rule กับ \(n=4\) เพื่อประมาณ \(\int_0^2 e^{-x^2}\,dx\)

3. Simpson's Rule

Simpson's Rule ใช้ polynomial degree 2 หรือพาราโบลา ผ่านจุด 3 จุดในทุก ๆ 2 ช่วง ดังนั้น \(n\) ต้องเป็นจำนวนคู่

\[ \int_a^b f(x)\,dx \approx \frac{h}{3} \left[ f_0 +4\sum_{\substack{i=1\\i\text{ odd}}}^{n-1}f_i +2\sum_{\substack{i=2\\i\text{ even}}}^{n-2}f_i +f_n \right] \]
จำ pattern: coefficient คือ \(1,4,2,4,2,\ldots,4,1\)

ตัวอย่างจากสไลด์: ประมาณ \(\int_1^2 \ln(x)\,dx\) ด้วย Simpson's Rule, \(n=2\) โดย \(h=(2-1)/2=0.5\), จุดคือ \(1,1.5,2\)

\[ I\approx \frac{0.5}{3}\left[\ln(1)+4\ln(1.5)+\ln(2)\right] \]

ค่าจริงคือ \(\int_1^2\ln(x)\,dx=2\ln(2)-1\)

4. Newton-Cotes 4-Point Rule / Simpson's 3/8 Rule

ใช้จุด 4 จุดที่ห่างเท่ากัน สร้าง cubic interpolating polynomial เหมาะเมื่อแบ่งเป็นกลุ่มละ 3 subintervals หรือ \(n\) เป็นพหุคูณของ 3

\[ \int_a^b f(x)\,dx \approx \frac{3h}{8}\left[ f_0 +3f_1 +3f_2 +f_3 \right] \]

Composite form ใช้ pattern coefficient \(1,3,3,2,3,3,2,\ldots,3,3,1\)

ตัวอย่างจากสไลด์: ประมาณ \(\int_0^3 \frac{1}{1+x^2}\,dx\) ด้วย Simpson's 3/8 Rule, \(n=3\), \(h=1\)

\[ I\approx \frac{3}{8}\left[ f(0)+3f(1)+3f(2)+f(3) \right] \]

สรุปสูตรจำก่อนสอบ

เรื่องสูตรหลักใช้เมื่อ
Absolute error \(E_a=|x_{\text{true}}-x_{\text{approx}}|\) วัดความห่างเป็นหน่วยจริง
Relative error \(E_r=E_a/|x_{\text{true}}|\) วัดความคลาดเคลื่อนเทียบขนาดค่าจริง
Bisection \(c=(a+b)/2\) มีช่วงที่ \(f(a)f(b)<0\)
Newton-Raphson \(x_{n+1}=x_n-f(x_n)/f'(x_n)\) หา derivative ได้และมี initial guess ดี
Secant \(x_{n+1}=x_n-f(x_n)(x_n-x_{n-1})/[f(x_n)-f(x_{n-1})]\) ไม่อยากหา derivative แต่มีค่าเริ่มสองค่า
Linear interpolation \(y=y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)\) ประมาณค่าระหว่างสองจุด
Lagrange \(P(x)=\sum y_jL_j(x)\) สร้าง polynomial ผ่านหลายจุด
Natural cubic spline \(S''(x_0)=S''(x_n)=0\) ต้องการเส้นโค้งเรียบ ไม่แกว่งแบบ polynomial degree สูง
Rectangle \(h\sum_{i=0}^{n-1}f_i\) ประมาณเร็วและง่าย
Trapezoidal \(\frac{h}{2}(f_0+2f_1+\cdots+2f_{n-1}+f_n)\) ใช้เส้นตรงแทนกราฟในแต่ละช่วง
Simpson 1/3 \(\frac{h}{3}(1,4,2,\ldots,4,1)\) \(n\) เป็นจำนวนคู่
Simpson 3/8 \(\frac{3h}{8}(1,3,3,1)\) ใช้ 3 subintervals ต่อหนึ่งกลุ่ม

เลือกวิธีอย่างไร

ถ้าโจทย์คือ \(f(x)=0\)

  • อยากชัวร์และมีช่วง sign change: ใช้ Bisection
  • มี derivative และเดาใกล้คำตอบ: ใช้ Newton-Raphson
  • ไม่มี derivative แต่มีค่าเริ่มสองค่า: ใช้ Secant

ถ้าโจทย์คือข้อมูลเป็นจุด

  • มีสองจุด: Linear interpolation
  • มีหลายจุดและอยากได้ polynomial: Lagrange
  • มีหลายจุดและอยากได้เส้นเรียบไม่แกว่ง: Cubic spline

ถ้าโจทย์คือ integral

  • ง่ายสุด: Rectangle
  • แม่นขึ้นด้วยเส้นตรง: Trapezoidal
  • แม่นขึ้นด้วยพาราโบลา: Simpson 1/3
  • ใช้ 4 จุด/3 ช่วง: Simpson 3/8

วิธีเช็คคำตอบ

  • Root: แทนกลับแล้ว \(f(x)\) ต้องใกล้ 0
  • Interpolation: แทน node เดิมแล้วต้องได้ \(y\) เดิม
  • Spline: ค่าและ derivative ต้องต่อเนื่องที่รอยต่อ
  • Integration: เพิ่ม \(n\) แล้วค่าควรเริ่มนิ่ง

การตรวจครบตามไฟล์ต้นฉบับ

สรุปนี้จัดจาก PDF ทั้งหมด 5 ไฟล์ รวม 189 หน้า โดยดึงข้อความแยกตามหน้าและ render หน้าสำคัญที่มีสูตร/ตาราง/โจทย์ภาพเพื่อตรวจซ้ำ หัวข้อด้านล่างคือ coverage ที่นำมารวมใน HTML นี้

สถานะ: ตรวจหัวข้อครบตามสไลด์ทั้งหมดแล้ว บางสไลด์มีช่องสูตร/เฉลยที่เว้นว่างสำหรับให้นักศึกษาเติม จึงเติมสูตรมาตรฐานของหัวข้อนั้นให้ครบในคู่มือนี้

จัดทำเป็น HTML สำหรับอ่านบน browser และพิมพ์/บันทึกเป็น PDF ได้