{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "




\n", "


\n", "# Κεφάλαιο 5\n", "
\n", "




" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Γραμμική Άλγεβρα " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5.1 Βασικές έννοιες της γραμμικής άλγεβρας στο Sage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Το Sage μας παρέχει όλες τις καθιερωμένες μαθηματικές έννοιες της γραμμικής άλγεβρας, όπως το χαρακτηριστικό και ελάχιστο πολυώνυμο, την ανηγμένη κλιμακωτή μορφή, διάφορες αναλύσεις ενός πίνακα κλπ.

\n", "\n", "Η δημιουργία διανυσμάτων και πινάκων στο Sage γίνεται με άμεσο και φυσικό τρόπο\n", "

" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0, 0, 0)\n", "(-9, 1, -2)\n" ] } ], "source": [ "A = Matrix([[1,2,3],[3,2,1],[1,1,1]])\n", "w = vector([1,1,-4])\n", "print w*A; print A*w" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Στο Sage ο πυρήνας ενός πίνακα $A$ (ή καλύτερα μιας γραμμικής απεικόνισης) είναι από προεπιλογή τα διανύσματα $w$, τέτοια ώστε $w\\,A=0$, δηλαδή με πολλαπλασιασμό από αριστερά. Για να πάρουμε το αποτέλεσμα με πολλαπλασιασμό από δεξιά χρησιμοποιούμε την μέθοδο right_kernel\n", "

" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Free module of degree 3 and rank 1 over Integer Ring\n", "Echelon basis matrix:\n", "[ 1 1 -4]\n", "Free module of degree 3 and rank 1 over Integer Ring\n", "Echelon basis matrix:\n", "[ 1 -2 1]\n" ] } ], "source": [ "print A.kernel() ; print A.right_kernel()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Για γρήγορη επίλυση γραμμικών συστημάτων χρησιμοποιούμε την μέθοδο solve_right. Υπολογίζοντας το\n", "A.solve_right(Y) το Sage μας επιστρέφει ένα διάνυσμα $X$ τέτοιο ώστε $A\\,X=Y$ :\n", "

" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(-2, 1, 0)\n", "True\n" ] } ], "source": [ "Y = vector([0, -4, -1])\n", "X = A.solve_right(Y); print X; print A*X==Y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Εναλλακτικά, αντί για την μέθοδο solve_right μπορούμε να χρησιμοποιήσουμε τον χαρακτήρα backslash ( \\ ) \n", "

" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(-2, 1, 0)\n" ] } ], "source": [ "print A\\Y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Αν το γραμμικό σύστημα δεν έχει λύση (είναι ασυμβίβαστο) τότε to Sage μας επιστρέφει λάθος\n", "

\n", "\n", "A.solve_right(w)\n", "......\n", "ValueError: matrix equation has no solutions " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Όταν θέλουμε να επιλύσουμε ένα σύστημα γραμμικών εξισώσεων, τo Sage έχει την εντολή pivots για να πάρουμε με γρήγορο τρόπο σε ποιές στήλες βρίσκονται οι εξαρτημένες μεταβλητές. Για παράδειγμα, με τα παρακάτω ορίζουμε τον πίνακα που απαρτίζεται από τους συντελεστές ενός γραμμικού συστήματος το οποίο θέλουμε να επιλύσουμε. Στη συνέχεια θεωρούμε τον επαυξημένο πίνακα και ζητάμε από το Sage να μας πει σε ποιές στήλες είναι οι εξαρτημένες μεταβλητές. Τέλος ζητάμε να μας δώσει την ανηγμένη κλιμακωτή μορφή του επαυξημένου πίνακα.\n", "

" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1 4 0 -1 0 7 -9| 3]\n", "[ 2 8 -1 3 9 -13 7| 9]\n", "[ 0 0 2 -3 -4 12 -8| 1]\n", "[ -1 -4 2 4 8 -31 37| 4]\n", "----------------------------------------\n", "σε ποιές στήλες είναι οι εξαρτημένες μεταβλητές: (0, 2, 3)\n", "----------------------------------------\n", "[ 1 4 0 0 2 1 -3| 4]\n", "[ 0 0 1 0 1 -3 5| 2]\n", "[ 0 0 0 1 2 -6 6| 1]\n", "[ 0 0 0 0 0 0 0| 0]\n" ] } ], "source": [ "coeff = matrix(QQ, [[ 1, 4, 0, -1, 0, 7, -9],\n", " [ 2, 8,-1, 3, 9, -13, 7],\n", " [ 0, 0, 2, -3, -4, 12, -8],\n", " [-1, -4, 2, 4, 8, -31, 37]])\n", "const = vector(QQ, [3, 9, 1, 4])\n", "aug = coeff.augment(const,subdivide=True)\n", "print aug ; print str('----------------------------------------')\n", "dependent = aug.pivots()\n", "print str('σε ποιές στήλες είναι οι εξαρτημένες μεταβλητές:'), dependent; \n", "print str('----------------------------------------')\n", "print aug.rref() ; \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Παρατηρούμε ότι υπάρχουν τρεις εξαρτημένες μεταβλητές, οπότε οι υπόλοιπες τέσσερις είναι οι ελεύθερες μεταβλητές του γραμμικού συστήματος. Για να βρούμε την γενική λύση του γραμμικού συστήματος υπολογίζουμε τον πυρήνα του πίνακα και ονομάζουμε τις ελεύθερες μεταβλητές με $c_0,c_1,c_2,c_3$ (προσοχή! να μην υπάρχει σύγχυση με τις μεταβλητές του γραμμικού συστήματος) και ζητάμε από το Sage μια οποιαδήποτε λύση του μη-ομογενούς συστήματος.\n", "

" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\n", "(1, 0, 0, 0, -3/7, -1/7, 0),\n", "(0, 1, 0, 0, -12/7, -4/7, 0),\n", "(0, 0, 1, 0, -3/7, -9/14, -1/2),\n", "(0, 0, 0, 1, 1/7, 13/28, 1/4)\n", "]\n" ] } ], "source": [ "null = coeff.right_kernel().basis(); print null" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(c0, c1, c2, c3, -3/7*c0 - 12/7*c1 - 3/7*c2 + 1/7*c3, -1/7*c0 - 4/7*c1 - 9/14*c2 + 13/28*c3, -1/2*c2 + 1/4*c3)\n" ] } ], "source": [ "v = [var('c' + '%0d' % k) for k in [0..len(null)-1] ] \n", "xhom = sum(v[k]*null[k] for k in [0..len(null)-1] ) ; print xhom" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(4, 0, 2, 1, 0, 0, 0)\n" ] } ], "source": [ "special = coeff\\const ; print special" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Η γενική λύση του γραμμικού συστήματος είναι η ειδική λύση και ένας γραμμικός συνδυασμός των διανυσμάτων του ομογενούς συστήματος.\n", "

" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(c0 + 4, c1, c2 + 2, c3 + 1, -3/7*c0 - 12/7*c1 - 3/7*c2 + 1/7*c3, -1/7*c0 - 4/7*c1 - 9/14*c2 + 13/28*c3, -1/2*c2 + 1/4*c3)\n", "True\n" ] } ], "source": [ "sol = special + xhom; print sol;\n", "print coeff*sol == const" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "Το Sage υπολογίζει τις ιδιοτιμές και τα αντίστοιχα ιδιοδιανύσματα ενός τετραγωνικού πίνακα:\n", "

" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[4, 0, 2, 2]\n" ] } ], "source": [ "A = matrix(QQ, [[ 204, 98, -26, -10],\n", " [-280, -134, 36, 14],\n", " [ 716, 348, -90, -36],\n", " [-472, -232, 60, 28]])\n", "print A.eigenvalues()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[(4, [\n", "(1, -1, 2, 5)\n", "], 1), (0, [\n", "(1, -4/3, 10/3, -4/3)\n", "], 1), (2, [\n", "(1, 0, 7, 2),\n", "(0, 1, 3, 2)\n", "], 2)]\n" ] } ], "source": [ "print A.eigenvectors_right()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "από όπου συμπεραίνουμε ότι ο πίνακας $A$ έχει τρεις ιδιοτιμές, τις $4,0,2$ με την ιδιοτιμή $\\lambda=2$ να έχει αλγεβρική πολλαπλότητα $2$, γιατί εμφανίζεται δυο φορές στην λίστα που μας δίνει το Sage. Η γεωμετρική πολλαπλότητα της ιδιοτιμής $\\lambda=2$ είναι ίση με την αλγεβρική της πολλαπλότητα γιατί στην ιδιοτιμή αυτή αντιστοιχούν δυο ιδιοδιανύσματα όπως φαίνεται στην αντίστοιχη λίστα των ιδιοδιανυσμάτων.

Eπιπλέον, το Sage υπολογίζει το ελάχιστο και το χαρακτηριστικό πολυώνυμο ενός πίνακα:\n", "

" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "το ελάχιστο πολυώνυμο του Α: x^3 - 6*x^2 + 8*x\n", "παραγοντοποίηση: (x - 4) * (x - 2) * x\n", "το χαρακτηριστικό πολυώνυμο του Α: x^4 - 8*x^3 + 20*x^2 - 16*x\n", "παραγοντοποίηση: (x - 4) * x * (x - 2)^2\n", "True True True True\n" ] } ], "source": [ "fmin = A.minpoly(); fchar = A.characteristic_polynomial(); \n", "print str('το ελάχιστο πολυώνυμο του Α:'), fmin;\n", "print str('παραγοντοποίηση:'), fmin.factor(); \n", "print str('το χαρακτηριστικό πολυώνυμο του Α:') , fchar;\n", "print str('παραγοντοποίηση:'), fchar.factor()\n", "print fmin(A).is_zero(), fchar(A).is_zero(), fmin.is_monic(), fmin.degree() \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 }