Saturday, October 17, 2015

โปรแกรมช่วยหาคำตอบระบบสมการไม่เชิงเส้นด้วย Newton-Raphson Method

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

[A][x] = [b]

โดย เมตริกซ์ A เป็นเมตริกซ์ที่มีสมาชิกของเมตริกซ์เป็นค่าคงที่ ดังแสดงในรูปที่ 1


ซึ่งเมตริกซ์ A จะเป็นเมตริกซ์ที่คงที่ ดังนั้นจึงสามารถใช้คลาส CMatrix อ่านข้อมูลสมาชิกของเมตริกซ์ A และ b ดังแสดงในบทความ การหาคำตอบของระบบสมการเชิงเส้นได้ แต่ในกรณีเป็นระบบสมการไม่เชิงเส้น (Nonlinear Equation System) สมาชิกของเมตริกซ์ A จะเป็นฟังก์ชันของตัวแปรที่ต้องการหาคำตอบ ดังแสดงในรูปที่ 2 การหาคำตอบของระบบสมการไม่เชิงเส้นจึงต้องใช้การหาคำตอบของระบบสมการด้วย Newton-Raphson Method 


Newton-Raphson Method จะมีขั้นตอนดำเนินการดังนี้
1. เขียนสมการทั้งหมดให้อยู่ในรูปแบบดังนี้
จากตัวอย่าง 3 สมการจะสามารถเขียน f1 , f2 , f3 ได้ดังนี้


2. การหาคำตอบของระบบสมการ จะเริ่มจากการเขียนระบบสมการในรูปแบบของอนุกรมเทย์เลอร์ โดยสามารถเขียนในรูปเมตริกซ์ได้ดังนี้
               
เมตริกซ์ J จะเรียกว่า Jacobian matrix ซึ่งสมาชิกต่างๆหาได้ดังนี้
จากตัวอย่าง 3 สมการ จะเขียนระบบสมการได้ดังนี้

3. ทำการหาคำตอบของระบบสมการนี้ โดยการกำหนดค่าเริ่มต้น  

แทนลงในเมตริกซ์ J และ f และหาคำตอบของระบบสมการในข้อ 2 ดังกล่าว
4. คำนวณหาผลลัพธ์ใหม่จาก  
5. ตรวจสอบผลลัพธ์โดยการแทนคำตอบจากข้อ 4 ลงใน เมตริกซ์ f และตรวจสอบค่าของสมาชิกในเมตริกซ์ โดยหากคำตอบที่แทนลงในเมตริกซ์ f ทำให้สมาชิกในเมตริกซ์ f มีค่าเท่ากับ 0  จะได้ว่า คำตอบดังกล่าวเป็นคำตอบของระบบสมการ แต่ในทางปฏิบัติจะกำหนดเงื่อนไขการลู่เข้าหาคำตอบไว้ โดยหากค่าในเมตริกซ์ f ทุกค่าต่ำกว่าที่กำหนดจะถือว่าชุดคำตอบนี้เป็นคำตอบของระบบสมการ แต่หากไม่ใช่จะย้อนกลับไปหาคำตอบของระบบสมการในข้อ 2 ต่อไปและจะทำซ้ำจนกระทั่งลู่เข้าสู่คำตอบของระบบสมการ

จากที่ได้อธิบายมาคร่าวๆ เราจะเห็นจุดที่จะนำเอาสมาชิกเมตริกซ์จากอาเรย์ 2D เข้ามาประยุกใช้ได้ นั่นคือขั้นตอนที่ 2 จากนั้นกำหนดคำตอบเริ่มต้นในข้อ 3 และทำการหาคำตอบของระบบสมการตามข้อ 2 โดยใช้ฟังก์ชัน SolveLU หรือ SolveGauss ได้ เรามาดู โค้ดโปรแกรมกันเลยครับ

