{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "def prehodna_matrika_M(matrika): #vrne matriko katere (i,j)-ti element prikazuje verjetnost, da se bomo iz i-tega vozlišča premaknili v j-to\n", " return Matrix([r/v for r, v in zip(matrika, sum(matrika))]) # vrstica / vsota vrstice\n", "\n", "def brisanje(j, matrika): #izbriše j-ti stolpec in j-to vrstico\n", " return matrika.delete_columns([j]).delete_rows([j])\n", "\n", "def dodajanje(j, matrika): #doda j-to vrstico in j-ti stolpec (ničle)\n", " return block_matrix([[matrika[:j, :j], 0, matrika[:j, j:]],\n", " [0, Matrix(1, 1), 0],\n", " [matrika[j:, :j], 0, matrika[j:, j:]]])\n", "\n", "def element_H(i, j, matrika): #izračuna (i,j)-ti element matrike H\n", " IM = dodajanje(j, (identity_matrix(matrika.nrows()-1) - brisanje(j, matrika))^-2)\n", " return sum(IM[i, k] * matrika[k, j] for k in range(matrika.nrows()) if k != j)\n", "\n", "def matrika_H(matrika): #vrne celotno matriko H\n", " return Matrix([next(zip(*dodajanje(j, (identity_matrix(matrika.nrows()-1) - brisanje(j, matrika))^-2) * matrika[:, j]))\n", " for j in range(matrika.ncols())]).transpose()\n", "\n", "def nakjucni_sprehod_blizine_centralnosti(i,matrika): #sprejme incidenčno matriko!\n", " vsota = 0\n", " n = matrika.nrows()\n", " rd = range(0,n)\n", " M = prehodna_matrika_M(matrika) #izračun matrike M\n", " H = matrika_H(M)\n", " for j in rd:\n", " vsota += H[j,i]\n", " return n/vsota #vrne vrednost naključnega sprehoda iz vozlišča i\n", "\n", "def centralno_po_nsbc(matrika): #vrne centralno vozlišče in njegovo vrednost\n", " n = matrika.nrows()\n", " rd = range(0,n)\n", " najvecji = [0,0]\n", " for i in rd:\n", " if nakjucni_sprehod_blizine_centralnosti(i,matrika) > najvecji[1]:\n", " s, = nakjucni_sprehod_blizine_centralnosti(i,matrika)\n", " najvecji = [i,s]\n", " return najvecji\n", "\n", "def oddaljenost_i(i,matrika): #vrne oddaljenost (najkrajšo pot) i-tega vozlišča do vseh ostalih vozlišč\n", " n = matrika.nrows()\n", " rd = range(0,n)\n", " vektor = Matrix(n,1)\n", " for j in rd: #j != i\n", " if j == i: #spusti\n", " pass #vektor = vektor\n", " elif matrika[i,j] != 0: #sosednja vozlišča\n", " vektor[j] = 1\n", " else:\n", " for l in range(1,n):\n", " if vektor[j] != 0:\n", " pass #vektor = vektor\n", " elif (matrika^l)[i,j] != 0:\n", " vektor[j] = l\n", " return vektor\n", "\n", "\n", "def centralnost_i(i,matrika): #centralno vozlišče\n", " s, = sum(oddaljenost_i(i,matrika)) #edini element se zapiše v spremenljivko s\n", " return 1/s\n", "\n", "def centralnost(matrika):\n", " vek = [0,0]\n", " for i in range(0,matrika.nrows()):\n", " if centralnost_i(i,matrika) > vek[1]:\n", " vek = [i,centralnost_i(i,matrika)]\n", " return vek\n", "\n", "def min_centralno(matrika):\n", " d = matrika.nrows()\n", " vek = [d,d]\n", " for i in range(0,d):\n", " if centralnost_i(i,matrika) < vek[1]:\n", " vek = [i,centralnost_i(i,matrika)]\n", " return vek" ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.1", "language": "sagemath", "metadata": { "cocalc": { "description": "Open-source mathematical software system", "priority": 1, "url": "https://www.sagemath.org/" } }, "name": "sage-9.1", "resource_dir": "/ext/jupyter/kernels/sage-9.1" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }