\n",
"Όταν ένας τετραγωνικός πίνακας δεν διαγωνοποιείται, το Sage μας παρέχει την μορφή Jordan του πίνακα, μαζί με τον πίνακα αλλαγής βάσης ο οποίος παράγεται από τα γενικευμένα ιδιοδιανύσματα του αντίστοιχου πίνακα. Για παράδειγμα:\n",
""
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ο πίνακας Β:\n",
"[1 1 3]\n",
"[0 1 0]\n",
"[0 0 2]\n",
"----------\n",
"Η μορφή Jordan J του πίνακα Β:\n",
"[2|0 0]\n",
"[-+---]\n",
"[0|1 1]\n",
"[0|0 1]\n",
"----------\n",
"Ο πίνακας T αλλαγής βάσης:\n",
"[ 1 1 0]\n",
"[ 0 0 1]\n",
"[1/3 0 0]\n"
]
}
],
"source": [
"B = matrix([[1, 1, 3], [0, 1, 0], [0, 0, 2]]); print str('Ο πίνακας Β:'); print B ; print str('----------')\n",
"J, T = B.jordan_form(transformation=True);\n",
"print str('Η μορφή Jordan J του πίνακα Β:');\n",
"print J; \n",
"print str('----------')\n",
"print str('Ο πίνακας T αλλαγής βάσης:');\n",
"print T"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n"
]
}
],
"source": [
"print B == T*J*T^(-1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5.2 Γραμμική άλβεβρα και προβλήματα ελαχιστοποίησης \n",
"\n",
"### 5.2.1 Η διαδικασία ορθοκανονικοποίησης Gram-Schmidt\n",
"\n",
" \n",
"Μια απλή αναζήτηση στο διαδίκτυο μας δίνει ως αποτέλεσμα πολλά κι ενδιαφέροντα διαδραστικά μαθήματα γραμμικής άλγεβρας με την βοήθεια του Sage. Στα παρακάτω έχουμε επιλέξει να παρουσιάσουμε μια διαφορετική εφαρμογή, και πιο συγκεκριμένα πως μπορούμε να χρησιμοποιήσουμε τις δυνατότητες συμβολικής ολοκλήρωσης του Sage, παρέα με την γραμμική άλγεβρα για να προσεγγίσουμε συνεχείς συναρτήσεις με πολυώνυμα. Το πρόβλημα αυτό είναι αρκετά απαιτητικό κι επίπονο από υπολογιστική σκοπιά, και ιδιαίτερα όταν πρέπει να υπολογίσουμε μια ορθοκανονική βάση σε έναν κατάλληλο διανυσματικό υπόχωρο με την διαδικασία Gram-Schmidt.
Ας θυμηθούμε όμως πρώτα μερικές βασικές έννοιες που διδαχτήκατε στην γραμμική άλγεβρα.\n",
"\n",
"Ορθοκανονική λίστα διανυσμάτων
\n",
" \n",
"Θεωρούμε έναν διανυσματικό χώρο $V$ εφοδιασμένο με ένα εσωτερικό γινόμενο $<\\,,\\,>$. \n",
"Μια λίστα διανυσμάτων ${\\rm{e}}_1 , \\ldots , {\\rm{e}}_m$ του $V$, λέγεται ορθοκανονική αν κάθε διάνυσμα στην λίστα έχει νόρμα ίση με μονάδα, και είναι ορθογώνιο με όλα τα άλλα διανύσματα της λίστας:
\n",
"Με άλλα λόγια, η λίστα $({\\rm e}_1 , \\ldots , {\\rm e}_m)$ διανυσμάτων του $V$ είναι ορθοκανονική αν\n",
"$$ < \\rm{e}_i\\,,\\,{\\rm{e}}_j >= \\delta_{i\\,j}:= \\begin{cases}\n",
"1\\,, & \\mbox{αν}\\quad j=k\\,, \\\\\n",
"0\\,, & \\mbox{αν}\\quad j\\neq k\\,.\n",
"\\end{cases} $$\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Παράδειγμα.
\n",
"\n",
"Τα διανύσματα του $\\mathbb{R}^3$ \n",
"$$\\textstyle {\\rm e}_1 = (\\frac{1}{\\sqrt{3}},\\frac{1}{\\sqrt{3}},\\frac{1}{\\sqrt{3}})\\,, \\quad \n",
"{\\rm e}_2 = (-\\frac{1}{\\sqrt{2}},\\frac{1}{\\sqrt{2}},0)\n",
"$$
\n",
"είναι μια ορθοκανονική λίστα στον $\\mathbb{R}^3$.
"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1/3*sqrt(3), 1/3*sqrt(3), 1/3*sqrt(3)), (-1/2*sqrt(2), 1/2*sqrt(2), 0)]\n"
]
}
],
"source": [
"e = [vector([1/3^(1/2), 1/3^(1/2) , 1/3^(1/2)]) , vector([-1/2^(1/2), 1/2^(1/2) , 0])]; \n",
"print e"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 0]\n",
"[0 1]\n"
]
}
],
"source": [
"ginomena = matrix([[ e[i].dot_product(e[j]) for i in range(len(e))] for j in range(len(e))]);\n",
"print ginomena"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Τα διανύσματα του $\\mathbb{R}^3$ \n",
"$$\\textstyle {\\rm e}_1 = (\\frac{1}{\\sqrt{3}},\\frac{1}{\\sqrt{3}},\\frac{1}{\\sqrt{3}})\\,, \\quad \n",
"{\\rm e}_2= (-\\frac{1}{\\sqrt{2}},\\frac{1}{\\sqrt{2}},0)\\,,\\quad\n",
"{\\rm e}_3 = (\\frac{1}{\\sqrt{6}},\\frac{1}{\\sqrt{6}},-\\frac{2}{\\sqrt{6}})\\,,\n",
"$$
\n",
"είναι μια ορθοκανονική λίστα στον $\\mathbb{R}^3$\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"e.append(vector([1/6^(1/2), 1/6^(1/2) , -2/6^(1/2)]) );"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 0 0]\n",
"[0 1 0]\n",
"[0 0 1]\n"
]
}
],
"source": [
"ginomena = matrix([[ e[i].dot_product(e[j]) for i in range(len(e))] for j in range(len(e))]);\n",
"print ginomena"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Η νόρμα ενός ορθοκανονικού γραμμικού συνδυασμού
\n",
"\n",
"Αν ${\\rm e}_1 , \\ldots , {\\rm e}_m$ είναι μια ορθοκανονική λίστα διανυσμάτων του $V$, τότε
\n",
"$$\\left\\lVert a_1\\,{\\rm e}_1 + \\cdots a_m\\, {\\rm e}_m \\right\\rVert^2 = \\left|a_1\\right|^2 + \\cdots +\\left|a_m\\right|^2 \\,,\n",
"$$
\n",
"για κάθε $a_1,a_2,\\ldots a_m$, στο $\\mathbb{R}$ ή $\\mathbb{C}$, όπου με $\\left\\lVert \\,\\, \\right\\rVert $ συμβολίζουμε την νόρμα ενός διανύσματος του $V$, δηλαδή $\\left\\lVert \\rm{v} \\right\\rVert = \\sqrt{< \\rm{v},\\rm{v} >}$.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Τα διανύσματα μιας ορθοκανονικής λίστας είναι γραμμικώς ανεξάρτητα
\n",
"\n",
"Αν ${\\rm e}_1 , \\ldots , {\\rm e}_m$ είναι μια ορθοκανονική λίστα διανυσμάτων του $V$, τότε τα \n",
"${\\rm e}_1 , \\ldots , {\\rm e}_m$ είναι γραμμικώς ανεξάρτητα διανύσματα. Αυτό μπορεί να αποδειχθεί εύκολα χρησιμοποιώντας την προηγούμενη ισότητα.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Ορθοκανονική βάση
\n",
"\n",
"Μια ορθοκανονική βάση του $V$, είναι μια ορθοκανονική λίστα διανυσμάτων στον $V$, η οποία είναι επιπλέον και βάση του $V$. Κάθε ορθοκανονική λίστα διανυσμάτων του V με μήκος ίση με την διάσταση του $V$, είναι μια ορθοκανονική βάση του $V$.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Παράδειγμα.
\n",
"\n",
"Τα διανύσματα του $\\mathbb{R}^4$
\n",
"$$\\textstyle (\\frac{1}{2},\\frac{1}{2},\\frac{1}{2},\\frac{1}{2})\\,, \\quad \n",
"(\\frac{1}{2},\\frac{1}{2},-\\frac{1}{2},-\\frac{1}{2})\\,, \\quad\n",
"(\\frac{1}{2},-\\frac{1}{2},-\\frac{1}{2},\\frac{1}{2})\\,, \\quad\n",
"(-\\frac{1}{2},\\frac{1}{2},-\\frac{1}{2},\\frac{1}{2})\\,, \\quad\n",
"$$
\n",
"είναι μια ορθοκανονική βάση του $\\mathbb{R}^4$
"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1/2, 1/2, 1/2, 1/2), (1/2, 1/2, -1/2, -1/2), (1/2, -1/2, -1/2, 1/2), (-1/2, 1/2, -1/2, 1/2)]\n",
"4\n"
]
}
],
"source": [
"e = [vector([1/2,1/2,1/2,1/2]) , vector([1/2,1/2,-1/2,-1/2]) , \n",
" vector([1/2,-1/2,-1/2,1/2]), vector([-1/2,1/2,-1/2,1/2])]; \n",
"print e; print len(e)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 0 0 0]\n",
"[0 1 0 0]\n",
"[0 0 1 0]\n",
"[0 0 0 1]\n"
]
}
],
"source": [
"ginomena = matrix([[ e[i].dot_product(e[j]) for i in range(len(e))] for j in range(len(e))]);\n",
"print ginomena"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Επειδή το μήκος της παραπάνω λίστας διανυσμάτων του $\\mathbb{R}^4$ είναι τέσσερα, δηλαδή ίση με την διάσταση του $\\mathbb{R}^4$, είναι μια ορθοκανονική βάση του $\\mathbb{R}^4$. \n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Γράφοντας ένα διάνυσμα σαν γραμμικό συνδυασμό των διανυσμάτων μιας ορθοκανονικής βάσης
\n",
"\n",
"Αν ${\\rm e}_1 , \\ldots , {\\rm e}_n$ είναι μια ορθοκανονική βάση διανυσμάτων του $V$, και ${\\rm v} \\in V$, τότε\n",
"
\n",
"$$v = < {\\rm v},{\\rm e}_1 >\\,{\\rm e}_1 + \\cdots + < {\\rm v},{\\rm e}_n >\\,{\\rm e}_n\\,,$$\n",
"και\n",
"$$\\left\\lVert {\\rm v} \\right\\rVert^2 = \\left|< {\\rm v},{\\rm e}_1 >\\right|^2 + \\cdots +\\left|< {\\rm v},{\\rm e}_m >\\right|^2\\,.$$
\n",
"Η πιο σημαντική χρησιμότητα των ορθοκανονικών βάσεων στηρίζεται στο προηγούμενο αποτέλεσμα. Σε μια γενική βάση ${\\rm e}_1 , \\ldots , {\\rm e}_n$ του $V$, γνωρίζουμε ότι δοσμένου ενός τυχαίου διανύσματος ${\\rm v}\\in V$, υπάρχει μια επιλογή βαθμωτών $a_1,\\ldots,a_n$ (στο $\\mathbb{R}$ ή στο $\\mathbb{C}$) έτσι ώστε
\n",
"$${\\rm v} = a_1\\,{\\rm e}_1 + \\cdots + a_n\\,{\\rm e}_n\\,.$$
\n",
"Όμως, ο υπολογισμός των $a_1,\\ldots,a_n$, μπορεί να είναι μια επίπονη διαδικασία για μια γενική βάση ${\\rm e}_1 , \\ldots , {\\rm e}_n$. Ωστόσο, αν η βάση ${\\rm e}_1 , \\ldots , {\\rm e}_n$ είναι ορθοκανονική τα βαθμωτά $a_1,\\ldots,a_n$, είναι απλά $a_j = <{\\rm v},{\\rm e}_j>$.\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Η διαδικασία ορθοκανονικοποίησης Gram-Schmidt
\n",
"\n",
"Ας υποθέσουμε ότι ${\\rm v}_1 , \\ldots , {\\rm v}_m$ είναι μια λίστα γραμμικώς ανεξάρτητων διανυσμάτων του $V$. Έστω
\n",
"$$ {\\rm e}_1 = \\frac{{\\rm v}_1}{\\left\\lVert {\\rm v}_1 \\right\\rVert}\\,.$$
\n",
"Για $j=2,\\ldots m$, ορίζουμε τα διανύσματα ${\\rm e}_j$ επαγωγικά ως εξής:
\n",
"$${\\rm e}_j = \\frac{{\\rm v}_j - < {\\rm v}_j,{\\rm e}_1 > {\\rm e}_1 -\\cdots -< {\\rm v}_j,{\\rm e}_{j-1} >\\,{\\rm e}_{j-1}}{\\left\\lVert {\\rm v}_j - < {\\rm v}_j,{\\rm e}_1 > {\\rm e}_1 -\\cdots -< {\\rm v}_j,{\\rm e}_{j-1} >\\,{\\rm e}_{j-1}\\right\\rVert}$$
\n",
"Τότε η νέα λίστα ${\\rm e}_1,{\\rm e}_2,\\ldots, {\\rm e}_m$ είναι μια ορθοκανονική λίστα διανυσμάτων του $V$, έτσι ώστε\n",
"$$ \\rm{span}({\\rm v}_1,\\ldots , {\\rm v}_j) = \\rm{span}({\\rm e}_1,\\ldots , {\\rm e}_j)$$\n",
"για $j=1,\\ldots,m.$\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Παράδειγμα.
\n",
"\n",
"Τα διανύσματα του $\\mathbb{R}^3$ \n",
"$$\\textstyle {\\rm v}_1=(1,2,2)\\,, \\quad \n",
"{\\rm v}_2=(-1,0,2)\\,, \\quad\n",
"{\\rm v}_3 = (2,2,1) \\,, \\quad\n",
"$$
\n",
"είναι μια βάση του $\\mathbb{R}^3$. Πράγματι, η διάσταση του $\\mathbb{R}^3$ είναι 3 και \n",
"τα τρία διανύσματα είναι γραμμικώς ανεξάρτητα αφού ο πίνακας $M = [v_1,v_2,v_3]$ με στήλες τα παραπάνω διανύσματα έχει την παρακάτω κλιμακωτή ανηγμένη μορφή:
"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1 -1 2]\n",
"[ 2 0 2]\n",
"[ 2 2 1]\n",
"[1 0 0]\n",
"[0 1 0]\n",
"[0 0 1]\n"
]
}
],
"source": [
"M = matrix( [[1,-1,2] , [2,0,2], [2,2,1] ] ); print M; print M.rref()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Θέτουμε τα ${\\rm v}_1,{\\rm v}_2,{\\rm v}_3$ σε μια λίστα με όνομα v
και έχουμε\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1, 2, 2), (-1, 0, 2), (2, 2, 1)]\n"
]
}
],
"source": [
"v = [vector([1,2,2]) , vector([-1,0,2]), vector([2,2,1]) ]; print v"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Στην συνέχεια, εφαρμόζουμε την διαδικασία ορθοκανονικοποίησης Gram-Schmidt στην λίστα διανυσμάτων v
\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1/3, 2/3, 2/3), (-2/3, -1/3, 2/3), (2/3, -2/3, 1/3)]\n"
]
}
],
"source": [
"e = [v[0]/norm(v[0])]\n",
"for j in [1..len(v)-1]:\n",
" r = v[j] - sum(v[j].dot_product(e[k])*e[k] for k in [0..len(e)-1])\n",
" normr = norm(r)\n",
" e.append(r/norm(r));\n",
"print e"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Το αποτέλεσμα είναι η νέα ορθοκανομική λίστα e
διανυσμάτων του $\\mathbb{R}^3$
\n",
"$$\\textstyle {\\rm e}_1=\\frac{1}{3}(1,2,2)\\,, \\quad \n",
"{\\rm e}_2=\\frac{1}{3}(-2,-1,2)\\,, \\quad\n",
"{\\rm e}_3 = \\frac{1}{3}(2,-2,1) \\,, \\quad\n",
"$$
\n",
"Πράγματι, υπολογίζουμε όλα τα εσωτερικά γινόμενα των διανυσμάτων στην λίστα e
:\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 0 0]\n",
"[0 1 0]\n",
"[0 0 1]\n"
]
}
],
"source": [
"ginomena = matrix([[ e[i].dot_product(e[j]) for i in range(len(e))] for j in range(len(e))]);\n",
"print ginomena"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Παράδειγμα.
\n",
"\n",
"Θεωρούμε τα διανύσματα \n",
"$$\\textstyle {\\rm v}_1=(1,0,1,1)\\,, \\quad \n",
"{\\rm v}_2=(1,1,0,1)\\,,$$
\n",
"τα οποία παράγουν έναν υπόχωρο $W=\\rm{span}(v_1,v_2)$ του $\\mathbb{R}^4$. Θέλουμε να επεκτείνουμε τα ${\\rm v}_1,{\\rm v}_2$ σε μια βάση $v=\\lbrace {\\rm v}_1,{\\rm v}_2,{\\rm v}_3,{\\rm v}_4\\rbrace$ του $\\mathbb{R}^4$, και στην συνέχεια με την διαδικασία Gram-Schmidt να κατασκευάσουμε από την βάση $v$ μια ορθοκανονική βάση του $\\mathbb{R}^4$.
\n",
"Υπάρχουν πολλοί τρόποι για να επεκτείνουμε τα ${\\rm v}_1,{\\rm v}_2$ σε μια βάση του $\\mathbb{R}^4$. Ας υποθέσουμε ότι ${\\rm w}=(x,y,z,w)$ είναι ένα διάνυσμα κάθετο στον $W\\,.$ Τότε \n",
"$$ < {\\rm v}_1, {\\rm w} >=< {\\rm v}_2,{\\rm w} >=0\\,,$$ \n",
"το οποίο είναι ένα ομογενές γραμμικό σύστημα για τις συνιστώσες του ${\\rm w}$. Παίρνουμε τον πίνακα του γραμμικού αυτού συστήματος\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1 0 1 1]\n",
"[ 0 1 -1 0]\n"
]
}
],
"source": [
"M = matrix([[1,0,1,1],[1,1,0,1]]); print M.rref()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\n",
"(1, 0, 0, -1),\n",
"(0, 1, 1, -1)\n",
"]\n"
]
}
],
"source": [
"N= M.right_kernel().basis() ; print N"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"και θεωρούμε τα διανύσματα \n",
"$$\\textstyle {\\rm v}_3=(1,0,0,-1)\\,, \\quad \n",
"{\\rm v}_4=(0,1,1,-1)\\,.$$
\n",
"τα οποία παράγουν το κάθετο υπόχωρο $W^\\perp=\\rm{span}(v_3,v_4)$ στον $W$. Πράγματι, υπολογίζουμε όλα τα εσωτερικά γινόμενα των διανυσμάτων ${\\rm v}_1,{\\rm v}_2,{\\rm v}_3,{\\rm v}_4$ \n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"v = [vector([1,0,1,1]), vector([1,1,0,1]), vector([1,0,0,-1]) , vector([0,1,1,-1])]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[3 2 0 0]\n",
"[2 3 0 0]\n",
"[0 0 2 1]\n",
"[0 0 1 3]\n"
]
}
],
"source": [
"ginomena = matrix([[ v[i].dot_product(v[j]) for i in range(len(v))] for j in range(len(v))]);\n",
"print ginomena"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Από τον προηγούμενο πίνακα παρατηρούμε το μπλοκ με τα μηδενικά στοιχεία (το ότι ο παραπάνω πίνακας είναι συμμετρικός επάγεται από την συμμετρική ιδιότητα του εσωτερικού γινομένου $< {\\rm v},{\\rm w} >=< {\\rm w}, {\\rm v} >$), από όπου συμπεραίνουμε ότι οι υπόχωροι $W$ και $W^\\perp$ είναι κάθετοι μεταξύ τους. \n",
"Όμως τα διανύσματα ${\\rm v}_1,{\\rm v}_2$ και ${\\rm v}_3,{\\rm v}_4$ που παράγουν τους υπόχωρους $W$ και $W^\\perp$, αντίστοιχα, δεν είναι κάθετα στους υπόχωρους αυτούς, αφού $< {\\rm v}_1,{\\rm v}_2 >=2$ και $< {\\rm v}_3,{\\rm v}_4 >=1$. Με την διαδικασία Gram-Schmidt η βάση $v=\\lbrace {\\rm v}_1,{\\rm v}_2,{\\rm v}_3,{\\rm v}_4\\rbrace$ του $\\mathbb{R}^4=W+W^\\perp$, μπορεί να γίνει ορθοκανονική. Πράγματι,\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1/3*sqrt(3), 0, 1/3*sqrt(3), 1/3*sqrt(3)), (1/5*sqrt(5/3), 3/5*sqrt(5/3), -2/5*sqrt(5/3), 1/5*sqrt(5/3)), (1/2*sqrt(2), 0, 0, -1/2*sqrt(2)), (-1/5*sqrt(5/2), 2/5*sqrt(5/2), 2/5*sqrt(5/2), -1/5*sqrt(5/2))]\n"
]
}
],
"source": [
"e = [v[0]/norm(v[0])]\n",
"for j in [1..len(v)-1]:\n",
" r = v[j] - sum(v[j].dot_product(e[k])*e[k] for k in [0..len(e)-1])\n",
" normr = norm(r)\n",
" e.append(r/norm(r));\n",
"print e"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 0 0 0]\n",
"[0 1 0 0]\n",
"[0 0 1 0]\n",
"[0 0 0 1]\n"
]
}
],
"source": [
"ginomena = matrix([[ e[i].dot_product(e[j]) for i in range(len(e))] for j in range(len(e))]);\n",
"print ginomena"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Οπότε η ορθοκανονική βάση του $\\mathbb{R}^4$ με ${\\rm span}({\\rm v}_1,{\\rm v}_2) = {\\rm span}({\\rm e}_1,{\\rm e}_2)$ και ${\\rm span}({\\rm v}_3,{\\rm v}_4) = {\\rm span}({\\rm e}_3,{\\rm e}_4)$ είναι η
\n",
"$$\\textstyle {\\rm e}_1 = \\frac{1}{\\sqrt{3}}(1,0,1,1)\\,, \\quad \n",
"{\\rm e}_2 = \\frac{1}{\\sqrt{15}}(1,3,-2,1)\\,,\\quad\n",
"{\\rm e}_3 = \\frac{1}{\\sqrt{2}}(1,0,0,-1)\\,, \\quad \n",
"{\\rm e}_4 = \\frac{1}{\\sqrt{10}}(-1,2,2,-1)\\,.\\quad\n",
"$$\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"### 5.2.2 Ορθογώνιο συμπλήρωμα και προβλήματα ελαχιστοποίησης\n",
"\n",
"Ορθογώνιο συμπλήρωμα
\n",
" \n",
"Θεωρούμε έναν διανυσματικό υπόχώρο $U$ ενός διανυσματικού χώρου $V$, και ${\\rm e}_1, {\\rm e}_2\\,\\ldots {\\rm e}_m$ μια ορθοκανονική βάση του $U$.
\n",
"Το ορθογώνιο συμπλήρωμα του $U$, συμβολίζεται με $U^\\perp$, και είναι το σύνολο όλων των διανυσμάτων του $V$, τα οποία είναι ορθογώνια σε κάθε διάνυσμα στον $U$:
\n",
"$$U^\\perp = \\left\\lbrace {\\rm v} \\in V\\,:\\,\\, < {\\rm v}, {\\rm u} > = 0, \\quad \\forall {\\rm u}\\in U \\right\\rbrace.$$
\n",
"
\n",
"Ευθύ άθροισμα ενός υπόχωρου και του ορθογώνιου συμπλήρωματός του.
\n",
" \n",
"Αν $U$ υπόχωρος ενός διανυσματικού χώρου $V$, τότε
\n",
"$$ V = U \\oplus U^\\perp\\,.$$\n",
"Πράγματι, αν ο $U$ έχει ορθοκανονική βάση τα διανύσματα ${\\rm e}_1, {\\rm e}_2\\,\\ldots {\\rm e}_m$ τότε το τυχαίο διάνυσμα ${\\rm v} \\in V$, γράφεται σαν
\n",
"$$ {\\rm v} = \\underbrace{< {\\rm v} , {\\rm e}_1 > \\, {\\rm e}_1 + \\cdots + < {\\rm v} , {\\rm e}_m > \\, {\\rm e}_m }_{{\\rm u}\\, \\in \\,U}+ \\underbrace{{\\rm v} - < {\\rm v} , {\\rm e}_1 > \\, {\\rm e}_1 - \\cdots - < {\\rm v} , {\\rm e}_m > \\, {\\rm e}_m}_{{\\rm w} \\, \\in \\, U^\\perp} \\,. \\qquad\\qquad (*)$$\n",
"Επειδή
\n",
"$$ <{\\rm w} , {\\rm e}_j >\\,=\\, < {\\rm v}, {\\rm e}_j > - < {\\rm v}, {\\rm e}_j >\\, =\\,0 \\,,$$
\n",
"το ${\\rm w}$ είναι ορθογώνιο σε κάθε διάνυσμα στο ${\\rm span}( {\\rm e}_1,\\ldots {\\rm e}_m)$, δηλαδή ${\\rm w} \\in U^\\perp$, και προφανώς ${\\rm u} \\in U$. Επιπλέον, επειδή $U \\cap U^\\perp =\\lbrace 0 \\rbrace$, τότε $V = U \\oplus U^\\perp\\,.$\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ορθογώνια προβολή, $P_U$
\n",
" \n",
"Υποθέτουμε ότι ο $U$ είναι υπόχωρος ενός διανυσματικού χώρου $V$. Η ορθογώνια προβολή του $V$ στο $U$, είναι ο γραμμικός τελεστής $P_U$ που ορίζεται ως εξής:
\n",
"Για τυχαίο ${\\rm v} \\in V$, γράφουμε ${\\rm v} = {\\rm u} + {\\rm w}$, όπου ${\\rm u} \\in U$ και \n",
"${\\rm w}\\in U^\\perp$. Τότε $P_U ({\\rm v}) = {\\rm u}$.
\n",
"Από την προηγούμενη σχέση $(*)$, είναι προφανές ότι
\n",
"$$ P_U ({\\rm v}) \\,= \\,< {\\rm v} , {\\rm e}_1 > \\, {\\rm e}_1 + \\cdots + < {\\rm v} , {\\rm e}_m > \\, {\\rm e}_m \\,.$$
\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ελαχιστοποίηση της απόστασης από έναν υπόχωρο
\n",
" \n",
"Συχνά ανακύπτει το ακόλουθο πρόβλημα:
\n",
"Δοσμένου ενός υπόχωρου $U$ ενός διανυσματικού χώρου $V$ και ενός διανύσματος (σημείου) ${\\rm v} \\in V$, να βρεθεί το διάνυσμα ${\\rm u} \\in U$ τέτοιο ώστε η απόσταση $ \\left\\lVert {\\rm v} - {\\rm u} \\right\\rVert$, να είναι όσο το δυνατόν μικρότερη.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"
\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Η λύση του προβλήματος αυτού είναι να πάρουμε \n",
"$${\\rm u} = P_U({\\rm v})\\,.$$
\n",
"Πράγματι, ας υποθέσουμε ότι $U$ είναι ένας υπόχωρος του $V$, ${\\rm v} \\in V$, και ${\\rm u} \\in U$. Τότε
\n",
"$$ \\left\\lVert {\\rm v} - P_U({\\rm v}) \\right\\rVert^2 \\leq \n",
"\\left\\lVert {\\rm v} - P_U({\\rm v}) \\right\\rVert^2 + \\left\\lVert P_U({\\rm v}) - {\\rm u} \\right\\rVert^2\n",
"\\quad (\\,\\,{\\mathrm επειδή}\\quad \\left\\lVert P_U({\\rm v}) - {\\rm u} \\right\\rVert^2 \\geq 0 \\,\\,) \\qquad\\qquad\\qquad\\qquad\\qquad\n",
"$$
\n",
"$$ = \\left\\lVert {\\rm v} - P_U({\\rm v}) + (P_U({\\rm v}) - {\\rm u}) \\right\\rVert^2 \\quad\n",
"\\quad(\\,\\,{\\mathrm επειδή}\\quad ({\\rm v} - P_U({\\rm v}) ) \\perp (P_U({\\rm v}) - {\\rm u}) \\,\\,)$$
\n",
"$$ = \\left\\lVert {\\rm v} - {\\rm u} \\right\\rVert^2 \\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad$$
\n",
"Παίρνοντας τετραγωνικές ρίζες στην προηγούμενη ανισότητα έχουμε $ \\left\\lVert {\\rm v} - P_U({\\rm v}) \\right\\rVert \\leq \\left\\lVert {\\rm v} - {\\rm u} \\right\\rVert$, με την ισότητα να επιτυγχάνεται αν και μόνο αν
\n",
"$${\\rm u} = P_U({\\rm v})$$\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Το τελευταίο αποτέλεσμα μαζί με την ακόλουθη σχέση
\n",
"$$ P_U ({\\rm v}) \\,= \\,< {\\rm v} , {\\rm e}_1 > \\, {\\rm e}_1 + \\cdots + < {\\rm v} , {\\rm e}_m > \\, {\\rm e}_m \\,,$$
\n",
"χρησιμοποιούνται για να υπολογίζουμε, με ρητό τρόπο, λύσεις σε προβλήματα ελαχιστοποίησης.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Παράδειγμα
\n",
" \n",
"Στον $\\mathbb{R}^4$, έστω
\n",
"$$ U={\\rm span}( \\, (1,1,0,0)\\, , \\,(1,1,1,2) \\,)\\,. $$
\n",
"Να βρεθεί ${\\rm u}\\in U$, τέτοιο ώστε η $\\left\\lVert {\\rm u} - (1,2,3,4) \\right\\rVert$, να είναι όσο το δυνατόν μικρότερη.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Λύση
\n",
" \n",
"Υπολογίζουμε μια ορθοκανονική βάση του υπόχωρου $U$, με την διαδικασία Gram-Schmidt\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"spanU = [vector([1,1,0,0]), vector([1,1,1,2]) ]"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1/2*sqrt(2), 1/2*sqrt(2), 0, 0), (0, 0, 1/5*sqrt(5), 2/5*sqrt(5))]\n"
]
}
],
"source": [
"e = [spanU[0]/norm(spanU[0])]\n",
"for j in [1..len(spanU)-1]:\n",
" r = spanU[j] - sum(spanU[j].dot_product(e[k])*e[k] for k in [0..len(e)-1])\n",
" normr = norm(r)\n",
" e.append(r/norm(r));\n",
"print e"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"v = vector([1,2,3,4]) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Η λύση είναι \n",
"$$ {\\rm u} = P_U ({\\rm v}) \\,= \\,< {\\rm v} , {\\rm e}_1 > \\, {\\rm e}_1 \\,+\\, < {\\rm v} , {\\rm e}_2 > \\, {\\rm e}_2 \\,,$$
\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3/2, 3/2, 11/5, 22/5)\n"
]
}
],
"source": [
"u = sum(v.dot_product(e[k])*e[k] for k in [0..len(e)-1]); print u"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"δηλαδή το διάνυσμα\n",
"$$ {\\rm u} = (\\frac{3}{2} \\,, \\frac{3}{2}\\,, \\frac{11}{5}\\,, \\frac{22}{5} )\\,.$$
\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Παράδειγμα
\n",
" \n",
"Να βρεθεί η απόσταση $D$ του σημείου ${\\rm y} = (2,4,-5)$ από το επίπεδο $\\Pi$, το οποίο διέρχεται από το σημείο ${\\rm x}_0 = (2,1,3)$, και είναι παράλληλο προς τα διανύσματα ${\\rm v}_1=(-1,-2,-1)$ και ${\\rm v}_2=(1,1,-2)$.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Λύση
\n",
" \n",
"Το επίπεδο $\\Pi$ δεν είναι υπόχωρος του $\\mathbb{R}^3$, αφού δεν διέρχεται από το σημείο $(0,0,0)$. Αυτό είναι εύκολο να το δούμε γιατί η εξίσωση του επιπέδου είναι η
\n",
"$$ 5(x-2)-3(y-1)+(z-3)=0\\,.$$
\n",
"Έστω $\\Pi_0 = {\\rm span}({\\rm v}_1,{\\rm v}_2)$. Τότε $\\Pi = \\Pi_0 + {\\rm x}_0$, οπότε η απόσταση του σημείου ${\\rm y}$ από το επίπεδο $\\Pi$, είναι η ίδια με την απόσταση του σημείου ${\\rm y}-{\\rm x}_0$, από το επίπεδο $\\Pi_0$. Εφαρμόζουμε την διαδικασία Gram-Schmidt στα ${\\rm v}_1,{\\rm v}_2$ και παίρνουμε \n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"v = [vector([-1,-2,-1]), vector([1,1,-2]) ]"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(-1/6*sqrt(6), -1/3*sqrt(6), -1/6*sqrt(6)), (1/7*sqrt(35/6), 4/35*sqrt(35/6), -13/35*sqrt(35/6))]\n"
]
}
],
"source": [
"e = [v[0]/norm(v[0])]\n",
"for j in [1..len(v)-1]:\n",
" r = v[j] - sum(v[j].dot_product(e[k])*e[k] for k in [0..len(e)-1])\n",
" normr = norm(r)\n",
" e.append(r/norm(r));\n",
"print e"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(0, -5, 2)\n"
]
}
],
"source": [
"y = vector([2,-4,5]); x0 = vector([2,1,3]) ; yx0 = y - x0; print yx0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Το σημείο του επιπέδου $\\Pi_0$ που ελαχιστοποιεί το μήκος (απόσταση) του $\\Pi_0$ από το σημείο ${\\rm y}-{\\rm x}_0$, είναι το
\n",
"$$ {\\rm u} \\,= \\,< {\\rm y} - {\\rm x}_0 , {\\rm e}_1 > \\, {\\rm e}_1 \\,+\\, < {\\rm y} - {\\rm x}_0 , {\\rm e}_2 > \\, {\\rm e}_2 \\,.$$
\n",
"Οπότε η ζητούμενη απόσταση $D$, είναι απλά η $D= \\left\\lVert {\\rm u} - ({\\rm y}-{\\rm x}_0) \\right\\rVert $\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"17*sqrt(1/35)\n"
]
}
],
"source": [
"u = sum(yx0.dot_product(e[k])*e[k] for k in [0..len(e)-1]); print norm(u-yx0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"δηλαδή $D= \\frac{17}{\\sqrt{35}} \\,.$\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5.3 Προσέγγιση συνεχών συναρτήσεων με πολυώνυμα"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Θεωρούμε τον (απειροδιάστατο) διανυσματικό χώρο $C_{\\mathbb{R}}[a,b]$ των συνεχών πραγματικών συναρτήσεων στο διάστημα $[a,b]$, με το εσωτερικό γινόμενο
\n",
"$$ < f, g > = \\int_a^b \\,f(x)\\,g(x) \\, {\\rm d} x\\,.$$
\n",
"Στον χώρο αυτό θεωρούμε τον υπόχωρο ${\\cal P}_m(\\mathbb{R})$ των πολυωνύμων με συντελεστές στους πραγματικούς αριθμούς, με βαθμό $\\leq m$, όπου $m$ μη-αρνητικός ακέραιος. Προφανώς
\n",
"$$ {\\cal P}_m(\\mathbb{R}) = {\\rm span} (\\,1\\,,\\,x\\,,\\,x^2\\,,\\,\\ldots\\,,\\,x^m\\,)\\,, $$
\n",
"και για κάθε δοσμένο μη-αρνητικό ακέραιο $m$, ο ${\\cal P}_m(\\mathbb{R}) $ είναι ένας διανυσματικός χώρος πεπερασμένης διάστασης.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Ένα πρόβλημα προσέγγισης μιας συνεχούς συνάρτησης σε κάποιο διάστημα, με πολυώνυμα, μπορεί να τεθεί ως εξής:
\n",
"Να βρεθεί ένα πολυώνυμο ${\\rm u}$ βαθμού π.χ. $\\leq 5$, με πραγματικούς συντελεστές, το οποίο προσεγγίζει την συνεχή συνάρτηση ${\\rm v}(x)=\\sin x$, όσο το δυνατόν καλύτερα στο διάστημα $[-\\pi,\\pi]$, με την έννοια ότι ο αριθμός
\n",
"$$ \\left\\lVert \\sin x - u \\right\\rVert ^2 = \\int_{-\\pi}^{\\pi} \\left|\\sin x -{\\rm u} \\right|^2 \\, {\\rm d} x\\,,$$
\n",
"να είναι όσο το δυνατόν μικρότερος.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Το πρόβλημα αυτό, σύμφωνα με όσα έχουμε πει στα παραπάνω, μπορεί να επαναδιατυπωθεί ως εξής:
\n",
"Έστω ${\\rm v} \\in C_{\\mathbb{R}}[-\\pi,\\pi]$ μια συνάρτηση ορισμένη ως ${\\rm v}(x) = \\sin x$.\n",
"Έστω $U={\\cal P}_5(\\mathbb{R})$ ο υπόχωρος του $C_{\\mathbb{R}}[-\\pi,\\pi]$ που αποτελείται από τα πολυώνυμα με πραγματικούς συντελεστές και βαθμό $\\leq 5$. Να βρεθεί ${\\rm u} \\in U$, τέτοιο ώστε το $\\left\\lVert {\\rm v} - {\\rm u} \\right\\rVert$ να είναι όσο το δυνατόν μικρότερο.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Για τον υπολογισμό της λύσης του προβλήματος αυτού, πρώτα εφαρμόζουμε την διαδικασία ορθοκανονικοποίησης στην βάση $\\lbrace 1,x,x^2,x^3,x^4,x^5 \\rbrace$ του $U$, καθορίζοντας μια ορθοκανονική βάση \n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1/2*sqrt(2)/sqrt(pi), 3/2*sqrt(2/3)*x/pi^(3/2), -5/4*sqrt(2/5)*(pi^2 - 3*x^2)/pi^(5/2), -7/8*sqrt(2/7)*(3*sqrt(3)*sqrt(2)*sqrt(2/3)*pi^2*x - 10*x^3)/pi^(7/2), 3/16*sqrt(2)*(5*sqrt(5)*sqrt(2)*sqrt(2/5)*pi^2*(pi^2 - 3*x^2) - 7*pi^4 + 35*x^4)/pi^(9/2), -11/32*sqrt(2/11)*(27*sqrt(3)*sqrt(2)*sqrt(2/3)*pi^4*x - 126*x^5 - 7*sqrt(7)*sqrt(2)*sqrt(2/7)*pi^2*(3*sqrt(3)*sqrt(2)*sqrt(2/3)*pi^2*x - 10*x^3))/pi^(11/2)]\n"
]
}
],
"source": [
"v=[x^k for k in range(6)]\n",
"(a,b)=(-pi,pi)\n",
"e = [v[0]/sqrt(integrate(v[0]^2,(x,a,b)))]\n",
"for j in [1..len(v)-1]:\n",
" r = v[j] - sum(integrate(v[j]*e[k],(x,a,b))*e[k] for k in [0..len(e)-1])\n",
" normr = sqrt(integrate(r^2,(x,a,b)))\n",
" e.append(r/normr)\n",
"print e"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Το αποτέλεσμα μπορεί να διαβαστεί με πιο καθαρό μαθηματικό συμβολισμό χρησιμοποιώντας την παρακάτω εντολή με την οποία τυπώνουμε την ορθοκανονική βάση που κατασκευάσαμε με την διαδικασία Gram-Schmidt.\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
"1/2*sqrt(2)/sqrt(pi)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"1/2*sqrt(3)*sqrt(2)*x/pi^(3/2)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"-1/4*sqrt(5)*sqrt(2)*(pi^2 - 3*x^2)/pi^(5/2)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"-1/4*sqrt(7)*sqrt(2)*(3*pi^2 - 5*x^2)*x/pi^(7/2)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"3/16*sqrt(2)*(3*pi^4 - 30*pi^2*x^2 + 35*x^4)/pi^(9/2)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"1/16*sqrt(11)*sqrt(2)*(15*pi^4 - 70*pi^2*x^2 + 63*x^4)*x/pi^(11/2)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for k in [0..len(e)-1]:\n",
" e[k].factor().show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Όπως στα προηγούμενα, η λύση ${\\rm u}$ που αναζητούμε είναι η ${\\rm u} = P_U({\\rm v})$, δηλαδή\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"u = sum(integrate(sin(x)*e[k],(x,a,b))*e[k] for k in [0..len(e)-1])"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.00564311797634682*x^5 - 0.155271410633429*x^3 + 0.987862135574674*x\n"
]
}
],
"source": [
"R=RR[x]\n",
"ur = R(u); print ur"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Για να δούμε πόσο καλή είναι η προσέγγιση της συνάρτησης $\\sin x$ με το παραπάνω πολυώνυμο στο διάστημα $[-\\pi,\\pi]$ απεικονίζουμε και τις δυο συναρτήσεις στο ίδιο γραφικό\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"Graphics object consisting of 2 graphics primitives"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"psin = plot(sin(x), (x,-pi-0.5,pi+0.5),color='blue',legend_label='$\\mathbf{v} = \\sin\\,x$');\n",
"pu = plot(ur, -pi-0.5,pi+0.5,color='red',legend_label='$\\mathbf{u}=P_{U}({\\mathbf{v}})\\,,\\, U={\\cal P}_5(\\mathbb{R})$'); \n",
"(psin+pu).show(figsize=5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Μια άλλη γνωστή προσέγγιση της συνάρτησης $\\sin x$ με πολυώνυμο βαθμού 5, είναι το πολυώνυμο Taylor τάξης 5, κοντά στο 0.\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1/120*x^5 - 1/6*x^3 + x\n"
]
}
],
"source": [
"tsin = taylor(sin(x),x,0,5) ; print tsin"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Για να συγκρίνουμε πόσο καλή είναι η προσέγγιση της $\\sin x$ με το πολυώνυμο Taylor στο διάστημα $[-\\pi,\\pi]$ και με το πολυώνυμο ${\\rm u}$ που βρήκαμε με την γραμμική άλγεβρα απεικονίζουμε και τις τρεις συναρτήσεις στο ίδιο γραφικό.\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nDot1AAAAAElFTkSuQmCC\n",
"text/plain": [
"Graphics object consisting of 3 graphics primitives"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"psin = plot(sin(x), (x,-pi-0.5,pi+0.5),color='blue',legend_label='$\\sin\\,x$');\n",
"pu = plot(ur, -pi-0.5,pi+0.5,color='red',legend_label='$\\mathbf{u}$'); \n",
"ptsin = plot(tsin,-pi,pi,color='green',legend_label='$\\mathrm{Taylor} \\,\\,\\sin \\,x\\,\\,o(5)$')\n",
"(psin+pu+ptsin).show(figsize=5)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.141120008059867\n",
"0.142535987873723\n",
"0.525000000000000\n"
]
}
],
"source": [
"print sin(3.);\n",
"print ur(x=3).n()\n",
"print tsin(x=3).n()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Παίρνοντας $x=3$, το πολυώνυμο ${\\rm u}$ προσεγγίζει την ακριβή τιμή $\\sin 3$, με λάθος περίπου ίσο με $0.001$, ενώ το λάθος της προσέγγισης του πολυωνύμου Taylor είναι εκατοντάδες φορές μεγαλύτερο! Μόνο κοντά στο $x=0$ το πολυώνυμο Taylor προσεγγίζει την $\\sin x$ ικανοποιητικά.
Η γραμμική άλγεβρα μας βοήθησε να ανακαλύψουμε μια νέα προσέγγιση της συνάρτησης $\\sin x$ η οποία βελτιώνει την προσέγγιση που μάθαμε στον απειροστικό λογισμό. Όμως, δίχως την δυνατότητα που μας παρέχει το Sage να εκτελούμε δίχως λάθη συμβολικούς κι αριθμητικούς υπολογισμούς είναι εξαιρετικά επίπονο, αν όχι ακατόρθωτο, να υλοποιήσουμε στην πράξη τα θεωρητικά αποτελέσματα.\n",
"
"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "SageMath 7.5.1",
"language": "",
"name": "sagemath"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 0
}