#include "stdafx.h"
#include "Matrix.h"
#include "math.h"
int _tmain(int argc, _TCHAR* argv[])
{

        int n ;
int count ;
int row , col ;
double **J ;
double **f ;
double **x ;
double tol = 0.000001 ;
row = 3 ;
col = 3 ;
count = 0 ;
J = new double*[row];
f = new double*[row];
x = new double*[row];
for(int i = 0 ; i < row ; i++)
{
J[i] = new double[col] ;
f[i] = new double[col] ;
x[i] = new double[col] ;
}

//เดาคำตอบเริ่มต้น
x[0][0] = 1 ;   //x
x[1][0] = 1 ; //y
x[2][0] = 1 ; //z

       //คำนวณสมาชิกเมตริกซ f เริ่มต้น
f[0][0] = -(4*x[0][0]+x[1][0]*x[1][0] +x[2][0] -11) ;  //-f1:-(4x+y^2+z-11)
f[1][0] = -(x[0][0]+4*x[1][0] +x[2][0]*x[2][0] -18) ;  //-f2:-(x+4y+z^2-18)
f[2][0] = -(x[0][0]*x[0][0]+x[1][0] +4*x[2][0] -15) ;  //-f3:-(x^2+y+4z-15)


do
{      
               count++;
       //คำนวณเมตริซ์ J
      J[0][0] = 4 ;
      J[0][1] = 2*x[1][0] ;  //2y
      J[0][2] = 1 ;
      J[1][0] = 1 ;
      J[1][1] = 4 ;
      J[1][2] = 2*x[2][0] ; //2z
      J[2][0] = 2*x[0][0] ; //2x
      J[2][1] = 1 ;
      J[2][2] = 4 ;

     CMatrix A(3,3,J) ;
     CMatrix b(3,1,f) ;
     CMatrix dx ;                      //สร้าง object dx ไว้สำหรับเก็บคำตอบที่ Solve ได้
     dx.SolveLU(&A,&b);       // Solve ระบบสมการและเก็บคำตอบไว้ที่เมตริกซ dx

       
             // กำหนดคำตอบที่ได้ลงในเมตริกซ์ x 
     x[0][0] += dx.GetData(0,0);
     x[1][0] += dx.GetData(1,0);
     x[2][0] += dx.GetData(2,0);

             //คำนวณสมาชิกเมตริกซ f ใหม่
     f[0][0] = -(4*x[0][0]+x[1][0]*x[1][0] +x[2][0] -11) ;  //-f1:-(4x+y^2+z-11)
     f[1][0] = -(x[0][0]+4*x[1][0] +x[2][0]*x[2][0] -18) ;  //-f2:-(x+4y+z^2-18)
     f[2][0] = -(x[0][0]*x[0][0]+x[1][0] +4*x[2][0] -15) ;  //-f3:-(x^2+y+4z-15)     
}
        // check เงื่อนไขการลู่เข้าของคำตอบ
while (fabs(f[0][0]) > tol || fabs(f[1][0]) > tol || fabs(f[2][0]) > tol);   

printf("inter %d\tsolution are :\n",count);
printf("x = %.3f\n",x[0][0]);
printf("y = %.3f\n",x[1][0]);
printf("z = %.3f\n\n",x[2][0]);
printf("f1 = %.7f\n",f[0][0]);
printf("f2 = %.7f\n",f[1][0]);
printf("f3 = %.7f\n\n",f[2][0]);

// คืน memory ให้ระบบ
for (int i = 0 ; i < row ; i++)
{
delete [] J[i] ;
delete [] f[i] ;
delete [] x[i] ;
}
delete [] J ;
delete [] f ;
delete [] x ;

J = NULL ;
f = NULL ;
x = NULL ;
        
return 0 ;

}

ผลการประมวลผลโปรแกรมภาษา c++ ดังกล่าวสำหรับใช้หาคำตอบระบบสมการที่ไม่เป็นเชิงเส้นตามตัวอย่างแสดงได้ดังรูป


