MegaGod because electronics and computers never take a rest

13Aug/100

Square root finding using Newton-Raphson Method Approach

สิ่งที่ผมจะพูดถึงในจุดนี้ก็คือ การประยุกต์ใช้ Newton-Raphson Method สำหรับการหาค่ารากที่สองของจำนวนใดๆ โดยผมได้เขียนเป็นภาษา C ซึ่งคิดว่าน่าจะเข้าใจได้ง่าย และในที่นี้ ผมจะไม่ขอกล่าวถึงเบื้องหลัง และความเป็นมาของ N-R Method แต่อย่างใด

อย่างแรกที่ควรรู้ คือ N-R Method ซึ่งมีสูตรอยู่ว่า
x_{i+1}=x_{i}+\frac{f(x_{i})}{f'(x_{i})}

และอยากให้พิจารณาในส่วนของฟังก์ชัน Square root ดังนี้ครับ

หากให้ x มีค่าเท่ากับรากที่สองของจำนวน (n) ใดๆ แล้ว จะได้ว่า
\begin{eqnarray}<br />
x&=&\sqrt{n}\\<br />
x^2&=&n\\<br />
0&=&x^2 - n\\<br />
f(x)&=&x^2 - n&=&0<br />
\end{eqnarray}

จาก f(x) จะได้ว่า
f^{\prime}(x)=2x

ทดลองพิสูจน์การทำงานจากการหารากที่สองของสอง ซึ่งจะได้ค่าเท่ากับ 1.414... กำหนด εs=0.01
\begin{eqnarray}<br />
\text{1^{st} iteration}\\<br />
x_0&=&\frac{n}{2}=\frac{2}{2}\\<br />
x_0&=&1\\<br />
f(x_0)&=&1^2-2\\<br />
&=&-1\\<br />
f^{\prime}(x_0)&=&(2)(1)\\<br />
&=&2\\<br />
x_1&=&x_0-\frac{f(x_0)}{f^{\prime}(x_0)}\\<br />
&=&1+\frac{1}{2}\\<br />
&=&1.5\\<br />
\epsilon_a&=&\left|\frac{x_1-x_0}{x_1}\right|\\<br />
&=&\left|\frac{1.5-1}{1.5}\right|<br />
&=&0.333<br />
\end{eqnarray}

\begin{eqnarray}<br />
\text{2^{nd} iteration}\\<br />
x_1&=&1.5\\<br />
f(x_1)&=&1.5^2-2\\<br />
&=&0.25\\<br />
f^{\prime}(x_1)&=&(2)(1.5)\\<br />
&=&3\\<br />
x_2&=&x_1-\frac{f(x_1)}{f^{\prime}(x_1)}\\<br />
&=&1.5-\frac{0.25}{3}\\<br />
&=&1.41667\\<br />
\epsilon_a&=&\left|\frac{x_2-x_1}{x_2}\right|\\<br />
&=&\left|\frac{1.41667-1.5}{1.41667}\right|<br />
&=&0.059<br />
\end{eqnarray}

\begin{eqnarray}<br />
\text{3^{rd} iteration}\\<br />
x_2&=&1.41667\\<br />
f(x_2)&=&1.41667^2-2\\<br />
&=&0.006953\\<br />
f^{\prime}(x_2)&=&(2)(1.41667)\\<br />
&=&2.83334\\<br />
x_3&=&x_2-\frac{f(x_2)}{f^{\prime}(x_2)}\\<br />
&=&1.41667-\frac{0.006953}{2.83334}\\<br />
&=&1.41421\\<br />
\epsilon_a&=&\left|\frac{x_3-x_2}{x_3}\right|\\<br />
&=&\left|\frac{1.41421-1.41667}{1.41421}\right|<br />
&=&0.001735\\<br />
\epsilon_a &<& \epsilon_s\text{ ; STOP}<br />
\end{eqnarray}

จากผลดังกล่าว หาก Run ไปเรื่อยๆ โดยการกำหนด εs ที่น้อยกว่า ก็จะทำให้ได้ค่าที่ใกล้เคียงค่าจริงกว่าเดิมมาก จึงเขียนใหม่เป็นภาษา C ดังนี้

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* Program: Positive square root finder
* Author: Kullawat Chaowanawatee
* Date: 2010-08-10
*/


#include <stdio .h>

double sqroot(double x);

int main()
{
    double x;

    printf("Enter -1 to exit...\n");

    do
    {
        scanf("%lf", &x);
        if (x != -1)
            printf("sqrt(%.2lf) = %.12lf\n", x, sqroot(x));
    } while(x != -1);

    return 0;
}

double dabs(double x)
{
    if (x > 0.0)
        return x;
    else
        return x * (-1);
}

double sqroot(double x)
{
    double old_root;
    double new_root;
    double ea;
    double es=0.000000000001;
    int i = 0;

    old_root = (double) x / 2.0;

    printf("es=%.12lf\n", es);

    do
    {
        new_root = old_root - (((old_root * old_root) - x) / (2 * old_root));
        ea = dabs((new_root - old_root) / new_root);
        old_root = new_root;

        i++;
        printf("PASS %4d: root=%.12lf ea=%.12lf\n", i, new_root, ea);
    } while(ea > es);

    return new_root;
}

ทั้งนี้ ทั้งนั้น เราสามารถเอา N-R Method ไปประยุกต์ใช้ได้อีกมากมาย เช่นการคำนวณทางฟิสิกส์ง่ายๆ สำหรับ Game หรือระบบ AI และอาจนำไปประยุกต์ในการใช้คำนวณทางคณิตศาสตร์ของหุ่นยนต์บน Microcontroller ได้ด้วย

ปิดท้ายด้วยบทเพลงไพเราะ

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

9May/100

Electronic Component

    อุปกรณ์ที่ใช้ในวงจรอิเล็กทรอนิกส์นั้น แบ่งออกเป็น 2 ประเภทหลักๆ นั่นคือ passive และ active ซึ่งอธิบายได้ดังนี้ครับ

    Passive component ในทางอิเล็กทรอนิกส์เราก็คือ อุปกรณ์ที่สามารถแสดงคุณสมบัติของตัวมันเองได้แม้ไม่ได้รับพลังงานใดๆ ป้อนให้กับตัวมัน ตัวอย่างเช่น

ตัวต้านทาน
ตัวต้านทาน - ไม่ต้องมีพลังงาน ก็สามารถต้านการไหลของกระแสได้

ตัวนำไฟฟ้า
ตัวนำไฟฟ้า - ไม่ต้องมีพลังงาน ก็สามารถเหนี่ยวนำไฟฟ้าได้

ตัวเก็บประจุ
ตัวเก็บประจุ - ไม่ต้องมีพลังงาน ก็ยังสามารถเก็บประจุได้
และยังมีอุปกรณ์อื่นๆ อีก

    Active component ในอิเล็กทรอนิกส์ ย่อมตรงข้ามกันกับ Passive นั่นก็คือหมายความว่า active component คือ อุปกรณ์ที่ต้องการสภาวะบางอย่าง หรือใช้พลังงานมาขับเพื่อให้เกิดปรากฎการณ์หนึ่งๆ แล้วจึงจะสามารถแสดงคุณสมบัติออกมาได้

ทรานซิสเตอร์
ทรานซิสเตอร์ - ถ้าไม่จ่ายไฟ bias ฉันจะไม่ทำงาน

วงจรรวมแบบ DIPวงจรรวมแบบ SOIC
วงจรรวม (IC) - อย่างน้อยก็ขอไฟเลี้ยงสักหน่อยเถอะ ไม่ได้กินไฟ ฉันไม่มีแรงทำงาน
และยังมีอื่นๆ อีก

    บางท่านอาจจะสงสัย เอ...ก็ในเมื่อ Passive component มันไม่ต้องการพลังงาน ขอแค่มี input แล้ว ก็จะมี output มันก็น่าจะประหยัดพลังงานกว่า Active component ซึ่งอย่างน้อยๆ ต้องการพลังงานขับตัวมันเอง แล้วทำไมเราถึงไม่ใช้ Passive component อย่างเดียวไปซะ มันก็น่าจะประหยัดพลังงาน เรื่องของเรื่องก็คือ งานบางอย่างมันใช้อุปกรณ์ passive อย่างเดียวไม่ได้ หรืออาจจะได้ แต่ก็ไม่เหมาะสม อาจจะด้วยเรื่องขนาดก็ดี ทรัพยากรก็ดี และที่สำคัญก็คือความไม่เป็นอุดมคติของอุปกรณ์ (non-idealistic) นี่แหละ จะทำให้อุปกรณ์ passive ที่ต่อกันขนาดใหญ่บริโภคพลังงานสูงกว่าการใช้อุปกรณ์ active อย่างเช่นว่า ใช้ตัวต้านทาน ถ้าเลือกพลาด ต้านกระแสนานๆ เข้า หรืออยู่ในบริเวณที่อากาศถ่ายเทไม่สะดวก ก็เกิดความร้อน นอกจากนั้นยังมีสัมประสิทธิ์อุณหภูมิที่จะมีผลกระทบต่อความต้านทาน หรือตัวเก็บประจุ เมื่อใช้ไปสักระยะ ก็จะเกิดกระแสรั่วไหล แม้จะในประมาณน้อยๆ ก็ตาม อีกทั้งความชื้นยังมีผลกระทบกับตัวเก็บประจุบางประเภทซึ่งอาจทำให้เกิดความเสียหาย

    ยังมีเหตุผลอีกนานัปการที่ passive component ทำแทน active component ได้ไม่ครบทุกเรื่อง หรือถ้าได้ก็ดีไม่เท่า และไม่เหมาะสมต่อสภาพแวดล้อมของงาน ฉะนั้นแล้ว ก็ตัดสินใจ ออกแบบวงจร และเลือกอุปกรณ์กันดีๆ นะครับ

8May/100

Hello world!

สวัสดีจ้ะ เปิดใช้งานเว็บแล้วนะ ใช้ WordPress เป็น engine หลักล่ะ สามารถใช้ TeX กับ Code Highlight ได้ด้วย ทีนี้ก็พร้อมทำงานแล้วล่ะนะ

x=\frac{-b\pm\sqrt{b^{2}-4ac}}{2a}

1
2
3
4
5
6
7
8
9
using System;

class Test
{
    public static void main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

แต่ก่อนอื่น มาลองฟังเพลงกันหน่อยเป็นไร
จูบเย้ยจันทร์ - sherbet4 และ NoOTa

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Filed under: Announcement No Comments