ผลต่างระหว่างรุ่นของ "Sgt/eigen1"
ไปยังการนำทาง
ไปยังการค้นหา
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
แถว 51: | แถว 51: | ||
=== Graph drawing === | === Graph drawing === | ||
− | ทดลองใส่กราฟในรูปแบบต่าง ๆ เช่น tree, cycle, complete | + | ทดลองใส่กราฟในรูปแบบต่าง ๆ เช่น tree, cycle, complete graphs, grids เป็นต้น แล้ววาดโดยใช้ eigenvector ที่สองและสาม |
=== Partitioning === | === Partitioning === |
รุ่นแก้ไขเมื่อ 05:31, 22 มกราคม 2558
เนื้อหา
โค้ดตัวอย่าง
- โค้ดตัวอย่างอยู่ที่ github
- Modules:
- mat.py: สร้าง adjacency matrix และ degree matrix
- generators.py: สร้าง adjacency list ของ line และ random graph แบบสอง cluster
- grpplot.py ส่วนของการ plot
- main.py: โปรแกรมหลัก
ฟังก์ชัน grpplot.plot
ฟังก์ชัน grpplot.plot(n, adjmat, px, py) จะวาดกราฟ n โหนด ตาม adjacency matrix adjmat โดยใช้พิกัดจาก px และ py
การปรับแก้การแสดงผล:
- สามารถปรับการแสดงโหนดโดยดูจากเอกสารฟังก์ชัน scatter scatter
- สามารถแก้ไขรูปแบบเส้นโดยดูจากวิธีการเพิ่มเส้นในการ plot โดยใช้ LineCollection LineCollection
โปรแกรมหลัก main.py พร้อมคำอธิบาย
def main():
# สร้าง adjacency list ของกราฟ
n = 100
#adjlist = gen_line(n)
adjlist = gen_random(n,500)
# สร้าง laplacian ของกราฟ
a = adjmat(n,adjlist)
d = degmat(n,adjlist)
la = d - a
# คำนวณ eigenvectors, eigenvalues แต่ผลจาก eig ไม่เรียง เลยจับมาเรียงเองด้วย sort_eig
w,v = eig(la)
w,v = sort_eig(w,v,n)
print w
# eigenvectors ของ $\lambda_2$ และ $\lambda_3$
e2 = v[1]
e3 = v[2]
# แกน x เอามาจาก eigenvectors, แกน y สุ่ม
px = [e2[i,0] for i in range(n)]
py = [random() for i in range(n)]
plot(n,a,px,py)
raw_input()
การทดลอง
Graph drawing
ทดลองใส่กราฟในรูปแบบต่าง ๆ เช่น tree, cycle, complete graphs, grids เป็นต้น แล้ววาดโดยใช้ eigenvector ที่สองและสาม