คำตอบของระบบสมการ

จากตัวอย่างโค้ดจะเห็นว่าในส่วนของการสร้างเมตริกซ์ J และ f เป็นการประยุกต์ใช้วิธีการประกาศคอนสตรัคเตอร์ตามที่ได้นำเสนอในบทความที่ผ่านมาครับ ซึ่งก็จะช่วยให้วิศวกรสามารถแก้ปัญหาในระบบต่างๆได้โดยง่าย
         อยากจะกล่าวให้เห็นปัญหาของการหาคำตอบของระบบสมการที่มากกว่า 3 สมการ ซึ่งท่านต้องสร้างเมตริกซ์ J และ f มากขึ้น ซึ่งการสร้างเมตริกซ์ตามที่ผมได้นำเสนออาจจะทำได้ช้าและยุ่งยาก ซึ่งเราอาจจะประยุกต์การสร้างฟังก์ชันสำหรับคำนวณ สมาชิกในเมตริกซ์ขึ้นมาซึ่งทำได้รวดเร็วและเป็นแบบแผน ทำให้เราสามารถประยุกต์ใช้โค้ดโปรแกรมเดียวกันนี้กับระบบสมการหลายๆระบบได้โดยการเปลี่ยนแปลงโค้ดเพียงเล็กน้อย ซึ่งจะข้อนำเสนอในบทความถัดๆไปนะครับ เพื่อให้เห็นประโยชน์ของการเขียนโปรแกรมแบบ OOP 














ตัวอย่างการโหลดสมาชิกเมตริกซ์จากอาเรย์ 2D มาใช้ใน Class CMatrix ในโปรแกรมภาษา C++

สวัสดีครับ บทความนี้ผมจะขอนำเสนอการโหลดสมาชิกของเมตริกซ์จากอาเรย์ 2D มาใช้ในคลาส CMatrix กันครับ เริ่มจาก จากบทความแนะนำ คลาส CMatrix  ได้อธิบาย คอนสตรัคเตอร์ตัวหนึ่งที่ใช้ในการโหลดสมาชิกของเมตริกซ์จากอาเรย์ 2D ซึ่งมีรูปแบบการประกาศ Object ดังนี้ครับ

CMatrix A(const int r , const int c , double **pD)
มาพิจารณาพารามิเตอร์ที่ต้องส่งผ่านคอนสตรัคเตอร์ตัวนี้ ซึ่งจะประกอบไปด้วย
1. จำนวนแถวของเมตริซ์ r
2. จำนวนหลักของเมตริกซ์ c
3. อาเรย์ 2D ซึ่งต้องเป็นแบบ pointer 

สมมุติตัวอย่าง ต้องการโหลดสมาชิกเมตริกซ์ขนาด 3x3 จากตัวแปรอาเรย์ชื่อ A เราจะเขียน code โปรแกรมภาษา C++ ในส่วนนี้ได้ดังนี้
        int row , col ;
double** data ;
row = 3 ;
col = 3 ;
data = new double*[row];
for (int i = 0 ; i < row ; i++)
{
data[i] = new double[col] ;
}

for (int j = 0 ; j < row ; j++)
{
for(int k = 0 ; k < col ; k++)
data[j][k] = j+k ;
}
cout<<"Matrix A"<<endl;
CMatrix A(row,col,data);
A.Show();
cout<<endl ;
cout<<"Matrix B"<<endl;
CMatrix B(3,3,data) ;
B.Show();

ผลลัพธ์การทำงานใน code ส่วนนี้จะแสดงได้ดังนี้


ผลการทำงานของโค้ดโปรแกรม

