Λίστα Το διάνυζμα (vector) στο Mathematica είναι μια λίστα που έχει τα στοιχεία. Ο πίνακας ( matrix ) είναι λίστα απο τις λίστες. Η λίστα είναι ένα σύνολο αντικειμένων των οποίων τα σύμβολα περιέχονται μέσα σε άγκιστρα { }, και χωρίζονται με κόμμα. Μας βοηθούν στην αναπαράσταση διανυσμάτων, πινάκων και συλλογή αντικειμένων όπως μεταβλητές και εκφράσεις. In[7]:= {1, 2, 3, 4} Out[7]= {1, 2, 3, 4} In[8]:= {a, b, c} Out[8]= {a, b, c} In[9]:= Out[9]//MatrixForm= a b c {a, b, c} // MatrixForm In[10]:= Out[10]= {2, 0.5, x, Sin[x], Thessaloniki} {2, 0.5, x, Sin[x], Thessaloniki}
2 lecture2-report.nb Αυτό μοιάζει με μια μαθηματική σετ, αλλά υπάρχει διαφορά In[11]:= {1, 2} {2, 1} Out[11]= False In[12]:= {1, 2, 1} {1, 2} Out[12]= False Μπορεί να είναι λίστα απο λίστα In[13]:= {1, 2, {3, 4}, 5, 6} Out[13]= {1, 2, {3, 4}, 5, 6} Mathematica θεωρεί εκφράσεις με ενιαίο τρόπο. Κάθε έκφράση στο Mathematica έχει την ακόλουθη μορφή. head[arg1, arg2,..., argn] όπου το head και arg μπορούσαν να είναι οι ίδιοι εκφράσεις. Η πλήρης μορφή μιας λίστας δεν διαφέρει πολύ από την πλήρη μορφή ενός αθροίσματος ή ενος γινομένου. Η μοναδική διαφορά που υπάρχει είναι η διαφορετική επικεφαλίδα (Head[]), δηλαδή το πρόθεμα List, Plus και Times, που έχει η λίστα, το άθροισμα και το γίνομενο, αντίστοιχα.
lecture2-report.nb 3 In[14]:= Out[14]= {FullForm[{a, b, c}], FullForm[a + b + c], FullForm[a * b * c]} {List[a, b, c], Plus[a, b, c], Times[a, b, c]} Head[expr] Επιστρέφει τη επικεφαλίδα της παράστασης expr In[15]:= Out[15]= Head[{a, b, c}] List In[16]:= Head[a + b + c] Out[16]= Plus Apply[f, expr] or f @@ expr της παράστασης expr με την f Αντικαθιστά την επικεφαλίδα In[17]:= Out[17]= Apply[Plus, {a, b, c}] a + b + c In[18]:= Plus @@ {a, b, c} Out[18]= a + b + c In[19]:= List @@ Plus @@ {a, b, c} Out[19]= {a, b, c} Επειδή το Mathematica χρησιμοποιεί και για την είσοδο δεδομένων αλλά και για την έξοδο των δεδομένων τις λίστες
4 lecture2-report.nb θα πρέπει να μάθουμε την διαδικασία χειρισμού της λίστας ( διμιουργία λίστας, χειρισμός λίστας κ.λ.π.) Δημιουργία λίστας α) τρόπος. Η δημιουργία λίστας γίνεται με την προσθήκη των αντικειμένων που θέλουμε μεταξύ αγκίστρων { } In[20]:= {2, 3, 4, 5} Out[20]= {2, 3, 4, 5} β) τρόπος Δημιουργίας λίστας με την εντολή Range[ ] In[21]:= Range[2, 5] Out[21]= {2, 3, 4, 5} γ) τρόπος Με χρήση της εντολής Table[]
lecture2-report.nb 5 In[22]:= Table[i, {i, 2, 5}] Out[22]= {2, 3, 4, 5} δ) τρόπος Με χρήση της εντολής Array[] In[23]:= Clear[f] In[24]:= Array[f, {5}] Out[24]= {f[1], f[2], f[3], f[4], f[5]} ε) τρόπος Με χρήση της εντολής Random[] In[25]:= Random[Integer, {1, 10}] Out[25]= 7 In[26]:= Table[Random[Integer, {1, 10}], {i, 1, 5}] Out[26]= {1, 5, 8, 3, 3} Ασκηση Να ορίσετε την εξής συνάρτηση με τη βοήθεια Mathematica
6 lecture2-report.nb f(n)= 1 3 + 2 3 +... + n 3 Λύση In[27]:= Clear[f] In[28]:= f[n_] := Apply[Plus, Range[n] ^ 3] In[29]:= f[2] Out[29]= 9 In[30]:= Clear[f, n] In[31]:= In[32]:= f[n_] := Plus @@ (Range[n]^3) f[2] Out[32]= 9 In[33]:= In[34]:= In[35]:= Clear[f] f[n_] := Sum[i^3, {i, 1, n}] f[2] Out[35]= 9 In[36]:= In[37]:= Clear[f] n f[n_] := i 3 i=1
lecture2-report.nb 7 In[38]:= f[2] Out[38]= 9 Στοιχεία που αφορούν την λίστα Έστω έχουμε η λίστα στοιχείων In[39]:= lista = {a, b, {c, d}, e} Out[39]= {a, b, {c, d}, e} Το σύνολο των στοιχείων της λίστας είναι In[40]:= Length[lista] Out[40]= 4 ενώ η διάσταση του πίνακα ο οποίος αναπαριστάται από την λίστα είναι In[41]:= Dimensions[lista] Out[41]= {4} Επιλογεί στοιχείων της λίστα expr[[n]] or Part[expr, n] Επιστρέφει το n - στη μέλος στην σειρά της expr Έστω έχουμε η λίστα στοιχείων
8 lecture2-report.nb In[42]:= lista = {a, b, {c, d}, e} Out[42]= {a, b, {c, d}, e} και θέλουμε να πάρουμε το 2ο και 3ο στειχείο της λίστας. Τότε θα γράψουμαι In[43]:= Out[43]= lista[[2]] b In[44]:= lista[[3]] Out[44]= {c, d} το οποίο είναι πάλι λίστα. Αν από αυτή τη λίστα θέλω το δεύτερο στοιχείο της θα εχώ In[45]:= Out[45]= lista[[3]][[2]] d ή In[46]:= lista[[3, 2]] Out[46]= d ή In[47]:= Part[lista, 2] Out[47]= b In[48]:= Part[lista, 3] Out[48]= {c, d}
lecture2-report.nb 9 In[49]:= Part[lista, 3, 2] Out[49]= d expr[[1]] or First[expr] Δείνει το πρώτο στοιχείο της expr In[50]:= Out[50]= lista[[1]] a In[51]:= Out[51]= First[lista] a expr[[n]] or Last[expr] Δείνει το τελευταίο στοιχείο της expr In[52]:= Out[52]= lista[[4]] e In[53]:= Out[53]= Last[lista] e Μπορούμε να πάρουμε την λίστα χωρίς το πρώτο στοιχείο της Rest[list] list with its first element dropped In[54]:= lista Out[54]= {a, b, {c, d}, e}
10 lecture2-report.nb In[55]:= Rest[lista] Out[55]= {b, {c, d}, e} ή διαφορετικά Drop[list,n] list with its first n element dropped In[56]:= Drop[lista, 1] Out[56]= {b, {c, d}, e} Μπορούμε να πάρουμε την λίστα χωρίς το τελευτέο στοιχείο της Most[list] list with its last element removed In[57]:= lista Out[57]= {a, b, {c, d}, e} In[58]:= Out[58]= Most[lista] {a, b, {c, d}} ή διαφορετικά Drop[list,-n] list with its last n element dropped In[59]:= Drop[lista, -1] Out[59]= {a, b, {c, d}} Drop[list,{m,n}] list with elements m through n dropped ή αν θέλουμε να αφαιρέσουμε απο m-το μέχρει n-το στοιχεία της
In[60]:= ή αν θέλουμε να αφαιρέσουμε απο m-το μέχρει n-το στοιχεία της λίστας θα έχουμε lista Out[60]= {a, b, {c, d}, e} lecture2-report.nb 11 In[61]:= Drop[lista, {1, 4}] Out[61]= {} Σε αντιδιαστολή με την Drop έχουμε την Take η οποία παίρνει στοιχεία από μια λίστα και ακολουθεί την ίδια σύνταξη. Take[list,n] the first n elements in list In[62]:= lista Out[62]= {a, b, {c, d}, e} In[63]:= Take[lista, 2] Out[63]= {a, b} Take[list,-n] the last n elements in list In[64]:= Take[lista, -2] Out[64]= {{c, d}, e} Take[list,{m,n}] elements m through n (inclusive) In[65]:= Take[lista, {2, 3}] Out[65]= {b, {c, d}} Μπορούμε επίσης να επιλέξουμε τα στοιχεία
12 lecture2-report.nb Μπορούμε επίσης να επιλέξουμε τα στοιχεία της λίστας που ικανοποιούν κάποιο κριτήριο π.χ. Select[list, crit] Επιστρέφει εκείνα τα στοιχεία της λίστας list για τα οποία η συνθήκη crit είναι αληθής In[66]:= lista = Table[i, {i, 1, 10}] Out[66]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} In[67]:= Select[lista, PrimeQ] Out[67]= {2, 3, 5, 7} In[68]:= ή διαφορετικά Select[Range[10], PrimeQ[#] &] Out[68]= {2, 3, 5, 7} In[69]:= ή διαφορετικά Select[Range[10], PrimeQ] Out[69]= {2, 3, 5, 7} In[70]:= Select[lista, EvenQ] Out[70]= {2, 4, 6, 8, 10} In[71]:= ή διαφορετικά Select[Range[10], EvenQ[#] &] Out[71]= {2, 4, 6, 8, 10} Ασκηση
lecture2-report.nb 13 Εστω εχουμαι λιστα x = {a, b, {c, d}, e}. Απο την λιστα αυτη δημιουργηστε τη λιστα {a, b, c, d, e}. Λυση In[72]:= x = {a, b, {c, d}, e} Out[72]= {a, b, {c, d}, e} In[73]:= {x[[1]], x[[2]], x[[3, 1]], x[[3, 2]], x[[4]]} Out[73]= {a, b, c, d, e} In[74]:= ή διαφορετικά Flatten[x] Out[74]= {a, b, c, d, e} Ασκηση Πόσοι αριθμοί της μορφής 3n 5 + 11, όταν n ανήκει στο διάστημα [1,20], είναι πρώτοι αριθμοί; Λυση In[75]:= Clear[lista]
14 lecture2-report.nb In[76]:= lista = Table[3 * n^5 + 11, {n, 1, 20}] Out[76]= {14, 107, 740, 3083, 9386, 23 339, 50 432, 98 315, 177 158, 300 011, 483 164, 746 507, 1 113 890, 1 613 483, 2 278 136, 3 145 739, 4 259 582, 5 668 715, 7 428 308, 9 600 011} In[77]:= Out[77]= PrimeQ[lista] {False, True, False, True, False, True, False, False, False, False, False, True, False, True, False, True, False, False, False, False} In[78]:= Select[lista, PrimeQ] Out[78]= {107, 3083, 23 339, 746 507, 1 613 483, 3 145 739} In[79]:= Length[Select[lista, PrimeQ]] Out[79]= 6 Έλεγχος και αναζήτηση στοιχείων στη λίστα Θεωρείστε την παρακάτω λίστα In[80]:= Clear[lista] In[81]:= lista = {T, h, e, s, s, a, l, o, n, i, k, i} Out[81]= {T, h, e, s, s, a, l, o, n, i, k, i} και θέλουμε να εμφανίσουμε την θέση του στοιχείου i. Τότε θα γράψουμε
lecture2-report.nb 15 In[82]:= Position[lista, i] Out[82]= {{10}, {12}} ενώ αν θέλουμε να εμφανίσουμε πόσες φορές εμφανίστηκε το στοιχείου i στην λίστα θα γράψουμε. In[83]:= Length[Position[lista, i]] Out[83]= 2 ή διαφορετικά In[84]:= Count[lista, i] Out[84]= 2 Για να ελέγξουμε αν ένα στοιχείο π.χ. g, αποτελεί στοιχείο της λίστας θα πρέπει να γράψουμε In[85]:= MemberQ[lista, g] Out[85]= False ή αντίθετα αν θέλουμε να ελέγξουμε αν ένα στοιχείο π.χ. g, δεν εμφανίζεται στη λίστας θα πρέπει να γράψουμε In[86]:= FreeQ[lista, g] Out[86]= True Προσθήκη, αφαίρεση και μεταβολή στοιχείων σε μια λίστα In[122]:= Clear[lista, a, b, c, e, h]
16 lecture2-report.nb In[123]:= lista = {b, c, e, h} Out[123]= {b, c, e, h} Προσθήκη ενός στοιχείου στην αρχή της λίστας Prepend[list,element] add element at the beginning of list In[124]:= Prepend[lista, a] Out[124]= {a, b, c, e, h} In[90]:= lista Out[90]= {b, c, e, h} Προσθήκη ενός στοιχείου στην αρχή της λίστας και αντικατάσταση της λίστας In[91]:= PrependTo[lista, a] Out[91]= {a, b, c, e, h} In[92]:= lista Out[92]= {a, b, c, e, h} Προσθήκη ενός στοιχείου στο τέλος της λίστας Append[list,element] add element at the end of list In[93]:= Append[lista, f] Out[93]= {a, b, c, e, h, f}
lecture2-report.nb 17 In[94]:= lista Out[94]= {a, b, c, e, h} Προσθήκη ενός στοιχείου στο τέλος της λίστας και αντικατάσταση της λίστας In[95]:= AppendTo[lista, f] Out[95]= {a, b, c, e, h, f} Προσθήκη ενός στοιχείου σε συγκεκριμένη θέση της λίστας Insert[list,element,i] insert element at position i in list In[96]:= Insert[lista, f, 5] Out[96]= {a, b, c, e, f, h, f} In[97]:= RotateLeft[lista] Out[97]= {b, c, e, h, f, a} In[98]:= RotateRight[lista] Out[98]= {f, a, b, c, e, h} In[99]:= Reverse[lista] Out[99]= {f, h, e, c, b, a} In[100]:= Sort[{b, c, a}] Out[100]= {a, b, c}
18 lecture2-report.nb In[101]:= lista Out[101]= {a, b, c, e, h, f} Διαγραφή ενός στοιχείου από τη λίστα Delete[list,i] delete the element at position i in list In[102]:= Delete[lista, 5] Out[102]= {a, b, c, e, f} Αντικατάταση του πρώτου στοιχείου με z In[103]:= ReplacePart[lista, z, 1] Out[103]= {z, b, c, e, h, f} Συνδυασμός λιστών και χειρισμός συνόλων Έστω έχουμε οι παρακάτω δύο λίστες In[104]:= Clear[lista1, lista2] In[105]:= lista1 = {a, b, c, d}; In[106]:= lista2 = {b, d, e, g}; Μπορούμε να συνενώσουμε τις λίστες In[107]:= Join[lista1, lista2] Out[107]= {a, b, c, d, b, d, e, g} ή να τις ενώσουμε σύμφωνα με την θεωρία συνόλων In[108]:= Union[lista1, lista2] Out[108]= {a, b, c, d, e, g}
lecture2-report.nb 19 In[109]:= Μπορούμε να βρούμε τα σημεία τομής των δύο συνόλων Intersection[lista1, lista2] Out[109]= {b, d} Ασκηση Θεωρείστε το σύνολο των φυσικών αριθμών από το 1 έως το 20 In[110]:= Clear[lista1, lista2] In[111]:= lista1 = Table[i, {i, 1, 20}] Out[111]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} In[127]:= και το σύνολο των πρώτων αριθμών που είναι μικρότεροι από 20. lista2 = Table[Prime[i], {i, 1, PrimePi[20]}] Out[127]= {2, 3, 5, 7, 11, 13, 17, 19} In[113]:= Τότε το σύνολο των αριθμών της λίστας lista1 που δεν ανήκουν στο σύνολο στην λίστα lista2 είναι το ακόλουθο Complement[lista1, lista2] Out[113]= {1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20} Ασκηση Τι ψηφίο δεν εμφανίζεται ως το τελευταίο ψηφίο των πρώτων 20
20 lecture2-report.nb Τι ψηφίο εμφανίζεται ως το τελευταίο ψηφίο των πρώτων 20 αριθμών Fibonacci; Λυση using Map[f,expr] or f /@ In[114]:= Fibonacci /@ Range[20] Out[114]= {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765} In[115]:= IntegerDigits /@ Fibonacci /@ Range[20] Out[115]= {{1}, {1}, {2}, {3}, {5}, {8}, {1, 3}, {2, 1}, {3, 4}, {5, 5}, {8, 9}, {1, 4, 4}, {2, 3, 3}, {3, 7, 7}, {6, 1, 0}, {9, 8, 7}, {1, 5, 9, 7}, {2, 5, 8, 4}, {4, 1, 8, 1}, {6, 7, 6, 5}} In[116]:= Last /@ IntegerDigits /@ Fibonacci /@ Range[20] Out[116]= {1, 1, 2, 3, 5, 8, 3, 1, 4, 5, 9, 4, 3, 7, 0, 7, 7, 4, 1, 5} In[117]:= Union[Last /@ IntegerDigits /@ Fibonacci /@ Range[20]] Out[117]= {0, 1, 2, 3, 4, 5, 7, 8, 9} Το ψηφίο 6 δεν εμφανίζεται!!!! Αλλη λύση με το Mod[m,n] In[118]:= Mod[Fibonacci /@ Range[20], 10] Out[118]= {1, 1, 2, 3, 5, 8, 3, 1, 4, 5, 9, 4, 3, 7, 0, 7, 7, 4, 1, 5} In[119]:= Union[Mod[Fibonacci[Range[20]], 10]] Out[119]= {0, 1, 2, 3, 4, 5, 7, 8, 9}