จากตัวอย่างโค้ดโปรแกรมภาษา C++ ที่ประมวลผลเมตริกซ์นี้ ผมได้นำเสนอ 2 รูปแบบ คือ ท่านสามารถผ่านขนาดของเมตริกซ์ด้วยตัวแปรก็ได้ หรือจะผ่านด้วยค่าก็ได้ เนื่องจาก คอนสตรัคเตอร์นี้ กำหนดชนิดของตัวแปรขนาดเป็นแบบ คงที่ (const int r , const int c , double **pD) เอาหล่ะครับ จบตรงนี้เราก็ได้ object ของคลาส CMatrix ที่พร้อมจะนำไปใช้ประมวลผลหรือดำเนินการทางเมตริกซ์ต่อ ไม่ว่าจะนำไป บวก ลบ หรือคูณเมตริกซ์ หรือแม้แต่จะนำไปหาคำตอบของระบบสมการดังที่เคยนำเสนอไปแล้ว ในบทความต่อไปจะนำ ตัวอย่างการใช้คอนสตรัคเตอร์ดังกล่าวในการแก้ปัญหาระบบสมการไม่เชิงเส้น โดยใช้ระเบียบวิธี Newton-Raphson 




Thursday, October 8, 2015

โปรแกรมคอมพิวเตอร์ช่วยหาคำตอบของระบบสมการเชิงเส้น ด้วย Class CMatrix

สวัสดีครับ บทความ โปรแกรมภาษา C++ บทนี้จะขอนำเสนอการประยุกต์ใช้คลาส CMatrix ช่วยในการหาคำตอบของระบบสมการเชิงเส้น เราจะประดิษฐ์โปรแกรมสำหรับช่วยหาคำตอบของระบบสมการเชิงเส้น เพื่อให้ท่านผู้อ่่านนำไปใช้งาน ทั้ง นร นศ ที่ต้องการนำไปตรวจเช็คคำตอบกับวิธีการหาคำตอบแบบแม่นตรง (Exact Solution) หรือวิศวกรที่กำลังแก้ปัญหาบางอย่างที่ประกอบไปด้วระบบสมการเชิงเส้นหลายตัวแปร สุดท้ายก็คือให้โปรแกรมเมอร์เห็นถึงวิธีการใช้งานคลาส CMatrix เพื่อนำไปประยุกต์ใช้ในการประมวลผลที่โปรแกรมประยุกต์อื่นๆ มาเริ่มกันเลยครับ

ในตัวอย่างโปรแกรมนี้จะใช้วิธีการโหลดสมาชิกของเมตริกซ์จาก Text file ที่เก็บข้อมูลไว้ ดังที่เคยนำเสนอวิธีการไว้ครับ และเป็นที่ทราบกันดีว่าระบบสมการเชิงเส้นสามารถเขียนในรูปแบบเมตริกซ์ได้ดังนี้
[A][x] = [b]
โดย A คือเมตริกซ์จัตตุรัสขนาด n x n ที่ประกอบด้วยค่าสัมประสิทธิ์คงที่ของตัวแปร x ในแต่ละสมการ
x คือ เมตริกซ์ตัวแปรที่ต้องหาคำตอบขนาด n x 1
b คือ เมตริกซ์ค่าด้านขวาของระบบสมการขนาด n x 1
ตัวอย่างเช่น พิจารณาระบบสมการเส้น 3 ตัวแปร
x + y + z = 10
x - y + z = 6
2x + y - 3z = -17.5

โดยจะบันทึกสมาชิกของเมตริก A และ b ในไฟล์ A.txt และ b.txt ไว้ที่ c:// ตามบทความที่เคยนำเสนอการเขียนโปรแกรมอ่านข้อมูลจาก text ไฟล์ 

มาดู code program ภาษา c++ กันครับ ดูแนวคิดกันก่อนนะครับ

สร้าง object A ของ class CMatrix โดยเรียก constructor สำหรับโหลดข้อมูลจากไฟล์ A.txt
สร้าง object b ของ class CMatrix โดยเรียก constructor สำหรับโหลดข้อมูลจากไฟล์ b.txt
สร้าง object x ของ class CMatrix และเรียกใช้ฟังก์ชัน SolveGuass เพื่อหาคำตอบของระบบสมการ โดยใช้ระเบียบวิธี  Gauss elimination หรือ LU decomposition

แสดงผลการหาคำตอบของระบบสมการเชิงเส้นมาดู Code กันเลยครับ


มาดูการใช้งานโปรแกรมนี้กันเลยครับตามภาพที่ 1


ท่านสามารถโหลด Program LES ไปใช้งานได้เลยนะครับ ตามวัตถุประสงค์ของบทความนี้ แต่ต้องระวังข้อผิดพลาดจากผู้ใช้ เช่น เป็นระบบสมการที่ไม่มีคำตอบ ซึ่งจะทำให้โปรแกรมทำงานผิดพลาด การไม่มีอยู่ของไฟล์เมตริกซ์ A หรือ b ตาม path ที่กำหนด ซึ่งตรงนี้ผมยังไม่ได้ทำ code ตรวจสอบไว้นะครับ ในบทต่อๆไปจะพยายามแทรก code การตรวจสอบไว้ให้เป็นตัวอย่างนะครับ นำเสนอการประยุกต์ใช้ Class CMatrix ในการสร้างโปรแกรมแก้ปัญหาอื่นๆอีกครับ



Wednesday, August 12, 2015

โปรแกรมภาษา C++ : Class CMatrix สำหรับช่วยคำนวณพิชคณิต

หลังจากที่ได้นำเสนอการเขียนโปรแกรมภาษา C++ มาระยะหนึ่ง โดยที่ผ่านมามุ่งเน้นไปที่การเขียนโปรแกรมสำหรับแก้ปัญหาพืชคณิตด้วยเมตริกซ์มาบ้างแล้ว ทั้งการ บวก ลบ คูณ เมตริกซ์ โดยได้เขียนโปรแกรมแยกเป็นโมดูลหรือฟังก์ชันไว้แล้ว แต่เพื่อจะให้ผู้ที่สนใจนำโค้ดโปรแกรมภาษา C++ ไปใช้ในการแก้ปัญหาพีชคณิตโดยใช้การดำเนินการของเมตริกซ์ เอาไปใช้ได้ด้วย จึงเกิด Class CMatrix ขึ้น Class ในภาษา C++ เป็นการเขียนโปรแกรมเชิงวัตถุ (Object -Oriented Programming) ซึ่งได้รวมรวมการดำเนินการของเมตริกซ์ไว้เกือบครบ รวมถึงระเบียบวิธีเชิงตัวเลขสำหรับแก้ระบบสมการ โดย Class CMatrix ที่ได้พัฒนาขึ้นจะมีขอบเขตถึงการแก้ระบบสมการที่เป็นเชิงเส้น(Linear Equation System) เท่านั้น ส่วนความสามารถในการแก้ระบบสมการที่ไม่เป็นเชิงเส้น (Nonlinear Equation System) ท่านอาจจะนำไปประยุกต์ต่อได้ครับ ในเบื้องต้นจะขอแนะนำ การโหลดข้อมูลของเมตริกซ์ก่อนเพื่อให้ท่านสามารถใช้งาน Class Matrix ได้ โดยสามารถทำได้ 2 วิธีคือ

1. ผ่านคอนสตรัคเตอร์ ตอนประกาศ Object มีรูปแบบดังนี้
CMatrix A(char *pFilePath)  โดย FilePath จะเป็นชื่อและที่อยู่ของ text ไฟล์ที่เป็นรูปแบบของเมตริกซ์ ดังที่เคยนำเสนอไปแล้วในตอน ฟังก์ชันสำหรับโหลดไฟล์ input เพื่อสร้างเมตริกซ์ 

2. ผ่านคอนสตรัคเตอร์แบบที่ 2 ตอนประกาศ Object มีรูปแบบดังนี้
CMatrix A(const int r , const int c , double **pD)

3. ท่านสามารถสำเนาข้อมูลจาก Object อื่นๆ ได้ ผ่าน Copy คอนสตรัคเตอร์ ดังนี้
สมมุติ มี object คลาส CMatrix ชื่อ A เราสามารถสร้าง object ฺB โดยให้ Copy ข้อมูลจาก object A ได้ ดังนี้
CMatrix B(A) ;

4. ท่านสามารถสร้าง object class CMatrix เมื่อทราบแค่ขนาดของ Matrix โดยทียังไม่มีข้อมูลก็ได้ดังนี้
CMatrix A(2,3) สร้างเมตริกส์ขนาด 2x3
CMatrix A(3) สร้างเมตริกส์ขนาด 3x3

5. ท่านสามารถสร้าง object class CMatrix แบบ Default Constructor ขึ้นมาเพื่อรองรับการดำเนินการทางเมติกซ์ของ object class CMatrix อื่นๆ ได้ เช่น การแก้ระบบสมการ สามารถประกาศได้ ดังนี้
CMatrix A ;

โดย r คือจำนวนแถวของเมตริกซ์ c คือจำนวนหลักของเมตริกซ์ และ pD คือ ไดนามิกส์อาเรย์ 2 มิติ ที่ประกอบไปด้วยสมาชิกของเมตริกซ์ row x col ตัว

มาถึงตรงนี้ท่านก็จะสามารถใช้งาน Class CMatrix ได้แล้ว หรือหากจะนำ Class นี้ไปพัฒนาต่อก็ทำได้ครับ download Class CMatrix ได้เลยครับ

ในบทความต่อๆไปผมจะนำเสนอการประยุกต์ใช้ Class CMatrix ในภาษา C++ สำหรับแก้ปัญหาพิชคณิตต่อไปนะครับ หรือจะเป็นปัญหาอื่นๆที่สามารถเขียนในรูป Matrix และมีการดำเนินการระหว่างเมตริกซ์ที่เป็นขั้นเป็นตอนก็สามารถนำ Class นี้ไปใช้งานได้ครับ

Thursday, May 28, 2015

กลเม็ดหรือข้อควรระวังสำหรับการเขียนโปรแกรมคอมพิวเตอร์ด้วยภาษา Cและ C++ - 1

สวัสดีครับท่านผู้อ่าน จากการที่เริ่มเขียนโปรแกรมคอมพิวเตอร์ด้วยภาษา C และ C++ มาระยะหนึ่ง พบว่า ความผิดพลาดแบบคาดไม่ถึงมีอยู่หลายเรื่อง บทความนี้จึงขอนำเสนกลเม็ดและข้อควรระวังในการเขียนโปรแกรมด้วย C /C++ เพื่อไม่ให้เกิด BUG ในโปรแกรมกันครับ มาเริ่ม หัวข้อแรกกันเลยครับ
1. พึงระวังเรื่อง index ของตัวแปรอาเรย์ โดยต้องระลึกเสมอว่า index ของเอลิเมนต์สุดท้ายของตัวแปรอาเรย์จะต้องน้อยกว่าขนาดของอาเรย์อยู่ 1 เสมอ เนื่องจากในตัวแปรอาเรย์ นั้น index จะเริ่มนับตั้งแต่ 0 ซึ่งหากเราวิ่งเลย index สุดท้ายของอาเรย์ไป ก็จะทำให้โปรแกรมที่เขียนทำงานผิดพลาด ตามปกติเวลาเราวิ่งเข้าหาข้อมูลในอาเรย์ด้วยลูป for ผมมักจะเขียนดังนี้ จนเป็นความเคยชินครับ

#define size  20
int n[size] ;
for (int i = 0 ; i < size ; i++)
{
    // do some thing
}

สุดท้ายเกี่ยวกับตัวแปรอาเรย์นะครับ อย่าลืมกำหนดค่าเริ่มต้นให้กับตัวแปรหลังการประกาศนะครับ ป้องกันการเผอเรอนำตัวแปรที่ไม่ได้กำนหค่าไปใช้งานแล้วทำให้โปรแกรมทำงานผิดพลาด

ติดตามบทความเกี่ยวกับการท่องไปในอาเรย์ได้ครับ

โปรแกรมภาษา C++ : การเข้าถึงข้อมูลในอาเรย์



Friday, February 20, 2015

ชนิดข้อมูลแบบสร้างเองในภาษา c และ c++

ตัวแปรแบบสร้างเองใน c และ c++ จริงๆแล้วก็คือ struct นั่นเอง แนวคิดของการสร้างข้อมูลชนิดนี้ขึ้นมาก็คือ ต้องการเก็บข้อมูลให้เป็นกลุ่มก้อนเดียวกัน เพื่อว่าจะสามารถเข้าถึง ดำเนินการต่างๆ หรือโอนย้ายได้ง่าย ขอยกตัวอย่างให้เห็นชัด กรณีตำแหน่งของจุดๆหนึ่งในพิกัดฉาก เราจะบอกตำแหน่งนั้นด้วยพิกัด x , y และ z ในที่นี้หากเราต้องการเก็บข้อมูลพิกัดทั้งสามนี้เป็นข้อมูลกลุ่มเดียวกัน เราจะทำการประกาศโครงสร้างแบบ struct เพื่อกำหนดชนิดข้อมูลแบบสร้างเองขึ้นมา เช่น ต้องการสร้างข้อมูลชนิด Point ที่มีสมาชิกในกลุ่มเป็นพิกัด x , y และ z ที่เป็นชนิดข้อมูลแบบ int เราจะประกาศโครงสร้างตามโค้ดโปรแกรมดังนี้ครับ
struct Point
{
                   int x ;
                   int y ;
                   int z ;
} ;

เราสามารถใช้ฟังก์ชัน sizeof หาขนาดหน่วยความจำของตัวแปรชนิด Point ได้เหมือนตัวแปรปกติทั่วไป โดยจากตัวอย่างตัวแปรชนิด Point ต้องการหน่วยความจำในการจัดเก็บ 3x4 = 12 bytes
การกำหนดค่าให้กับตัวแปรขนิด Point สามารถทำได้ผ่านตัวดำเนินการ . ดังตัวอย่าง
Point V   // ประกาศตัวแปร V เป็นข้อมูลประเภท Point
V.x = 10 ;                 //กำหนดให้ x มีค่าเท่ากับ 10
V.y = 15 ;                 //กำหนดให้ y มีค่าเท่ากับ 15
V.Z = 20 ;                 //กำหนดให้ z มีค่าเท่ากับ 20

จากบทความที่ผ่านมาเราได้เขียนโปรแกรมเกี่ยวกับการดำเนินการของเมตริกซ์  ซึ่งเราสามารถกำหนดชนิดตัวแปรแบบเมตริกซ์ไว้ใช้งานได้เช่นกัน ดังนี้
struct Matrix
{
                   int col ;
                   int row ;
                   Float** member ;
};

เท่านี้ก็สามารถใช้งานตัวแปรแบบเมตริกซ์ได้อย่างสะดวกครับ ตัวอย่างการใช้งานจะนำเสนอในบทความอื่นๆต่อไป

เราสามารถพบเจอตัวแปรแบบสร้างเองมากขึ้นในการเขียนโปรแกรมประเภทวินโดว์ ด้วย Visual C++ , WIN32 API ซึ่งมีการกำหนดตัวแปรชนิดใหม่ๆขึ้นมารองรับการพัฒนาแอฟพลิเคชั่นเพื่อความสะดวกกับโปรแกรมเมอร์ผู้พัฒนา Application เหล่านั้น