diff --git a/pybooksrc/GNU-fdl.txt b/pybooksrc/GNU-fdl.txt new file mode 100644 index 0000000..2f7e03c --- /dev/null +++ b/pybooksrc/GNU-fdl.txt @@ -0,0 +1,451 @@ + + GNU Free Documentation License + Version 1.3, 3 November 2008 + + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The "publisher" means any person or entity that distributes copies of +the Document to the public. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no +other conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to +give them a chance to provide you with an updated version of the +Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other +documents released under this License, and replace the individual +copies of this License in the various documents with a single copy +that is included in the collection, provided that you follow the rules +of this License for verbatim copying of each of the documents in all +other respects. + +You may extract a single document from such a collection, and +distribute it individually under this License, provided you insert a +copy of this License into the extracted document, and follow this +License in all other respects regarding verbatim copying of that +document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions of the +GNU Free Documentation License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in +detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +11. RELICENSING + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the site +means any set of copyrightable works thus published on the MMC site. + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +"Incorporate" means to publish or republish a Document, in whole or in +part, as part of another Document. + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole or +in part into the MMC, (1) had no cover texts or invariant sections, and +(2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. diff --git a/pybooksrc/LICENSE.TXT b/pybooksrc/LICENSE.TXT new file mode 100644 index 0000000..6255263 --- /dev/null +++ b/pybooksrc/LICENSE.TXT @@ -0,0 +1,4 @@ +This Document is distributed under the GNU Free Documentation License. + +Author : Ajith Kumar B.P., Inter University Accelerator Centre, New Delhi 110067. +(bpajith@gmail.com, ajith@iuac.res.in) diff --git a/pybooksrc/Makefile b/pybooksrc/Makefile new file mode 100644 index 0000000..9210070 --- /dev/null +++ b/pybooksrc/Makefile @@ -0,0 +1,21 @@ +.SUFFIXES= .lyx .tex .pdf +DESTDIR= + +all: mapy.pdf + +clean: + rm -f *~ *.tex *.aux *.log *.pdf *.toc pics/*.eps + +install: + +%.tex: %.lyx + tmpHome=$$(mktemp -d); \ + HOME=$${tmpHome} lyx --export latex $<; \ + rm -rf $${tmpHome} + +%.pdf: %.tex + pdflatex $< + logfile=$$(echo $< | sed 's/tex/log/'); \ + while (grep Warning $${logfile}| grep -iq run); do \ + pdflatex $<; \ + done diff --git a/pybooksrc/mapy.lyx b/pybooksrc/mapy.lyx new file mode 100644 index 0000000..82b6b12 --- /dev/null +++ b/pybooksrc/mapy.lyx @@ -0,0 +1,18871 @@ +#LyX 1.5.5 created this file. For more info see http://www.lyx.org/ +\lyxformat 276 +\begin_document +\begin_header +\textclass book +\language american +\inputencoding auto +\font_roman default +\font_sans default +\font_typewriter default +\font_default_family default +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\paperfontsize default +\spacing single +\papersize custom +\use_geometry true +\use_amsmath 1 +\use_esint 0 +\cite_engine basic +\use_bibtopic false +\paperorientation portrait +\paperwidth 21cm +\paperheight 24cm +\leftmargin 3cm +\topmargin 1.5cm +\rightmargin 3cm +\bottommargin 1.5cm +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\defskip medskip +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\author "" +\author "" +\end_header + +\begin_body + +\begin_layout Standard + +\lang english +\begin_inset ERT +status open + +\begin_layout Standard + + +\backslash +thispagestyle{empty} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset VSpace 0.5in* +\end_inset + + +\end_layout + +\begin_layout Standard +\align center + +\size huge +Python for Education +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/ylm20.png + width 8cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center + +\shape italic +\size large +Learning Maths & Science using Python +\end_layout + +\begin_layout Standard +\align center + +\shape italic +\size large +and +\end_layout + +\begin_layout Standard +\align center + +\shape italic +\size large +writing them in LaTeX +\end_layout + +\begin_layout Standard +\begin_inset VSpace 0.5in +\end_inset + + +\end_layout + +\begin_layout Standard +\align center + +\size large +Ajith Kumar B.P. +\end_layout + +\begin_layout Standard +\align center + +\size large +Inter University Accelerator Centre +\end_layout + +\begin_layout Standard +\align center + +\size large +New Delhi 110067 +\end_layout + +\begin_layout Standard +\align center + +\size large +www.iuac.res.in +\end_layout + +\begin_layout Standard +\align center +\begin_inset VSpace 0.3in +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +June 2010 +\end_layout + +\begin_layout Standard + +\newpage + +\end_layout + +\begin_layout Standard +\align center +Preface +\end_layout + +\begin_layout Standard +\begin_inset Quotes eld +\end_inset + +Mathematics, rightly viewed, possesses not only truth, but supreme beauty + -- a beauty cold and austere, like that of sculpture, without appeal to + any part of our weaker nature, without the gorgeous trappings of painting + or music, yet sublimely pure, and capable of a stern perfection such as + only the greatest art can show +\begin_inset Quotes erd +\end_inset + +, wrote Bertrand Russell about the beauty of mathematics. + All of us may not reach such higher planes, probably reserved for Russels + and Ramanujans, but we also have beautiful curves and nice geometrical + figures with intricate symmetries, like fractals, generated by seemingly + dull equations. + This book attempts to explore it using a simple tool, the Python programming + language. +\end_layout + +\begin_layout Standard +I started using Python for the Phoenix project (www.iuac.res.in). + Phoenix was driven in to Python by Pramode CE (pramode.net) and I followed. + Writing this document was triggered by some of my friends who are teaching + mathematics at Calicut University. + +\end_layout + +\begin_layout Standard +In the first chapter, a general introduction about computers and high level + programming languages is given. + Basics of Python language, Python modules for array and matrix manipulation, + 2D and 3D data visualization, type-setting mathematical equations using + latex and numerical methods in Python are covered in the subsequent chapters. + Example programs are given for every topic discussed. + This document is meant for those who want to try out these examples and + modify them for better understanding. + Huge amount of material is already available online on the topics covered, + and the references to many resources on the Internet are given for the + benefit of the serious reader. +\end_layout + +\begin_layout Standard +This book comes with a live CD, containing a modified version of Ubuntu + GNU/Linux operating system. + You can boot any PC from this CD and practice Python. + Click on the 'Learn by Coding' icon on the desktop to browse through a + collection of Python programs, run any of them with a single click. + You can practice Python very easily by modifying and running these example + programs. + +\end_layout + +\begin_layout Standard +This document is prepared using LyX, a LaTeX front-end. + It is distributed under the GNU Free Documentation License (www.gnu.org). + Feel free to make verbatim copies of this document and distribute through + any media. + For the LyX source files please contact the author. +\end_layout + +\begin_layout Standard +Ajith Kumar +\end_layout + +\begin_layout Standard +IUAC , New Delhi +\end_layout + +\begin_layout Standard +ajith at iuac.res.in +\end_layout + +\begin_layout Standard + +\newpage + +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand tableofcontents + +\end_inset + + +\end_layout + +\begin_layout Chapter +Introduction +\end_layout + +\begin_layout Standard +Primary objective of this book is to explore the possibilities of using + Python language as a tool for learning mathematics and science. + The reader is not assumed to be familiar with computer programming. + Ability to think logically is enough. + Before getting into Python programming, we will briefly explain some basic + concepts and tools required. +\end_layout + +\begin_layout Standard +Computer is essentially an electronic device like a radio or a television. + What makes it different from a radio or a TV is its ability to perform + different kinds of tasks using the same electronic and mechanical components. + This is achieved by making the electronic circuits flexible enough to work + according to a set of instructions. + The electronic and mechanical parts of a computer are called the Hardware + and the set of instructions is called Software (or computer program). + Just by changing the Software, computer can perform vastly different kind + of tasks. + The instructions are stored in binary format using electronic switches. +\end_layout + +\begin_layout Section +Hardware Components +\end_layout + +\begin_layout Standard +Central Processing Unit (CPU), Memory and Input/Output units are the main + hardware components of a computer. + CPU +\begin_inset Foot +status collapsed + +\begin_layout Standard +The cabinet that encloses most of the hardware is called CPU by some, mainly + the computer vendors. + They are not referring to the actual CPU chip. +\end_layout + +\end_inset + + can be called the brain of the computer. + It contains a Control Unit and an Arithmetic and Logic Unit, ALU. + The control unit brings the instructions stored in the main memory one + by one and acts according to it. + It also controls the movement of data between memory and input/output units. + The ALU can perform arithmetic operations like addition, multiplication + and logical operations like comparing two numbers. +\end_layout + +\begin_layout Standard +Memory stores the instructions and data, that is processed by the CPU. + All types of information are stored as binary numbers. + The smallest unit of memory is called a binary digit or Bit. + It can have a value of zero or one. + A group of eight bits are called a Byte. + A computer has Main and Secondary types of memory. + Before processing, data and instructions are moved into the main memory. + Main memory is organized into words of one byte size. + CPU can select any memory location by using it's address. + Main memory is made of semiconductor switches and is very fast. + There are two types of Main Memory. + Read Only Memory and Read/Write Memory. + Read/Write Memory is also called Random Access Memory. + All computers contains some programs in ROM which start running when you + switch on the machine. + Data and programs to be stored for future use are saved to Secondary memory, + mainly devices like Hard disks, floppy disks, CDROM or magnetic tapes. +\end_layout + +\begin_layout Standard +The Input devices are for feeding the input data into the computer. + Keyboard is the most common input device. + Mouse, scanner etc. + are other input devices. + The processed data is displayed or printed using the output devices. + The monitor screen and printer are the most common output devices. +\end_layout + +\begin_layout Section +Software components +\end_layout + +\begin_layout Standard +An ordinary user expects an easy and comfortable interaction with a computer, + and most of them are least inclined to learn even the basic concepts. + To use modern computers for common applications like browsing and word + processing, all you need to do is to click on some icons and type on the + keyboard. + However, to write your own computer programs, you need to learn some basic + concepts, like the operating system, editors, compilers, different types + of user interfaces etc. + This section describes the basics from that point of view. +\end_layout + +\begin_layout Subsection +The Operating System +\end_layout + +\begin_layout Standard +Operating system (OS) is the software that interacts with the user and makes + the hardware resources available to the user. + It starts running when you switch on the computer and remains in control. + On user request, operating system loads other application programs from + disk to the main memory and executes them. + OS also provides a file system, a facility to store information on devices + like floppy disk and hard disk. + In fact the OS is responsible for managing all the hardware resources. +\end_layout + +\begin_layout Standard +GNU/Linux and MS Windows are two popular operating systems. + Based on certain features, operating systems can be classified as: +\end_layout + +\begin_layout Itemize +Single user, single process systems like MS DOS. + Only one process can run at a time. + Such operating systems do not have much control over the application programs. +\end_layout + +\begin_layout Itemize +Multi-tasking systems like MS Windows, where more than one processe can + run at a time. +\end_layout + +\begin_layout Itemize +Multi-user, multi-tasking systems like GNU/Linux, Unix etc. + More than one person can use the computer at the same time. +\end_layout + +\begin_layout Itemize +Real-time systems, mostly used in control applications, where the response + time to any external input is maintained under specified limits. + +\end_layout + +\begin_layout Subsection +The User Interface +\end_layout + +\begin_layout Standard +Interacting with a computer involves, starting various application programs + and managing them on the computer screen. + The software that manages these actions is called the user interface. + The two most common forms of user interface have historically been the + Command-line Interface, where computer commands are typed out line-by-line, + and the Graphical User Interface (GUI), where a visual environment (consisting + of windows, menus, buttons, icons, etc.) is present. + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/terminal.png + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +A GNU/Linux Terminal +\begin_inset LatexCommand label +name "fig:The-command-terminal" + +\end_inset + +. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsubsection +The Command Terminal +\end_layout + +\begin_layout Standard +To run any particular program, we need to request the operating system to + do so. + Under a Graphical User Interface, we do this by choosing the desired applicatio +n from a menu. + It is possible only because someone has added it to the menu earlier. + When you start writing your own programs, obviously they will not appear + in any menu. + Another way to request the operating system to execute a program is to + enter the name of the program (more precisely, the name of the file containing + it) at the Command Terminal. + On an Ubuntu GNU/Linux system, you can start a Terminal from the menu names + Applications->Accessories->Terminal. + Figure +\begin_inset LatexCommand ref +reference "fig:The-command-terminal" + +\end_inset + + shows a Terminal displaying the list of files in a directory (output of + the command 'ls -l' , the -l option is for long listing). +\end_layout + +\begin_layout Standard +The command processor offers a host of features to make the interaction + more comfortable. + It keeps track of the history of commands and we can recall previous commands, + modify and reuse them using the cursor keys. + There is also a completion feature implemented using the Tab key that reduces + typing. + Use the tab key to complete command and filenames. + To run +\shape italic +hello.py +\shape default + from our test directory, type +\shape italic +python h +\shape default + and then press the tab key to complete it. + If there are more than one file starting with 'h', you need to type more + characters until the ambiguity is removed. + Always use the up-cursor key to recall the previous commands and re-issue + it. +\end_layout + +\begin_layout Standard +The commands given at the terminal are processed by a program called the + +\shape italic +shell +\shape default +. + (The version now popular under GNU/Linux is called bash, the Bourne again + shell). + Some of the GNU/Linux commands are listed below. +\end_layout + +\begin_layout Itemize +top : Shows the CPU and memory usage of all the processes started. +\end_layout + +\begin_layout Itemize +cp filename filename : copies a file to another. +\end_layout + +\begin_layout Itemize +mv : moves files from one folder to another, or rename a file. +\end_layout + +\begin_layout Itemize +rm : deletes files or directories. + +\end_layout + +\begin_layout Itemize +man : display manual pages for a program. + For example 'man bash' will give help on the bash shell. + Press 'q' to come out of the help screen. +\end_layout + +\begin_layout Itemize +info : A menu driven information system on various topics. +\end_layout + +\begin_layout Standard +See the manual pages of 'mv', cp, 'rm' etc. + to know more about them. + Most of these commands are application programs, stored inside the folders + /bin or /sbin, that the shell starts for you and displays their output + inside the terminal window. +\end_layout + +\begin_layout Subsection +The File-system +\end_layout + +\begin_layout Standard +Before the advent of computers, people used to keep documents in files and + folders. + The designers of the Operating System have implemented the electronic counterpa +rts of the same. + The storage space is made to appear as files arranged inside folders (directory + is another term for folder). + A simplified schematic of the GNU/Linux file system is shown in figure + +\begin_inset LatexCommand ref +reference "fig:The-GNU/Linux-file" + +\end_inset + +. + The outermost directory is called 'root' directory and represented using + the forward slash character. + Inside that we have folders named bin, usr, home, tmp etc., containing different + type of files. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/linux-tree.png + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +The GNU/Linux file system tree +\begin_inset LatexCommand label +name "fig:The-GNU/Linux-file" + +\end_inset + +. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsubsection +Ownership & permissions +\end_layout + +\begin_layout Standard +On a multi-user operating system, application programs and document files + must be protected against any misuse. + This is achieved by defining a scheme of ownerships and permissions. + Each and every file on the system will be owned by a specific user. + The read, write and execute permissions can be assigned to them, to control + the usage. + The concept of +\shape italic +group +\shape default + is introduced to share files between a selected group of users. + +\end_layout + +\begin_layout Standard +There is one special user named +\shape italic +root +\shape default + (also called the system administrator or the super user) , who has permission + to use all the resources. + Ordinary user accounts, with a username and password, are created for everyone + who wants to use the computer. + In a multi-user operating system, like GNU/Linux, every user will have + one directory inside which he can create sub-directories and files. + This is called the 'home directory' of that user. + Home directory of one user cannot be modified by another user. + +\end_layout + +\begin_layout Standard +The operating system files are owned by +\shape italic +root +\shape default +. + The /home directory contains subdirectories named after every ordinary + user, for example, the user +\shape italic +fred +\shape default + owns the directory +\shape italic +/home/fred +\shape default + (fig +\begin_inset LatexCommand ref +reference "fig:The-GNU/Linux-file" + +\end_inset + +) and its contents. + That is also called the user's home directory. + Every file and directory has three types of permissions : read, write and + execute. + To view them use the 'ls -l ' command. + The first character of output line tells the type of the file. + The next three characters show the +\shape italic +rwx +\shape default + (read, write, execute) permissions for the owner of that file. + Next three for the users belonging to the same group and the next three + for other users. + A hyphen character (-) means the permission corresponding to that field + is not granted. + For example, the figure +\begin_inset LatexCommand ref +reference "fig:The-command-terminal" + +\end_inset + + shows a listing of five files: +\end_layout + +\begin_layout Enumerate +asecret.dat : read & write for the owner. + No one else can even see it. +\end_layout + +\begin_layout Enumerate +foo.png : rw for owner, but others can view the file. +\end_layout + +\begin_layout Enumerate +hello.py : rwx for owner, others can view and execute. +\end_layout + +\begin_layout Enumerate +share.tex : rw for owner and other members of the same group. +\end_layout + +\begin_layout Enumerate +xdata is a directory. + Note that execute permission is required to view contents of a directory. +\end_layout + +\begin_layout Standard +The system of ownerships and permissions also protects the system from virus + attacks +\begin_inset Foot +status collapsed + +\begin_layout Standard +Do not expect this from the MS Windows system. + Even though it allows to create users, any user ( by running programs or + viruses) is allowed to modify the system files. + This may be because it grew from a single process system like MSDOS and + still keeps that legacy. +\end_layout + +\end_inset + +. + The virus programs damage the system by modifying some application program. + On a true multi-user system, for example GNU/Linux, the application program + and other system files are owned by the root user and ordinary users have + no permission to modify them. + When a virus attempts to modify an application, it fails due to this permission + and ownership scheme. +\end_layout + +\begin_layout Subsubsection +Current Directory +\end_layout + +\begin_layout Standard +There is a working directory for every user. + You can create subdirectories inside that and change your current working + directory to any of them. + While using the command-line interface, you can use the 'cd' command to + change the current working directory. + Figure +\begin_inset LatexCommand ref +reference "fig:The-command-terminal" + +\end_inset + + shows how to change the directory and come back to the parent directory + by using double dots. + We also used the command 'pwd' to print the name of the current working + directory. + +\end_layout + +\begin_layout Section +Text Editors +\end_layout + +\begin_layout Standard +To create and modify files, we use different application programs depending + on the type of document contained in that file. + Text editors are used for creating and modifying plain text matter, without + any formatting information embedded inside. + Computer programs are plain text files and to write computer programs, + we need a text editor. + +\shape italic +'gedit' +\shape default + is a simple, easy to use text editor available on GNU/Linux, which provides + syntax high-lighting for several programming languages. +\end_layout + +\begin_layout Section +High Level Languages +\end_layout + +\begin_layout Standard +In order to solve a problem using a computer, it is necessary to evolve + a detailed and precise step by step method of solution. + A set of these precise and unambiguous steps is called an Algorithm. + It should begin with steps accepting input data and should have steps which + gives output data. + For implementing any algorithm on a computer, each of it's steps must be + converted into proper machine language instructions. + Doing this process manually is called Machine Language Programming. + Writing machine language programs need great care and a deep understanding + about the internal structure of the computer hardware. + High level languages are designed to overcome these difficulties. + Using them one can create a program without knowing much about the computer + hardware. +\end_layout + +\begin_layout Standard +We already learned that to solve a problem we require an algorithm and it + has to be executed step by step. + It is possible to express the algorithm using a set of precise and unambiguous + notations. + The notations selected must be suitable for the problems to be solved. + +\shape italic + A high level programming language is a set of well defined notations which + is capable of expressing algorithms. +\end_layout + +\begin_layout Standard +In general a high level language should have the following features. +\end_layout + +\begin_layout Enumerate +Ability to represent different data types like characters, integers and + real numbers. + In addition to this it should also support a collection of similar objects + like character strings, arrays etc. +\end_layout + +\begin_layout Enumerate +Arithmetic and Logical operators that acts on the supported data types. + +\end_layout + +\begin_layout Enumerate +Control flow structures for decision making, branching, looping etc. +\end_layout + +\begin_layout Enumerate +A set of syntax rules that precisely specify the combination of words and + symbols permissible in the language. +\end_layout + +\begin_layout Enumerate +A set of semantic rules that assigns a single, precise and unambiguous meaning + to each syntactically correct statement. +\end_layout + +\begin_layout Standard +Program text written in a high level language is often called the Source + Code. + It is then translated into the machine language by using translator programs. + There are two types of translator programs, the Interpreter and the Compiler. + +\shape italic +\size small +Interpreter reads the high level language program line by line, translates + and executes it. + Compilers convert the entire program in to machine language and stores + it to a file which can be executed. +\end_layout + +\begin_layout Standard +High level languages make the programming job easier. + We can write programs that are machine independent. + For the same program different compilers can produce machine language code + to run on different types of computers and operating systems. + BASIC, COBOL, FORTRAN, C, C++, Python etc. + are some of the popular high level languages, each of them having advantages + in different fields. + +\end_layout + +\begin_layout Standard +To write any useful program for solving a problem, one has to develop an + algorithm. + The algorithm can be expressed in any suitable high level language. + +\shape italic +Learning how to develop an algorithm is different from learning a programming + language. + +\color black + Learning a programming language means learning the notations, syntax and + semantic rules of that language +\color inherit +. + +\shape default + Best way to do this is by writing small programs with very simple algorithms. + After becoming familiar with the notations and rules of the language one + can start writing programs to implement more complicated algorithms. +\end_layout + +\begin_layout Section +On Free Software +\end_layout + +\begin_layout Standard +Software that can be used, studied, modified and redistributed in modified + or unmodified form without restriction is called Free Software. + In practice, for software to be distributed as free software, the human-readabl +e form of the program (the source code) must be made available to the recipient + along with a notice granting the above permissions. +\end_layout + +\begin_layout Standard +The free software movement was conceived in 1983 by Richard Stallman to + give the benefit of "software freedom" to computer users. + Stallman founded the Free Software Foundation in 1985 to provide the organizati +onal structure to advance his Free Software ideas. + Later on, alternative movements like Open Source Software came. +\end_layout + +\begin_layout Standard +Software for almost all applications is currently available under the pool + of Free Software. + GNU/Linux operating system, OpenOffice.org office suite, LaTeX typesetting + system, Apache web server, GIMP image editor, GNU compiler collection, + Python interpreter etc. + are some of the popular examples. + For more information refer to www.gnu.org website. +\end_layout + +\begin_layout Section +Exercises +\end_layout + +\begin_layout Enumerate +What are the basic hardware components of a computer. +\end_layout + +\begin_layout Enumerate +Name the working directory of a user named 'ramu' under GNU/Linux. +\end_layout + +\begin_layout Enumerate +What is the command to list the file names inside a directory (folder). +\end_layout + +\begin_layout Enumerate +What is the command under GNU/Linux to create a new folder. +\end_layout + +\begin_layout Enumerate +What is the command to change the working directory. +\end_layout + +\begin_layout Enumerate +Can we install more than one operating systems on a single hard disk. +\end_layout + +\begin_layout Enumerate +Name two most popular Desktop Environments for GNU/Linux. +\end_layout + +\begin_layout Enumerate +How to open a command window from the main menu of Ubuntu GNU/Linux. +\end_layout + +\begin_layout Enumerate +Explain the file ownership and permission scheme of GNU/Linux. +\end_layout + +\begin_layout Chapter +Programming in Python +\end_layout + +\begin_layout Standard +Python is a simple, high level language with a clean syntax. + It offers strong support for integration with other languages and tools, + comes with extensive standard libraries, and can be learned in a few days. + Many Python programmers report substantial productivity gains and feel + the language encourages the development of higher quality, more maintainable + code. + To know more visit the Python website. +\begin_inset Foot +status collapsed + +\begin_layout Standard +http://www.python.org/ +\end_layout + +\begin_layout Standard +http://docs.python.org/tutorial/ +\end_layout + +\begin_layout Standard +This document, example programs and a GUI program to browse through them + are at +\end_layout + +\begin_layout Standard +http://www.iuac.res.in/phoenix +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Getting started with Python +\end_layout + +\begin_layout Standard +To start programming in Python, we have to learn how to type the source + code and save it to a file, using a text editor program. + We also need to know how to open a Command Terminal and start the Python + Interpreter. + The details of this process may vary from one system to another. + On an Ubuntu GNU/Linux system, you can open the +\shape italic +Text Editor +\shape default + and the +\shape italic +Terminal +\shape default + from the Applications->Accessories menu. +\end_layout + +\begin_layout Subsection +Two modes of using Python Interpreter +\end_layout + +\begin_layout Standard +If you issue the command 'python', without any argument, from the command + terminal, the Python interpreter will start and display a +\shape italic + '>>>' +\shape default + prompt where you can type Python statements. + Use this method only for viewing the results of single Python statements, + for example to use Python as a calculator. + It could be confusing when you start writing larger programs, having looping + and conditional statements. + The preferred way is to enter your source code in a text editor, save it + to a file (with .py extension) and execute it from the command terminal + using Python. + A screen-shot of the Desktop with Text Editor and Terminal is shown in + figure +\begin_inset LatexCommand ref +reference "fig:Text-Editor-and" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/python_edit.png + lyxscale 50 + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Text Editor and Terminal Windows. +\begin_inset LatexCommand label +name "fig:Text-Editor-and" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +In this document, we will start writing small programs showing the essential + elements of the language without going into the details. + The reader is expected to run these example programs and also to modify + them in different ways.It is like learning to drive a car, you master it + by practicing. +\end_layout + +\begin_layout Standard +Let us start with a program to display the words +\emph on +\color black +Hello World +\emph default +\color inherit + on the computer screen. + This is the customary 'hello world' program. + There is another version that prints 'Goodbye cruel world', probably invented + by those who give up at this point. + The Python 'hello world' program is shown below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example. + hello.py +\end_layout + +\begin_layout LyX-Code + +\shape italic +\emph on +\color black +print 'Hello World' +\end_layout + +\begin_layout Standard +This should be entered into a text file using any text editor. + On a GNU/Linux system you may use the text editor like 'gedit' to create + the source file, save it as +\shape italic +\color black +hello.py +\shape default +\color inherit + . + The next step is to call the Python Interpreter to execute the new program. + For that, open a command terminal and (at the $ prompt) type: +\begin_inset Foot +status collapsed + +\begin_layout Standard +For quick practicing, boot from the CD provided with this book and click + on the learn-by-coding icon to browse through the example programs given + in this book. + The browser allows you to run any of them with a single click, modify and + save the modified versions. + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +$ python hello.py +\end_layout + +\begin_layout Section +Variables and Data Types +\end_layout + +\begin_layout Standard +As mentioned earlier, any high level programming language should support + several data types. + The problem to be solved is represented using variables belonging to the + supported data types. + Python supports numeric data types like integers, floating point numbers + and complex numbers. + To handle character strings, it uses the String data type. + Python also supports other compound data types like lists, tuples, dictionaries + etc. +\end_layout + +\begin_layout Standard +In languages like C, C++ and Java, we need to explicitly declare the type + of a variable. + This is not required in Python. + The data type of a variable is decided by the value assigned to it. + This is called dynamic data typing. + The type of a particular variable can change during the execution of the + program. + If required, one type of variable can be converted in to another type by + explicit type casting, like +\begin_inset Formula $y=float(3)$ +\end_inset + +. + Strings are enclosed within single quotes or double quotes. + +\end_layout + +\begin_layout Standard +The program +\shape italic +first.py +\shape default + shows how to define variables of different data types. + It also shows how to embed comments inside a program. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: first.py +\end_layout + +\begin_layout LyX-Code +''' +\end_layout + +\begin_layout LyX-Code +A multi-line comment, within a pair of three single quotes. +\end_layout + +\begin_layout LyX-Code +In a line, anything after a # sign is also a comment +\end_layout + +\begin_layout LyX-Code +''' +\end_layout + +\begin_layout LyX-Code +x = 10 +\end_layout + +\begin_layout LyX-Code +print x, type(x) # print x and its type +\end_layout + +\begin_layout LyX-Code +x = 10.4 +\end_layout + +\begin_layout LyX-Code +print x, type(x) +\end_layout + +\begin_layout LyX-Code +x = 3 + 4j +\end_layout + +\begin_layout LyX-Code +print x, type(x) +\end_layout + +\begin_layout LyX-Code +x = 'I am a String ' +\end_layout + +\begin_layout LyX-Code +print x, type(x) +\end_layout + +\begin_layout Standard +The output of the program is shown below. + Note that the type of the variable +\shape italic +x +\shape default + changes during the execution of the program, depending on the value assigned + to it. +\end_layout + +\begin_layout LyX-Code +10 +\end_layout + +\begin_layout LyX-Code +10.4 +\end_layout + +\begin_layout LyX-Code +(3+4j) +\end_layout + +\begin_layout LyX-Code +I am a String +\end_layout + +\begin_layout Standard +\align block +The program treats the variables like humans treat labelled envelopes. + We can pick an envelope, write some name on it and keep something inside + it for future use. + In a similar manner the program creates a variable, gives it a name and + keeps some value inside it, to be used in subsequent steps. + So far we have used four data types of Python: int, float, complex and + str. + To become familiar with them, you may write simple programs performing + arithmetic and logical operations using them. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: oper.py +\end_layout + +\begin_layout LyX-Code +x = 2 +\end_layout + +\begin_layout LyX-Code +y = 4 +\end_layout + +\begin_layout LyX-Code +print x + y * 2 +\end_layout + +\begin_layout LyX-Code +s = 'Hello ' +\end_layout + +\begin_layout LyX-Code +print s + s +\end_layout + +\begin_layout LyX-Code +print 3 * s +\end_layout + +\begin_layout LyX-Code +print x == y +\end_layout + +\begin_layout LyX-Code +print y == 2 * x +\end_layout + +\begin_layout Standard +Running the program +\shape italic +oper.py +\shape default + will generate the following output. +\end_layout + +\begin_layout LyX-Code +10 +\end_layout + +\begin_layout LyX-Code +Hello Hello +\end_layout + +\begin_layout LyX-Code +Hello Hello Hello +\end_layout + +\begin_layout LyX-Code +False +\end_layout + +\begin_layout LyX-Code +True +\end_layout + +\begin_layout Standard +Note that a String can be added to another string and it can be multiplied + by an integer. + Try to understand the logic behind that and also try adding a String to + an Integer to see what is the error message you will get. + We have used the logical operator +\begin_inset Formula $==$ +\end_inset + + for comparing two variables. + +\end_layout + +\begin_layout Section +Operators and their Precedence +\end_layout + +\begin_layout Standard +Python supports a large number of arithmetic and logical operators. + They are summarized in the table +\begin_inset LatexCommand ref +reference "tab:Operators-in-Python" + +\end_inset + +. + An important thing to remember is their precedence. + In the expression +\shape italic +2+3*4 +\shape default +, is the addition done first or the multiplication? According to elementary + arithmetics, the multiplication should be done first. + It means that the multiplication operator has higher precedence than the + addition operator. + If you want the addition to be done first, enforce it by using parenthesis + like +\begin_inset Formula $(2+3)*4$ +\end_inset + +. + Whenever there is ambiguity in evaluation, use parenthesis to clarify the + order of evaluation. +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Tabular + + + + + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Operator +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Description +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Expression +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Result +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +or +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Boolean OR +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +0 or 4 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +4 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +and +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Boolean AND +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +3 and 0 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +0 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +not x +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Boolean NOT +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +not 0 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +True +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +in, not in +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Membership tests +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +3 in [2.2,3,12] +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +True +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +<, <=, >, >=, !=, == +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Comparisons +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +2 > 3 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +False +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +| +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Bitwise OR +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +1 | 2 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +3 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +^ +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Bitwise XOR +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +1 ^ 5 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +4 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +& +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Bitwise AND +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +1 & 3 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +1 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +<<, >> +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Bitwise Shifting +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +1 << 3 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +8 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small ++ , - +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Add, Subtract +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +6 - 4 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +2 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +*, /, % +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Multiply, divide, reminder +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +5 % 2 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +1 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small ++x , -x +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Positive, Negative +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +-5*2 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +-10 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +~ +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Bitwise NOT +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +~1 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +-2 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +** +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Exponentiation +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +2 ** 3 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +8 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +x[index] +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +Subscription +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +a='abcd' ; a[1] +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\shape italic +\size small +'b' +\end_layout + +\end_inset + + + + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Operators in Python listed according to their precedence. + +\begin_inset LatexCommand label +name "tab:Operators-in-Python" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Python Strings +\end_layout + +\begin_layout Standard +So far we have come across four data types: Integer, Float, Complex and + String. + Out of which, String is somewhat different from the other three. + It is a collection of same kind of elements, characters. + The individual elements of a String can be accessed by indexing as shown + in +\shape italic +string.py +\shape default +. + String is a compound, or collection, data type. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: string.py +\end_layout + +\begin_layout LyX-Code +s = 'hello world' +\end_layout + +\begin_layout LyX-Code +print s[0] # print first element, h +\end_layout + +\begin_layout LyX-Code +print s[1] # print e +\end_layout + +\begin_layout LyX-Code +print s[-1] # will print the last character +\end_layout + +\begin_layout Standard +Addition and multiplication is defined for Strings, as demonstrated by string2.py. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: string2.py +\end_layout + +\begin_layout LyX-Code +a = 'hello'+'world' +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout LyX-Code +b = 'ha' * 3 +\end_layout + +\begin_layout LyX-Code +print b +\end_layout + +\begin_layout LyX-Code +print a[-1] + b[0] +\end_layout + +\begin_layout Standard +\align left +will give the output +\end_layout + +\begin_layout Standard +helloworld +\end_layout + +\begin_layout Standard +hahaha +\end_layout + +\begin_layout Standard +dh +\end_layout + +\begin_layout Standard +\align left +The last element of +\shape italic +a +\shape default + and first element of +\shape italic +b +\shape default + are added, resulting in the string 'dh' +\end_layout + +\begin_layout Subsection +Slicing +\end_layout + +\begin_layout Standard +Part of a String can be extracted using the slicing operation. + It can be considered as a modified form of indexing a single character. + Indexing using +\begin_inset Formula $s[a:b]$ +\end_inset + + extracts elements +\begin_inset Formula $s[a]$ +\end_inset + + to +\begin_inset Formula $s[b-1]$ +\end_inset + +. + We can skip one of the indices. + If the index on the left side of the colon is skipped, slicing starts from + the first element and if the index on right side is skipped, slicing ends + with the last element. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: slice.py +\end_layout + +\begin_layout Standard +a = 'hello world' +\end_layout + +\begin_layout Standard +print a[3:5] +\end_layout + +\begin_layout Standard +print a[6:] +\end_layout + +\begin_layout Standard +print a[:5] +\end_layout + +\begin_layout Standard +\align left +The reader can guess the nature of slicing operation from the output of + this code, shown below. +\end_layout + +\begin_layout LyX-Code +'lo' +\end_layout + +\begin_layout LyX-Code +'world' +\end_layout + +\begin_layout LyX-Code +'hello' +\end_layout + +\begin_layout Standard +Please note that specifying a right side index more than the length of the + string is equivalent to skipping it. + Modify +\shape italic +slice.py +\shape default + to print the result of +\begin_inset Formula $a[6:20]$ +\end_inset + + to demonstrate it. +\end_layout + +\begin_layout Section +Python Lists +\end_layout + +\begin_layout Standard +List is an important data type of Python. + It is much more flexible than String. + The individual elements can be of any type, even another list. + Lists are defined by enclosing the elements inside a pair of square brackets, + separated by commas. + The program +\shape italic +list1.py +\shape default + defines a list and print its elements. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: list1.py +\end_layout + +\begin_layout LyX-Code +a = [2.3, 3.5, 234] # make a list +\end_layout + +\begin_layout LyX-Code +print a[0] +\end_layout + +\begin_layout LyX-Code +a[1] = 'haha' # Change an element +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout Standard +The output is shown below +\begin_inset Foot +status collapsed + +\begin_layout Standard +The floating point number 2.3 showing as 2.2999999999999998 is interesting. + This is the very nature of floting point representation of numbers, nothing + to do with Python. + With the precision we are using, the error in representing 2.3 is around + 2.0e-16. + This becomes a concern in operations like inversion of big matrices. +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Standard +2.3 +\end_layout + +\begin_layout Standard +[2.2999999999999998, 'haha', 234] +\end_layout + +\begin_layout Standard +Lists can be sliced in a manner similar to that if Strings. + List addition and multiplication are demonstrated by the following example. + We can also have another list as an element of a list. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: list2.py +\end_layout + +\begin_layout LyX-Code +a = [1,2] +\end_layout + +\begin_layout LyX-Code +print a * 2 +\end_layout + +\begin_layout LyX-Code +print a + [3,4] +\end_layout + +\begin_layout LyX-Code +b = [10, 20, a] +\end_layout + +\begin_layout LyX-Code +print b +\end_layout + +\begin_layout Standard +The output of this program is shown below. +\end_layout + +\begin_layout Standard +[1, 2, 1, 2] +\end_layout + +\begin_layout Standard +[1, 2, 3, 4] +\end_layout + +\begin_layout Standard +[10, 20, [1, 2] ] +\end_layout + +\begin_layout Section +Mutable and Immutable Types +\end_layout + +\begin_layout Standard +There is one major difference between String and List types, List is mutable + but String is not. + +\shape italic +We can change the value of an element in a list, add new elements to it + and remove any existing element. + This is not possible with String type +\shape default +. + Uncomment the last line of +\shape italic +third.py +\shape default + and run it to clarify this point. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: third.py +\end_layout + +\begin_layout LyX-Code +s = [3, 3.5, 234] # make a list +\end_layout + +\begin_layout LyX-Code +s[2] = 'haha' # Change an element +\end_layout + +\begin_layout LyX-Code +print s +\end_layout + +\begin_layout LyX-Code +x = 'myname' # String type +\end_layout + +\begin_layout LyX-Code +#x[1] = 2 # uncomment to get ERROR +\end_layout + +\begin_layout Standard +The List data type is very flexible, an element of a list can be another + list. + We will be using lists extensively in the coming chapters. + Tuple is another data type similar to List, except that it is immutable. + List is defined inside square brackets, tuple is defined in a similar manner + but inside parenthesis, like +\begin_inset Formula $(3,3.5,234)$ +\end_inset + +. +\end_layout + +\begin_layout Section +Input from the Keyboard +\end_layout + +\begin_layout Standard +Since most of the programs require some input from the user, let us introduce + this feature before proceeding further. + There are mainly two functions used for this purpose, +\emph on +\color black +input() +\emph default +\color inherit + for numeric type data and +\emph on +\color black +raw_input() +\emph default +\color inherit + for String type data. + A message to be displayed can be given as an argument while calling these + functions. +\begin_inset Foot +status collapsed + +\begin_layout Standard +Functions will be introduced later. + For the time being, understand that it is an isolated piece of code, called + from the main program with some input arguments and returns some output. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: kin1.py +\end_layout + +\begin_layout LyX-Code +x = input('Enter an integer ') +\end_layout + +\begin_layout LyX-Code +y = input('Enter one more ') +\end_layout + +\begin_layout LyX-Code +print 'The sum is ', x + y +\end_layout + +\begin_layout LyX-Code +s = raw_input('Enter a String ') +\end_layout + +\begin_layout LyX-Code +print 'You entered ', s +\end_layout + +\begin_layout Standard +It is also possible to read more than one variable using a single input() + statement. + +\emph on +\color black +String +\emph default +\color inherit + type data read using raw_input() may be converted into +\emph on +\color black +integer +\emph default +\color inherit + or +\emph on +\color black + float +\emph default +\color inherit + type if they contain only the valid characters. + In order to show the effect of conversion explicitly, we multiply the variables + by 2 before printing. + Multiplying a String by 2 prints it twice. + If the String contains any other characters than +\shape italic +0..9, . + and e +\shape default +, the conversion to float will give an error. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: kin2.py +\end_layout + +\begin_layout LyX-Code +x,y = input('Enter x and y separated by comma ') +\end_layout + +\begin_layout LyX-Code +print 'The sum is ', x + y +\end_layout + +\begin_layout LyX-Code +s = raw_input('Enter a decimal number ') +\end_layout + +\begin_layout LyX-Code +a = float(s) +\end_layout + +\begin_layout LyX-Code +print s * 2 # prints string twice +\end_layout + +\begin_layout LyX-Code +print a * 2 # converted value times 2 +\end_layout + +\begin_layout Standard +We have learned about the basic data types of Python and how to get input + data from the keyboard. + This is enough to try some simple problems and algorithms to solve them. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + area.py +\end_layout + +\begin_layout LyX-Code +pi = 3.1416 +\end_layout + +\begin_layout LyX-Code +r = input('Enter Radius ') +\end_layout + +\begin_layout LyX-Code +a = pi * r ** 2 # +\begin_inset Formula $A=\pi r^{2}$ +\end_inset + + +\end_layout + +\begin_layout LyX-Code +print 'Area = ', a +\end_layout + +\begin_layout Standard +\align block +The above example calculates the area of a circle. + Line three calculates +\begin_inset Formula $r^{2}$ +\end_inset + +\InsetSpace ~ +using the exponentiation operator +\begin_inset Formula $**$ +\end_inset + +, and multiply it with +\begin_inset Formula $\pi$ +\end_inset + + using the multiplication operator +\begin_inset Formula $*$ +\end_inset + +. + +\begin_inset Formula $r^{2}$ +\end_inset + + is evaluated first because ** has higher precedence than *, otherwise the + result would be +\begin_inset Formula $(\pi r)^{2}$ +\end_inset + +. +\end_layout + +\begin_layout Section +Iteration: while and for loops +\end_layout + +\begin_layout Standard +If programs can only execute from the first line to the last in that order, + as shown in the previous examples, it would be impossible to write any + useful program. + For example, we need to print the multiplication table of eight. + Using our present knowledge, it would look like the following +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + badtable.py +\end_layout + +\begin_layout LyX-Code +print 1 * 8 +\end_layout + +\begin_layout LyX-Code +print 2 * 8 +\end_layout + +\begin_layout LyX-Code +print 3 * 8 +\end_layout + +\begin_layout LyX-Code +print 4 * 8 +\end_layout + +\begin_layout LyX-Code +print 5 * 8 +\end_layout + +\begin_layout Standard +Well, we are stopping here and looking for a better way to do this job. + +\end_layout + +\begin_layout Standard +The solution is to use the +\emph on +\color black +while +\emph default +\color inherit + loop of Python. + The logical expression in front of +\shape italic +while +\shape default + is evaluated, and if it is True, the body of the while loop (the indented + lines below the while statement) is executed. + The process is repeated until the condition becomes false. + We should have some statement inside the body of the loop that will make + this condition false after few iterations. + Otherwise the program will run in an infinite loop and you will have to + press Control-C to terminate it. + +\end_layout + +\begin_layout Standard +The program +\shape italic + table.py +\shape default +, defines a variable +\begin_inset Formula $x$ +\end_inset + + and assigns it an initial value of 1. + Inside the while loop +\begin_inset Formula $x*8$ +\end_inset + + is printed and the value of +\begin_inset Formula $x$ +\end_inset + + is incremented. + This process will be repeated until the value of +\begin_inset Formula $x$ +\end_inset + + becomes greater than 10. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + table.py +\end_layout + +\begin_layout LyX-Code +x = 1 +\end_layout + +\begin_layout LyX-Code +while x <= 10: +\end_layout + +\begin_layout LyX-Code + print x * 8 +\end_layout + +\begin_layout LyX-Code + x = x + 1 +\end_layout + +\begin_layout Standard +As per the Python syntax, the while statement ends with a colon and the + code inside the +\emph on +\color black +while +\emph default +\color inherit + loop is indented. + Indentation can be done using tab or few spaces. + In this example, we have demonstrated a simple algorithm. +\end_layout + +\begin_layout Subsection +Python Syntax, Colon & Indentation +\end_layout + +\begin_layout Standard +Python was designed to be a highly readable language. + It has a relatively uncluttered visual layout, uses English keywords frequently + where other languages use punctuation, and has notably fewer syntactic + constructions than other popular structured languages. + +\end_layout + +\begin_layout Standard +There are mainly two things to remember about Python syntax: +\shape italic +indentation and colon +\shape default +. + +\shape italic +Python uses indentation to delimit blocks of code +\shape default +. + Both space characters and tab characters are currently accepted as forms + of indentation in Python. + Mixing spaces and tabs can create bugs that are hard to find, since the + text editor does not show the difference. + There should not be any extra white spaces in the beginning of any line. + +\end_layout + +\begin_layout Standard + +\shape italic +The line before any indented block must end with a colon character +\shape default +. + +\end_layout + +\begin_layout Subsection +Syntax of 'for loops' +\end_layout + +\begin_layout Standard +Python +\shape italic +for +\shape default + loops are slightly different from the for loops of other languages. + Python +\shape italic +for +\shape default + loop iterates over a compound data type like a String, List or Tuple. + During each iteration, one member of the compound data is assigned to the + loop variable. + The flexibility of this can be seen from the examples below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + forloop.py +\end_layout + +\begin_layout LyX-Code +a = 'Hello' +\end_layout + +\begin_layout LyX-Code +for ch in a: # ch is the loop variable +\end_layout + +\begin_layout LyX-Code + print ch +\end_layout + +\begin_layout LyX-Code +b = ['haha', 3.4, 2345, 3+5j] +\end_layout + +\begin_layout LyX-Code +for item in b: +\end_layout + +\begin_layout LyX-Code + print item +\end_layout + +\begin_layout Standard +which gives the output : +\end_layout + +\begin_layout Standard +H +\end_layout + +\begin_layout Standard +e +\end_layout + +\begin_layout Standard +l +\end_layout + +\begin_layout Standard +l +\end_layout + +\begin_layout Standard +o +\end_layout + +\begin_layout Standard +haha +\end_layout + +\begin_layout Standard +3.4 +\end_layout + +\begin_layout Standard +2345 +\end_layout + +\begin_layout Standard +(3+5j) +\end_layout + +\begin_layout Standard +For constructing for loops that executes a fixed number of times, we can + create a list using the range() function and run the for loop over that. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + forloop2.py +\end_layout + +\begin_layout LyX-Code +mylist = range(5) +\end_layout + +\begin_layout LyX-Code +print mylist +\end_layout + +\begin_layout LyX-Code +for item in mylist: +\end_layout + +\begin_layout LyX-Code + print item +\end_layout + +\begin_layout Standard +The output will look like : +\end_layout + +\begin_layout Standard +[0, 1, 2, 3, 4] +\end_layout + +\begin_layout Standard +0 +\end_layout + +\begin_layout Standard +1 +\end_layout + +\begin_layout Standard +2 +\end_layout + +\begin_layout Standard +3 +\end_layout + +\begin_layout Standard +4 +\end_layout + +\begin_layout Standard +The range function in the above example generates the list +\begin_inset Formula $[0,1,2,3,4]$ +\end_inset + + and the for loop walks thorugh it printing each member. + It is possible to specify the starting point and increment as arguments + in the form range(start, end+1, step). + The following example prints the table of 5 using this feature. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + forloop3.py +\end_layout + +\begin_layout LyX-Code +mylist = range(5,51,5) +\end_layout + +\begin_layout LyX-Code +for item in mylist: +\end_layout + +\begin_layout LyX-Code + print item , +\end_layout + +\begin_layout Standard +The output is shown below. + +\end_layout + +\begin_layout Standard +5 10 15 20 25 30 35 40 45 50 +\end_layout + +\begin_layout Standard +The print statement inserts a newline at the end by default. + We can suppress this behaviour by adding a comma character at the end as + done in the previous example. +\end_layout + +\begin_layout Standard +In some cases, we may need to traverse the list to modify some or all of + the elements. + This can be done by looping over a list of indices generated by the range() + function.For example, the program +\emph on + +\emph default +forloop4.py +\size large +\emph on + +\size default +\emph default +zeros all the elements of the list. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + forloop4.py +\end_layout + +\begin_layout LyX-Code +a = [2, 5, 3, 4, 12] +\end_layout + +\begin_layout LyX-Code +size = len(a) +\end_layout + +\begin_layout LyX-Code +for k in range(size): +\end_layout + +\begin_layout LyX-Code + a[k] = 0 +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout Section +Conditional Execution: if, elif and else +\end_layout + +\begin_layout Standard +In some cases, we may need to execute some section of the code only if certain + conditions are true. + Python implements this feature using the +\emph on +\color black +if, elif +\emph default +\color inherit + and +\emph on +\color black +else +\emph default +\color inherit + keywords, as shown in the next example. + The indentation levels of +\shape italic +if +\shape default + and the corresponding +\shape italic +elif +\shape default + and +\shape italic +else +\shape default + must be kept the same. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + compare.py +\end_layout + +\begin_layout LyX-Code +x = raw_input('Enter a string ') +\end_layout + +\begin_layout LyX-Code +if x == 'hello': +\end_layout + +\begin_layout LyX-Code + print 'You typed ', x +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + big.py +\end_layout + +\begin_layout LyX-Code +x = input('Enter a number ') +\end_layout + +\begin_layout LyX-Code +if x > 10: +\end_layout + +\begin_layout LyX-Code + print 'Bigger Number' +\end_layout + +\begin_layout LyX-Code +elif x < 10: +\end_layout + +\begin_layout LyX-Code + print 'Smaller Number' +\end_layout + +\begin_layout LyX-Code +else: +\end_layout + +\begin_layout LyX-Code + print 'Same Number' +\end_layout + +\begin_layout Standard +The statement +\shape italic +x > 10 and x < 15 +\shape default + can be expressed in a short form, like +\shape italic +10 < x < 15 +\shape default +. +\end_layout + +\begin_layout Standard +The next example uses +\emph on +\color black + while +\emph default +\color inherit + and +\emph on +\color black + if +\emph default +\color inherit +keywords in the same program. + Note the level of indentation when the if statement comes inside the while + loop. + Remember that, the +\shape italic +if +\shape default + statement must be aligned with the corresponding +\shape italic +elif and else. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + big2.py +\end_layout + +\begin_layout LyX-Code +x = 1 +\end_layout + +\begin_layout LyX-Code +while x < 11: +\end_layout + +\begin_layout LyX-Code + if x < 5: +\end_layout + +\begin_layout LyX-Code + print 'Small ', x +\end_layout + +\begin_layout LyX-Code + else: +\end_layout + +\begin_layout LyX-Code + print 'Big ', x +\end_layout + +\begin_layout LyX-Code + x = x + 1 +\end_layout + +\begin_layout LyX-Code +print 'Done' +\end_layout + +\begin_layout Section +Modify loops : break and continue +\end_layout + +\begin_layout Standard +We can use the +\emph on +\color black +break +\emph default +\color inherit + statement to terminate a loop, if some condition is met. + The +\shape italic +continue +\shape default + statement is used to skip the rest of the block and go to the beginning + again. + Both are demonstrated in the program +\shape italic +big3.py +\shape default + shown below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: +\emph default +\color inherit + big3.py +\end_layout + +\begin_layout LyX-Code +x = 1 +\end_layout + +\begin_layout LyX-Code +while x < 10: +\end_layout + +\begin_layout LyX-Code + if x < 3: +\end_layout + +\begin_layout LyX-Code + print 'skipping work', x +\end_layout + +\begin_layout LyX-Code + x = x + 1 +\end_layout + +\begin_layout LyX-Code + continue +\end_layout + +\begin_layout LyX-Code + print x +\end_layout + +\begin_layout LyX-Code + if x == 4: +\end_layout + +\begin_layout LyX-Code + print 'Enough of work' +\end_layout + +\begin_layout LyX-Code + break +\end_layout + +\begin_layout LyX-Code + x = x + 1 +\end_layout + +\begin_layout LyX-Code +print 'Done' +\end_layout + +\begin_layout Standard +The output of big3.py is listed below. +\end_layout + +\begin_layout Standard +skipping work 1 +\end_layout + +\begin_layout Standard +skipping work 2 +\end_layout + +\begin_layout Standard +3 +\end_layout + +\begin_layout Standard +4 +\end_layout + +\begin_layout Standard +Enough of work +\end_layout + +\begin_layout Standard +Done +\end_layout + +\begin_layout Standard +\align block +Now let us write a program to find out the largest positive number entered + by the user. + The algorithm works in the following manner. + To start with, we assume that the largest number is zero. + After reading a number, the program checks whether it is bigger than the + current value of the largest number. + If so the value of the largest number is replaced with the current number. + The program terminates when the user enters zero. + Modify max.py to work with negative numbers also. +\end_layout + +\begin_layout Standard +\align left +Example: max.py +\end_layout + +\begin_layout LyX-Code +max = 0 +\end_layout + +\begin_layout LyX-Code +while True: # Infinite loop +\end_layout + +\begin_layout LyX-Code + x = input('Enter a number ') +\end_layout + +\begin_layout LyX-Code + if x > max: +\end_layout + +\begin_layout LyX-Code + max = x +\end_layout + +\begin_layout LyX-Code + if x == 0: +\end_layout + +\begin_layout LyX-Code + print max +\end_layout + +\begin_layout LyX-Code + break +\end_layout + +\begin_layout Section +Line joining +\end_layout + +\begin_layout Standard +Python interpreter processes the code line by line. + A program may have a long line of code that may not physically fit in the + width of the text editor. + In such cases, we can split a logical line of code into more than one physical + lines, using backslash characters ( +\backslash +), in other words multiple physical lines are joined to form a logical line + before interpreting it. +\end_layout + +\begin_layout LyX-Code +if 1900 < year < 2100 and 1 <= month <= 12 : +\end_layout + +\begin_layout Standard +can be split like +\end_layout + +\begin_layout LyX-Code +if 1900 < year < 2100 +\backslash + +\end_layout + +\begin_layout LyX-Code + and 1 <= month <= 12 : +\end_layout + +\begin_layout Standard +Do not split in the middle of words except for Strings. + A long String can be split as shown below. +\end_layout + +\begin_layout LyX-Code +longname = 'I am so long and will +\backslash + +\end_layout + +\begin_layout LyX-Code +not fit in a single line' +\end_layout + +\begin_layout LyX-Code +print longname +\end_layout + +\begin_layout Section +Exercises +\end_layout + +\begin_layout Standard +We have now covered the minimum essentials of Python; defining variables, + performing arithmetic and logical operations on them and the control flow + statements. + These are sufficient for handling most of the programming tasks. + It would be better to get a grip of it before proceeding further, by writing + some code. +\end_layout + +\begin_layout Enumerate +Modify the expression +\shape italic +print 5+3*2 +\shape default + to get a result of 16 +\end_layout + +\begin_layout Enumerate +What will be the output of +\shape italic +print type(4.5) +\end_layout + +\begin_layout Enumerate +Print all even numbers upto 30, suffixed by a * if the number is a multiple + of 6. + (hint: use % operator) +\end_layout + +\begin_layout Enumerate +Write Python code to remove the last two characters of 'I am a long string' + by slicing, without counting the characters. + (hint: use negative indexing) +\end_layout + +\begin_layout Enumerate +s = '012345' . + (a) Slice it to remove last two elements (b) remove first two element. +\end_layout + +\begin_layout Enumerate +a = [1,2,3,4,5]. + Use Slicing and multiplication to generate [2,3,4,2,3,4] from it. +\end_layout + +\begin_layout Enumerate +Compare the results of 5/2, 5.0/2 and 2.0/3. +\end_layout + +\begin_layout Enumerate +Print the following pattern using a while loop +\newline ++ +\newline +++ +\newline ++++ +\newline +++++ +\end_layout + +\begin_layout Enumerate +Write a program to read inputs like 8A, 10C etc. + and print the integer and alphabet parts separately. +\end_layout + +\begin_layout Enumerate +Write code to print a number in the binary format (for example 5 will be + printed as 101) +\end_layout + +\begin_layout Enumerate +Write code to print all perfect cubes upto 2000. +\end_layout + +\begin_layout Enumerate +Write a Python program to print the multiplication table of 5. +\end_layout + +\begin_layout Enumerate +Write a program to find the volume of a box with sides 3,4 and 5 inches + in +\begin_inset Formula $cm^{3}$ +\end_inset + +( 1 inch = 2.54 cm) +\end_layout + +\begin_layout Enumerate +Write a program to find the percentage of volume occupied by a sphere of + diameter +\begin_inset Formula $r$ +\end_inset + + fitted in a cube of side +\begin_inset Formula $r$ +\end_inset + +. + Read +\begin_inset Formula $r$ +\end_inset + + from the keyboard. +\end_layout + +\begin_layout Enumerate +Write a Python program to calculate the area of a circle. +\end_layout + +\begin_layout Enumerate +Write a program to divide an integer by another without using the / operator. + (hint: use - operator) +\end_layout + +\begin_layout Enumerate +Count the number of times the character 'a' appears in a String read from + the keyboard. + Keep on prompting for the string until there is no 'a' in the input. +\end_layout + +\begin_layout Enumerate +Create an integer division machine that will ask the user for two numbers + then divide and give the result. + The program should give the result in two parts: the whole number result + and the remainder. + Example: If a user enters 11 / 4, the computer should give the result 2 + and remainder 3. +\end_layout + +\begin_layout Enumerate +Modify the previous program to avoid division by zero error. +\end_layout + +\begin_layout Enumerate +Create an adding machine that will keep on asking the user for numbers, + add them together and show the total after each step. + Terminate when user enters a zero. +\end_layout + +\begin_layout Enumerate +Modify the adding machine to use raw_input() and check for errors like user + entering invalid characters. +\end_layout + +\begin_layout Enumerate +Create a script that will convert Celsius to Fahrenheit. + The program should ask the users to enter the temperature in Celsius and + should print out the temperature in Fahrenheit, using +\begin_inset Formula $f=\frac{9}{5}c+32$ +\end_inset + +. + +\end_layout + +\begin_layout Enumerate +Write a program to convert Fahrenheit to Celsius. +\end_layout + +\begin_layout Enumerate +Create a script that uses a variable and will write 20 times "I will not + talk in class." Make each sentence on a separate line. + +\end_layout + +\begin_layout Enumerate +Define +\begin_inset Formula $2+5j$ +\end_inset + + and +\begin_inset Formula $2-5j$ +\end_inset + + as complex numbers , and find their product. + Verify the result by defining the real and imaginary parts separately and + using the multiplication formula. +\end_layout + +\begin_layout Enumerate +Write the multiplication table of 12 using while loop. +\end_layout + +\begin_layout Enumerate +Write the multiplication table of a number, from the user, using for loop. +\end_layout + +\begin_layout Enumerate +Print the powers of 2 up to 1024 using a for loop. + (only two lines of code) +\end_layout + +\begin_layout Enumerate +Define the list a = [123, 12.4, 'haha', 3.4] +\newline +a) print all members using a for + loop +\newline +b) print the float type members ( use type() function) +\newline +c) insert a member + after 12.4 +\newline +d) append more members +\end_layout + +\begin_layout Enumerate +Make a list containing 10 members using a for loop. +\end_layout + +\begin_layout Enumerate +Generate multiplication table of 5 with two lines of Python code. + (hint: range function) +\end_layout + +\begin_layout Enumerate +Write a program to find the sum of five numbers read from the keyboard. +\end_layout + +\begin_layout Enumerate +Write a program to read numbers from the keyboard until their sum exceeds + 200. + Modify the program to ignore numbers greater than 99. +\end_layout + +\begin_layout Enumerate +Write a Python function to calculate the GCD of two numbers +\end_layout + +\begin_layout Enumerate +Write a Python program to find annual compound interest. + Get P,N and R from user +\end_layout + +\begin_layout Section +Functions +\end_layout + +\begin_layout Standard +Large programs need to be divided into small logical units. + A function is generally an isolated unit of code that has a name and does + a well defined job. + A function groups a number of program statements into a unit and gives + it a name. + This unit can be invoked from other parts of a program. + Python allows you to define functions using the +\shape italic +def +\shape default + keyword. + A function may have one or more variables as arguments, which receive their + values from the calling program. + +\end_layout + +\begin_layout Standard +In the example shown below, function arguments (a and b) get the values + 3 and 4 respectively from the caller. + One can specify more than one variables in the return statement, separated + by commas. + The function will return a tuple containing those variables. + Some functions may not have any arguments, but while calling them we need + to use an empty parenthesis, otherwise the function will not be invoked. + If there is no return statement, a None is returned to the caller. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example func.py +\end_layout + +\begin_layout LyX-Code +def sum(a,b): # a trivial function +\end_layout + +\begin_layout LyX-Code + return a + b +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print sum(3, 4) +\end_layout + +\begin_layout Standard +The function +\shape italic +factorial.py +\shape default + calls itself recursively. + The value of argument is decremented before each call. + Try to understand the working of this by inserting print statements inside + the function. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example factor.py +\end_layout + +\begin_layout LyX-Code +def factorial(n): # a recursive function +\end_layout + +\begin_layout LyX-Code + if n == 0: +\end_layout + +\begin_layout LyX-Code + return 1 +\end_layout + +\begin_layout LyX-Code + else: +\end_layout + +\begin_layout LyX-Code + return n * factorial(n-1) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print factorial(10) +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example fibanocci.py +\end_layout + +\begin_layout LyX-Code +def fib(n): # print Fibonacci series up to n +\end_layout + +\begin_layout LyX-Code + a, b = 0, 1 +\end_layout + +\begin_layout LyX-Code + while b < n: +\end_layout + +\begin_layout LyX-Code + print b +\end_layout + +\begin_layout LyX-Code + a, b = b, a+b +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print fib(30) +\end_layout + +\begin_layout Standard +Runing +\shape italic +fibanocci.py +\shape default + will print +\end_layout + +\begin_layout Quotation +1 1 2 3 5 8 13 21 +\end_layout + +\begin_layout Standard +Modify it to replace +\begin_inset Formula $a,b=b,a+b$ +\end_inset + + by two separate assignment statements, if required introduce a third variable. +\end_layout + +\begin_layout Subsection +Scope of variables +\end_layout + +\begin_layout Standard +The variables defined inside a function are not known outside the function. + There could be two variables, one inside and one outside, with the same + name. + The program +\shape italic +scope.py +\shape default + demonstrates this feature. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example scope.py +\end_layout + +\begin_layout LyX-Code +def change(x): +\end_layout + +\begin_layout LyX-Code + counter = x +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +counter = 10 +\end_layout + +\begin_layout LyX-Code +change(5) +\end_layout + +\begin_layout LyX-Code +print counter +\end_layout + +\begin_layout Standard +The program will print 10 and not 5. + The two variables, both named counter, are not related to each other. + In some cases, it may be desirable to allow the function to change some + external variable. + This can be achieved by using the +\shape italic +global +\shape default + keyword, as shown in +\shape italic +global.py +\shape default +. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example global.py +\end_layout + +\begin_layout LyX-Code +def change(x): +\end_layout + +\begin_layout LyX-Code + global counter # use the global variable +\end_layout + +\begin_layout LyX-Code + counter = x +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +counter = 10 +\end_layout + +\begin_layout LyX-Code +change(5) +\end_layout + +\begin_layout LyX-Code +print counter +\end_layout + +\begin_layout Standard +The program will now print 5. + Functions with global variables should be used carefully to avoid inadvertent + side effects. +\end_layout + +\begin_layout Subsection +Optional and Named Arguments +\end_layout + +\begin_layout Standard +Python allows function arguments to have default values; if the function + is called without a particular argument, its default value will be taken. + Due to this feature, the same function can be called with different number + of arguments. + The arguments without default values must appear first in the argument + list and they cannot be omitted while invoking the function. + The following example shows a function named power() that does exponentiation, + but the default value of exponent is set to 2. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example power.py +\end_layout + +\begin_layout LyX-Code +def power(mant, exp = 2.0): +\end_layout + +\begin_layout LyX-Code + return mant ** exp +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print power(5., 3) +\end_layout + +\begin_layout LyX-Code +print power(4.) # prints 16 +\end_layout + +\begin_layout LyX-Code +print power() # Gives Error +\end_layout + +\begin_layout Standard +Arguments can be specified in any order by using named arguments. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example named.py +\end_layout + +\begin_layout LyX-Code +def power(mant = 10.0, exp = 2.0): +\end_layout + +\begin_layout LyX-Code + return mant ** exp +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print power(5., 3) +\end_layout + +\begin_layout LyX-Code +print power(4.) # prints 16 +\end_layout + +\begin_layout LyX-Code +print power(exp=3) # mant gets 10.0, prints 1000 +\end_layout + +\begin_layout Section +More on Strings and Lists +\end_layout + +\begin_layout Standard +Before proceeding further, we will explore some of the functions provided + for manipulating strings and lists. + Python strings can be manipulated in many ways. + The following program prints the length of a string, makes an upper case + version for printing and prints a help message on the String class. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: stringhelp.py +\end_layout + +\begin_layout LyX-Code +s = 'hello world' +\end_layout + +\begin_layout LyX-Code +print len(s) +\end_layout + +\begin_layout LyX-Code +print s.upper() +\end_layout + +\begin_layout LyX-Code +help(str) # press q to exit help +\end_layout + +\begin_layout Standard +Python is an object oriented language and all variables are objects belonging + to various classes. + The method upper() (a function belonging to a class is called a method) + is invoked using the dot operator. + All we need to know at this stage is that there are several methods that + can be used for manipulating objects and they can be invoked like: +\shape italic +variable_name.method_name() +\shape default +. + +\end_layout + +\begin_layout Subsection +split and join +\end_layout + +\begin_layout Standard +\align left +Splitting a String will result in a list of smaller strings. + If you do not specify the separator, the space character is assumed by + default. + To demonstrate the working of these functions, few lines of code and its + output are listed below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: split.py +\end_layout + +\begin_layout LyX-Code +s = 'I am a long string' +\end_layout + +\begin_layout LyX-Code +print s.split() +\end_layout + +\begin_layout LyX-Code +a = 'abc.abc.abc' +\end_layout + +\begin_layout LyX-Code +aa = a.split('.') +\end_layout + +\begin_layout LyX-Code +print aa +\end_layout + +\begin_layout LyX-Code +mm = '+'.join(aa) +\end_layout + +\begin_layout LyX-Code +print mm +\end_layout + +\begin_layout Standard +\align left +The result is shown below +\end_layout + +\begin_layout Standard +['I', 'am', 'a', 'long', 'string'] +\end_layout + +\begin_layout Standard +['abc', 'abc', 'abc'] +\end_layout + +\begin_layout Standard +'abc+abc+abc' +\end_layout + +\begin_layout Standard +\align left +The List of strings generated by split is joined using '+' character, resulting + in the last line of the output. +\end_layout + +\begin_layout Subsection +Manipulating Lists +\end_layout + +\begin_layout Standard +Python lists are very flexible, we can append, insert, delete and modify + elements of a list. + The program +\shape italic +list3.py +\shape default + demonstrates some of them. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: list3.py +\end_layout + +\begin_layout LyX-Code +a = [] # make an empty list +\end_layout + +\begin_layout LyX-Code +a.append(3) # Add an element +\end_layout + +\begin_layout LyX-Code +a.insert(0,2.5) # insert 2.5 as first element +\end_layout + +\begin_layout LyX-Code +print a, a[0] +\end_layout + +\begin_layout LyX-Code +print len(a) +\end_layout + +\begin_layout Standard +The output is shown below. +\end_layout + +\begin_layout Standard +[2.5, 3] 2.5 +\end_layout + +\begin_layout Standard +2 +\end_layout + +\begin_layout Subsection +Copying Lists +\end_layout + +\begin_layout Standard +Lists cannot be copied like numeric data types. + The statement +\begin_inset Formula $b=a$ +\end_inset + + will not create a new list b from list a, it just make a reference to a. + The following example will clarify this point. + To make a duplicate copy of a list, we need to use the +\shape italic +copy +\shape default + module. +\end_layout + +\begin_layout Standard +\align left + +\emph on +\color black +Example: list_copy.py +\end_layout + +\begin_layout LyX-Code +a = [1,2,3,4] +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout LyX-Code +b = a # b refers to a +\end_layout + +\begin_layout LyX-Code +print a == b # True +\end_layout + +\begin_layout LyX-Code +b[0] = 5 # Modifies a[0] +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout LyX-Code +import copy +\end_layout + +\begin_layout LyX-Code +c = copy.copy(a) +\end_layout + +\begin_layout LyX-Code +c[1] = 100 +\end_layout + +\begin_layout LyX-Code +print a is c # is False +\end_layout + +\begin_layout LyX-Code +print a, c +\end_layout + +\begin_layout Standard +The output is shown below. +\end_layout + +\begin_layout Standard +[1, 2, 3, 4] +\end_layout + +\begin_layout Standard +True +\end_layout + +\begin_layout Standard +[5, 2, 3, 4] +\end_layout + +\begin_layout Standard +False +\end_layout + +\begin_layout Standard +[5, 2, 3, 4] [5, 100, 3, 4] +\end_layout + +\begin_layout Section +Python Modules and Packages +\begin_inset Foot +status collapsed + +\begin_layout Standard +While giving names to your Python programs, make sure that you are not directly + or indirectly importing any Python module having same name. + For example, if you create a program named +\emph on +math.py +\emph default + and keep it in your working directory, the +\emph on +import math +\emph default + statement from any other program started from that directory will try to + import your file named +\emph on +math.py +\emph default + and give error. + If you ever do that by mistake, delete all the files with .pyc extension + from your directory. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +One of the major advantages of Python is the availability of libraries for + various applications like graphics, networking and scientific computation. + The standard library distributed with Python itself has a large number + of modules: time, random, pickle, system etc. + are some of them. + The site http://docs.python.org/library/ has the complete reference. + +\end_layout + +\begin_layout Standard +Modules are loaded by using the +\shape italic +import +\shape default + keyword. + Several ways of using +\shape italic +import +\shape default + is explained below, using the math (containing mathematical functions) + module as an example. +\end_layout + +\begin_layout Subsection +Different ways to import +\end_layout + +\begin_layout Standard +simplest way to use import is shown in +\shape italic +mathsin.py +\shape default +, where the function is invoked using the form +\shape italic +module_name.function_name() +\shape default +. + In the next example, we use an alias for the module name. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example mathsin.py +\end_layout + +\begin_layout LyX-Code +import math +\end_layout + +\begin_layout LyX-Code +print math.sin(0.5) # module_name.method_name +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example mathsin2.py +\end_layout + +\begin_layout LyX-Code +import math as m # Give another name for math +\end_layout + +\begin_layout LyX-Code +print m.sin(0.5) # Refer by the new name +\end_layout + +\begin_layout Standard +We can also import the functions to behave like local (like the ones within + our source file) function, as shown below. + The character * is a wild card for importing all the functions. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example mathlocal.py +\end_layout + +\begin_layout LyX-Code +from math import sin # sin is imported as local +\end_layout + +\begin_layout LyX-Code +print sin(0.5) +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example mathlocal2.py +\end_layout + +\begin_layout LyX-Code +from math import * # import everything from math +\end_layout + +\begin_layout LyX-Code +print sin(0.5) +\end_layout + +\begin_layout Standard +In the third and fourth cases, we need not type the module name every time. + But there could be trouble if two modules imported contains a function + with same name. + In the program +\emph on +conflict.py +\emph default +, the +\begin_inset Formula $\sin()$ +\end_inset + + from +\emph on +numpy +\emph default + is capable of handling a list argument. + After importing +\shape italic +math.py +\shape default +, line 4, the +\begin_inset Formula $\sin$ +\end_inset + + function from +\shape italic +math +\shape default + module replaces the one from +\emph on +numpy +\emph default +. + The error occurs because the +\begin_inset Formula $\sin()$ +\end_inset + + from +\emph on +math +\emph default + can accept only a numeric type argument. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example conflict.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +x = [0.1, 0.2, 0.3] +\end_layout + +\begin_layout LyX-Code +print sin(x) # numpy's sin can handle lists +\end_layout + +\begin_layout LyX-Code +from math import * # sin of math becomes effective +\end_layout + +\begin_layout LyX-Code +print sin(x) # will give ERROR +\end_layout + +\begin_layout Subsection +Packages +\end_layout + +\begin_layout Standard +Packages are used for organizing multiple modules. + The module name A.B designates a submodule named B in a package named A. + The concept is demonstrated using the packages Numpy +\begin_inset Foot +status collapsed + +\begin_layout Standard +NumPy will be discusssed later in chapter +\begin_inset LatexCommand ref +reference "sec:Arrays-and-Matrices" + +\end_inset + +. +\end_layout + +\end_inset + + and Scipy. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example submodule.py +\end_layout + +\begin_layout LyX-Code +import numpy +\end_layout + +\begin_layout LyX-Code +print numpy.random.normal() +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +import scipy.special +\end_layout + +\begin_layout LyX-Code +print scipy.special.j0(.1) +\end_layout + +\begin_layout Standard +In this example +\shape italic +random +\shape default + is a module inside the package +\shape italic +NumPy +\shape default +. + Similarly +\shape italic +special +\shape default + is a module inside the package +\shape italic +Scipy. + +\shape default +We use both of them in the package.module.function() format. + But there is some difference. + In the case of Numpy, the random module is loaded by default, importing + scipy does not import the module special by default. + This behavior can be defined while writing the Package and it is upto the + package author. +\end_layout + +\begin_layout Section +File Input/Output +\end_layout + +\begin_layout Standard +Disk files can be opened using the function named open() that returns a + File object. + Files can be opened for reading or writing. + There are several methods belonging to the File class that can be used + for reading and writing data. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example wfile.py +\end_layout + +\begin_layout LyX-Code +f = open('test.dat' , 'w') +\end_layout + +\begin_layout LyX-Code +f.write ('This is a test file') +\end_layout + +\begin_layout LyX-Code +f.close() +\end_layout + +\begin_layout Standard +Above program creates a new file named 'test.dat' (any existing file with + the same name will be deleted) and writes a String to it. + The following program opens this file for reading the data. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example rfile.py +\end_layout + +\begin_layout LyX-Code +f = open('test.dat' , 'r') +\end_layout + +\begin_layout LyX-Code +print f.read() +\end_layout + +\begin_layout LyX-Code +f.close() +\end_layout + +\begin_layout Standard +Note that the data written/read are character strings. + read() function can also be used to read a fixed number of characters, + as shown below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example rfile2.py +\end_layout + +\begin_layout LyX-Code +f = open('test.dat' , 'r') +\end_layout + +\begin_layout LyX-Code +print f.read(7) # get first seven characters +\end_layout + +\begin_layout LyX-Code +print f.read() # get the remaining ones +\end_layout + +\begin_layout LyX-Code +f.close() +\end_layout + +\begin_layout Standard +Now we will examine how to read a text data from a file and convert it into + numeric type. + First we will create a file with a column of numbers. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example wfile2.py +\end_layout + +\begin_layout LyX-Code +f = open('data.dat' , 'w') +\end_layout + +\begin_layout LyX-Code +for k in range(1,4): +\end_layout + +\begin_layout LyX-Code + s = '%3d +\backslash +n' %(k) +\end_layout + +\begin_layout LyX-Code + f.write(s) +\end_layout + +\begin_layout LyX-Code +f.close() +\end_layout + +\begin_layout Standard +The contents of the file created will look like this. +\end_layout + +\begin_layout Standard +1 +\end_layout + +\begin_layout Standard +2 +\end_layout + +\begin_layout Standard +3 +\end_layout + +\begin_layout Standard +\align left +Now we write a program to read this file, line by line, and convert the + string type data to integer type, and print the numbers. +\begin_inset Foot +status collapsed + +\begin_layout Standard +This will give error if there is a blank line in the data file. + This can be corrected by changing the comparison statement to if +\shape italic +len(s) < 1: +\shape default + , so that the processing stops at a blank line. + Modify the code to skip a blank line instead of exiting (hint: use continue + ). +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example rfile3.py +\end_layout + +\begin_layout LyX-Code +f = open('data.dat' , 'r') +\end_layout + +\begin_layout LyX-Code +while 1: # infinite loop +\end_layout + +\begin_layout LyX-Code + s = f.readline() +\end_layout + +\begin_layout LyX-Code + if s == '' : # Empty string means end of file +\end_layout + +\begin_layout LyX-Code + break # terminate the loop +\end_layout + +\begin_layout LyX-Code + m = int(s) # Convert to integer +\end_layout + +\begin_layout LyX-Code + print m * 5 +\end_layout + +\begin_layout LyX-Code +f.close() +\end_layout + +\begin_layout Subsection +The pickle module +\end_layout + +\begin_layout Standard +Strings can easily be written to and read from a file. + Numbers take a bit more effort, since the read() method only returns Strings, + which will have to be converted in to a number explicitly. + However, when you want to save and restore data types like lists, dictionaries, + or class instances, things get a lot more complicated. + Rather than have the users constantly writing and debugging code to save + complicated data types, Python provides a standard module called pickle. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example pickledump.py +\end_layout + +\begin_layout LyX-Code +import pickle +\end_layout + +\begin_layout LyX-Code +f = open('test.pck' , 'w') +\end_layout + +\begin_layout LyX-Code +pickle.dump(12.3, f) # write a float type +\end_layout + +\begin_layout LyX-Code +f.close() +\end_layout + +\begin_layout Standard +\align left +Now write another program to read it back from the file and check the data + type. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example pickleload.py +\end_layout + +\begin_layout LyX-Code +import pickle +\end_layout + +\begin_layout LyX-Code +f = open('test.pck' , 'r') +\end_layout + +\begin_layout LyX-Code +x = pickle.load(f) +\end_layout + +\begin_layout LyX-Code +print x , type(x) # check the type of data read +\end_layout + +\begin_layout LyX-Code +f.close() +\end_layout + +\begin_layout Section +Formatted Printing +\end_layout + +\begin_layout Standard +Formatted printing is done by using a format string followed by the % operator + and the values to be printed. + If format requires a single argument, values may be a single variable. + Otherwise, values must be a tuple (just place them inside parenthesis, + separated by commas) with exactly the number of items specified by the + format string. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example: format.py +\end_layout + +\begin_layout LyX-Code +a = 2.0 /3 # 2/3 will print zero +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout LyX-Code +print 'a = %5.3f' %(a) # upto 3 decimal places +\end_layout + +\begin_layout Standard +Data can be printed in various formats. + The conversion types are summarized in the following table. + There are several flags that can be used to modify the formatting, like + justification, filling etc. +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\align center +\begin_inset Tabular + + + + + + + + +\begin_inset Text + +\begin_layout Standard +Conversion +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +Conversion +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +Example +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +Result +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +d , i +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +signed Integer +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'%6d'%(12) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +12' +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +f +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +floating point decimal +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'%6.4f'%(2.0/3) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +0.667 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +e +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +floating point exponential +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'%6.2e'%(2.0/3) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +6.67e-01 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +x +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +hexadecimal +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'%x'%(16) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +10 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +o +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +octal +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'%o'%(8) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +10 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +s +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +string +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'%s'%('abcd') +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +abcd +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +0d +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +modified 'd' +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +'%05d'%(12) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +00012 +\end_layout + +\end_inset + + + + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Formatted Printing in Python +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left +The following example shows some of the features available with formatted + printing. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example: format2.py +\end_layout + +\begin_layout LyX-Code +a = 'justify as you like' +\end_layout + +\begin_layout LyX-Code +print '%30s'%a # right justified +\end_layout + +\begin_layout LyX-Code +print '%-30s'%a # minus sign for left justification +\end_layout + +\begin_layout LyX-Code +for k in range(1,11): # A good looking table +\end_layout + +\begin_layout LyX-Code + print '5 x %2d = %2d' %(k, k*5) +\end_layout + +\begin_layout Standard +The output of +\emph on +format2.py +\emph default +is given below. +\end_layout + +\begin_layout LyX-Code + justify as you like +\end_layout + +\begin_layout LyX-Code +justify as you like +\end_layout + +\begin_layout LyX-Code +5 x 1 = 5 +\end_layout + +\begin_layout LyX-Code +5 x 2 = 10 +\end_layout + +\begin_layout LyX-Code +5 x 3 = 15 +\end_layout + +\begin_layout LyX-Code +5 x 4 = 20 +\end_layout + +\begin_layout LyX-Code +5 x 5 = 25 +\end_layout + +\begin_layout LyX-Code +5 x 6 = 30 +\end_layout + +\begin_layout LyX-Code +5 x 7 = 35 +\end_layout + +\begin_layout LyX-Code +5 x 8 = 40 +\end_layout + +\begin_layout LyX-Code +5 x 9 = 45 +\end_layout + +\begin_layout LyX-Code +5 x 10 = 50 +\end_layout + +\begin_layout Section +Exception Handling +\end_layout + +\begin_layout Standard +Errors detected during execution are called exceptions, like divide by zero. + If the program does not handle exceptions, the Python Interpreter reports + the exception and terminates the program. + We will demonstrate handling exceptions using +\shape italic +try +\shape default + and +\shape italic +except +\shape default + keywords, in the example except.py. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example: except.py +\end_layout + +\begin_layout LyX-Code +x = input('Enter a number ') +\end_layout + +\begin_layout LyX-Code +try: +\end_layout + +\begin_layout LyX-Code + print 10.0/x +\end_layout + +\begin_layout LyX-Code +except: +\end_layout + +\begin_layout LyX-Code + print 'Division by zero not allowed' +\end_layout + +\begin_layout Standard +If any exception occurs while running the code inside the try block, the + code inside the except block is executed. + The following program implements error checking on input using exceptions. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example: except2.py +\end_layout + +\begin_layout LyX-Code +def get_number(): +\end_layout + +\begin_layout LyX-Code + while 1: +\end_layout + +\begin_layout LyX-Code + try: +\end_layout + +\begin_layout LyX-Code + a = raw_input('Enter a number ') +\end_layout + +\begin_layout LyX-Code + x = atof(a) +\end_layout + +\begin_layout LyX-Code + return x +\end_layout + +\begin_layout LyX-Code + except: +\end_layout + +\begin_layout LyX-Code + print 'Enter a valid number' +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print get_number() +\end_layout + +\begin_layout Section +Turtle Graphics +\end_layout + +\begin_layout Standard +Turtle Graphics have been noted by many psychologists and educators to be + a powerful aid in teaching geometry, spatial perception, logic skills, + computer programming, and art. + The language LOGO was specifically designed to introduce children to programmin +g, using turtle graphics. + An abstract drawing device, called the Turtle, is used to make programming + attractive for children by concentrating on doing turtle graphics. + It has been used with children as young as 3 and has a track record of + 30 years of success in education. + +\end_layout + +\begin_layout Standard +We will use the Turtle module of Python to play with Turtle Graphics and + practice the logic required for writing computer programs. + Using this module, we will move a +\shape italic +Pen +\shape default + on a two dimensional screen to generate graphical patterns. + The Pen can be controlled using functions like forward(distance), backward(dist +ance), right(angle), left(angle) etc. +\begin_inset Foot +status collapsed + +\begin_layout Standard +http://docs.python.org/library/turtle.html +\end_layout + +\end_inset + +. + Run the program turtle1.py to understand the functions. + This section is included only for those who want to practice programming + in a more interesting manner. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example turtle1.py +\end_layout + +\begin_layout LyX-Code +from turtle import * +\end_layout + +\begin_layout LyX-Code +a = Pen() # Creates a turtle in a window +\end_layout + +\begin_layout LyX-Code +a.forward(50) +\end_layout + +\begin_layout LyX-Code +a.left(45) +\end_layout + +\begin_layout LyX-Code +a.backward(50) +\end_layout + +\begin_layout LyX-Code +a.right(45) +\end_layout + +\begin_layout LyX-Code +a.forward(50) +\end_layout + +\begin_layout LyX-Code +a.circle(10) +\end_layout + +\begin_layout LyX-Code +a.up() +\end_layout + +\begin_layout LyX-Code +a.forward(50) +\end_layout + +\begin_layout LyX-Code +a.down() +\end_layout + +\begin_layout LyX-Code +a.color('red') +\end_layout + +\begin_layout LyX-Code +a.right(90) +\end_layout + +\begin_layout LyX-Code +a.forward(50) +\end_layout + +\begin_layout LyX-Code +raw_input('Press Enter') +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example turtle2.py +\end_layout + +\begin_layout LyX-Code +from turtle import * +\end_layout + +\begin_layout LyX-Code +a = Pen() +\end_layout + +\begin_layout LyX-Code +for k in range(4): +\end_layout + +\begin_layout LyX-Code + a.forward(50) +\end_layout + +\begin_layout LyX-Code + a.left(90) +\end_layout + +\begin_layout LyX-Code + a.circle(25) +\end_layout + +\begin_layout LyX-Code +raw_input() # Wait for Key press +\end_layout + +\begin_layout Standard +Outputs of the program turtle2.py and turtle3.py are shown in figure +\begin_inset LatexCommand ref +reference "fig:turtle2 and 3 outputs" + +\end_inset + +. + Try to write more programs like this to generate more complex patterns. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/turtle2.png + width 3cm + +\end_inset + + +\begin_inset Graphics + filename pics/turtle3.png + width 3cm + +\end_inset + + +\begin_inset Graphics + filename pics/turtle4.png + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of turtle2.py (b) turtle3.py (c) turtle4.py +\begin_inset LatexCommand label +name "fig:turtle2 and 3 outputs" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example turtle3.py +\end_layout + +\begin_layout LyX-Code +from turtle import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def draw_rectangle(): +\end_layout + +\begin_layout LyX-Code + for k in range(4): +\end_layout + +\begin_layout LyX-Code + a.forward(50) +\end_layout + +\begin_layout LyX-Code + a.left(90) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +a = Pen() +\end_layout + +\begin_layout LyX-Code +for k in range(36): +\end_layout + +\begin_layout LyX-Code + draw_rectangle() +\end_layout + +\begin_layout LyX-Code + a.left(10) +\end_layout + +\begin_layout LyX-Code +raw_input() +\end_layout + +\begin_layout Standard +The program turtle3.py creates a pattern by drwaing 36 squares, each drawn + tilted by +\begin_inset Formula $10^{\circ}$ +\end_inset + + from the previous one. + The program turtle4.py generates the fractal image as shown in figure +\begin_inset LatexCommand ref +reference "fig:turtle2 and 3 outputs" + +\end_inset + +(c). + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example turtle4.py +\end_layout + +\begin_layout LyX-Code +from turtle import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def f(length, depth): +\end_layout + +\begin_layout LyX-Code + if depth == 0: +\end_layout + +\begin_layout LyX-Code + forward(length) +\end_layout + +\begin_layout LyX-Code + else: +\end_layout + +\begin_layout LyX-Code + f(length/3, depth-1) +\end_layout + +\begin_layout LyX-Code + right(60) +\end_layout + +\begin_layout LyX-Code + f(length/3, depth-1) +\end_layout + +\begin_layout LyX-Code + left(120) +\end_layout + +\begin_layout LyX-Code + f(length/3, depth-1) +\end_layout + +\begin_layout LyX-Code + right(60) +\end_layout + +\begin_layout LyX-Code + f(length/3, depth-1) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +f(500, 4) +\end_layout + +\begin_layout LyX-Code +raw_input('Press any Key') +\end_layout + +\begin_layout Section +Writing GUI Programs +\end_layout + +\begin_layout Standard +Python has several modules that can be used for creating Graphical User + Interfaces. + The intention of this chapter is just to show the ease of making GUI in + Python and we have selected Tkinter +\begin_inset Foot +status collapsed + +\begin_layout Standard +http://www.pythonware.com/library/an-introduction-to-tkinter.htm +\end_layout + +\begin_layout Standard +http://infohost.nmt.edu/tcc/help/pubs/tkinter/ +\end_layout + +\begin_layout Standard +http://wiki.python.org/moin/TkInter +\end_layout + +\end_inset + +, one of the easiest to learn. + The GUI programs are event driven (movement of mouse, clicking a mouse + button, pressing and releasing a key on the keyboard etc. + are called events). + The execution sequence of the program is decided by the events, generated + mostly by the user. + For example, when the user clicks on a Button, the code associated with + that Button is executed. + GUI Programming is about creating Widgets like Button, Label, Canvas etc. + on the screen and executing selected functions in response to events. + After creating all the necessary widgets and displaying them on the screen, + the control is passed on to Tkinter by calling a function named +\shape italic +mainloop +\shape default +. + After that the program flow is decided by the events and associated callback + functions. +\end_layout + +\begin_layout Standard +For writing GUI programs, the first step is to create a main graphics window + by calling the function Tk(). + After that we create various Widgets and pack them inside the main window. + The example programs given below demonstrate the usage of some of the Tkinter + widgets.The program +\shape italic +tkmain.py +\shape default + is the smallest GUI program one can write using Tkinter. + The output of tkmain.py is shown in figure +\begin_inset LatexCommand ref +reference "fig:tkmain and tklabel outputs" + +\end_inset + +(a). +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/tkmain.png + width 4cm + +\end_inset + +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset Graphics + filename pics/tklabel.png + width 4cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Outputs of (a)tkmain.py (b)tklabel.py +\begin_inset LatexCommand label +name "fig:tkmain and tklabel outputs" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example tkmain.py +\end_layout + +\begin_layout LyX-Code +from Tkinter import * +\end_layout + +\begin_layout LyX-Code +root = Tk() +\end_layout + +\begin_layout LyX-Code +root.mainloop() +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example tklabel.py +\end_layout + +\begin_layout LyX-Code +from Tkinter import * +\end_layout + +\begin_layout LyX-Code +root = Tk() +\end_layout + +\begin_layout LyX-Code +w = Label(root, text="Hello, world") +\end_layout + +\begin_layout LyX-Code +w.pack() +\end_layout + +\begin_layout LyX-Code +root.mainloop() +\end_layout + +\begin_layout Standard +The program tklabel.py will generate the output as shown in figure +\begin_inset LatexCommand ref +reference "fig:tkmain and tklabel outputs" + +\end_inset + +(b). + Terminate the program by clicking on the x displayed at the top right corner. + In this example, we used a Label widget to display some text. + The next example will show how to use a Button widget. + +\end_layout + +\begin_layout Standard +A Button widget can have a callback function, hello() in this case, that + gets executed when the user clicks on the Button. + The program will display a Button on the screen. + Every time you click on it, the function +\shape italic +hello +\shape default + will be executed. + The output of the program is shown in figure +\begin_inset LatexCommand ref +reference "fig:tkbutton and canvas" + +\end_inset + +(a). +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/tkbutton.png + width 4cm + +\end_inset + +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset Graphics + filename pics/tkcanvas.png + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Outputs of (a) tkbutton.py (b)tkcanvas.py +\begin_inset LatexCommand label +name "fig:tkbutton and canvas" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example tkbutton.py +\end_layout + +\begin_layout LyX-Code +from Tkinter import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def hello(): +\end_layout + +\begin_layout LyX-Code + print 'hello world' +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +w = Tk() # Creates the main Graphics window +\end_layout + +\begin_layout LyX-Code +b = Button(w, text = 'Click Me', command = hello) +\end_layout + +\begin_layout LyX-Code +b.pack() +\end_layout + +\begin_layout LyX-Code +w.mainloop() +\end_layout + +\begin_layout Standard +Canvas is another commonly used widget. + Canvas is a drawing area on which we can draw elements like line, arc, + rectangle, text etc. + The program tkcanvas.py creates a Canvas widget and binds the + event to the function draw(). + When left mouse button is pressed, a small rectangle are drawn at the cursor + position. + The output of the program is shown in figure +\begin_inset LatexCommand ref +reference "fig:tkbutton and canvas" + +\end_inset + +(b). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example tkcanvas.py +\end_layout + +\begin_layout LyX-Code +from Tkinter import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def draw(event): +\end_layout + +\begin_layout LyX-Code + c.create_rectangle(event.x, +\backslash + +\end_layout + +\begin_layout LyX-Code + event.y, event.x+5, event.y+5) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +w = Tk() +\end_layout + +\begin_layout LyX-Code +c = Canvas(w, width = 300, height = 200) +\end_layout + +\begin_layout LyX-Code +c.pack() +\end_layout + +\begin_layout LyX-Code +c.bind("", draw) +\end_layout + +\begin_layout LyX-Code +w.mainloop() +\end_layout + +\begin_layout Standard +The next program is a modification of tkcanvas.py. + The right mouse-button is bound to remove(). + Every time a rectangle is drawn, its return value is added to a list, a + global variable, and this list is used for removing the rectangles when + right button is pressed. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example tkcanvas2.py +\end_layout + +\begin_layout LyX-Code +from Tkinter import * +\end_layout + +\begin_layout LyX-Code +recs = [] # List keeping track of the rectangles +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def remove(event): +\end_layout + +\begin_layout LyX-Code + global recs +\end_layout + +\begin_layout LyX-Code + if len(recs) > 0: +\end_layout + +\begin_layout LyX-Code + c.delete(recs[0]) # delete from Canvas +\end_layout + +\begin_layout LyX-Code + recs.pop(0) # delete first item from list +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def draw(event): +\end_layout + +\begin_layout LyX-Code + global recs +\end_layout + +\begin_layout LyX-Code + r = c.create_rectangle(event.x, +\backslash + +\end_layout + +\begin_layout LyX-Code + event.y, event.x+5, event.y+5) +\end_layout + +\begin_layout LyX-Code + recs.append(r) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +w = Tk() +\end_layout + +\begin_layout LyX-Code +c = Canvas(w, width = 300, height = 200) +\end_layout + +\begin_layout LyX-Code +c.pack() +\end_layout + +\begin_layout LyX-Code +c.bind("", draw) +\end_layout + +\begin_layout LyX-Code +c.bind("", remove) +\end_layout + +\begin_layout LyX-Code +w.mainloop() +\end_layout + +\begin_layout Section +Object Oriented Programming in Python +\end_layout + +\begin_layout Standard +OOP is a programming paradigm that uses +\emph on +objects +\emph default + (Structures consisting of variables and methods) and their interactions + to design computer programs. + Python is an object oriented language but it does not force you to make + all programs object oriented and there is no advantage in making small + programs object oriented. + In this section, we will discuss some features of OOP. +\end_layout + +\begin_layout Standard +Before going to the new concepts, let us recollect some of the things we + have learned. + We have seen that the effect of operators on different data types is predefined. + For example +\begin_inset Formula $2*3$ +\end_inset + + results in +\begin_inset Formula $6$ +\end_inset + + and +\begin_inset Formula $2*'abc'$ +\end_inset + + results in +\begin_inset Formula $'abcabc'$ +\end_inset + +. + This behavior has been decided beforehand, based on some logic, by the + language designers. + One of the key features of OOP is the ability to create user defined data + types. + The user will specify, how the new data type will behave under the existing + operators like add, subtract etc. + and also define methods that will belong to the new data type. + +\end_layout + +\begin_layout Standard +We will design a new data type using the class keyword and define the behavior + of it. + In the program point.py, we define a class named Point. + The variables xpos and ypos are members of Point. + The __init__() function is executed whenever we create an instance of this + class, the member variables are initialized by this function. + The way in which an object belonging to this class is printed is decided + by the __str__ function. + We also have defined the behavior of add (+) and subtract (-) operators + for this class. + The + operator returns a new Point by adding the x and y coordinates of + two Points. + Subtracting a Point from another gives the distance between the two. + The method dist() returns the distance of a Point object from the origin. + We have not defined the behavior of Point under copy operation. + We can use the copy module of Python to copy objects. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example point.py +\end_layout + +\begin_layout LyX-Code +class Point: +\end_layout + +\begin_layout LyX-Code + ''' +\end_layout + +\begin_layout LyX-Code + This is documentation comment. + +\end_layout + +\begin_layout LyX-Code + help(Point) will display this. +\end_layout + +\begin_layout LyX-Code + ''' +\end_layout + +\begin_layout LyX-Code + def __init__(self, x=0, y=0): +\end_layout + +\begin_layout LyX-Code + self.xpos = x +\end_layout + +\begin_layout LyX-Code + self.ypos = y +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def __str__(self): # overloads print +\end_layout + +\begin_layout LyX-Code + return 'Point at (%f,%f)'%(self.xpos, self.ypos) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def __add__(self, other): #overloads + +\end_layout + +\begin_layout LyX-Code + xpos = self.xpos + other.xpos +\end_layout + +\begin_layout LyX-Code + ypos = self.ypos + other.ypos +\end_layout + +\begin_layout LyX-Code + return Point(xpos,ypos) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def __sub__(self, other): #overloads - +\end_layout + +\begin_layout LyX-Code + import math +\end_layout + +\begin_layout LyX-Code + dx = self.xpos - other.xpos +\end_layout + +\begin_layout LyX-Code + dy = self.ypos - other.ypos +\end_layout + +\begin_layout LyX-Code + return math.sqrt(dx**2+dy**2) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def dist(self): +\end_layout + +\begin_layout LyX-Code + import math +\end_layout + +\begin_layout LyX-Code + return math.sqrt(self.xpos**2 + self.ypos**2) +\end_layout + +\begin_layout Standard +The program point1.py imports the file point.py to use the class Point defined + inside it to demonstrate the properties of the class. + A self. + is prefixed when a method refers to member of the same object. + It refers to the variable used for invoking the method. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example point1.py +\end_layout + +\begin_layout LyX-Code +from point import * +\end_layout + +\begin_layout LyX-Code +origin = Point() +\end_layout + +\begin_layout LyX-Code +print origin +\end_layout + +\begin_layout LyX-Code +p1 = Point(4,4) +\end_layout + +\begin_layout LyX-Code +p2 = Point(8,7) +\end_layout + +\begin_layout LyX-Code +print p1 +\end_layout + +\begin_layout LyX-Code +print p2 +\end_layout + +\begin_layout LyX-Code +print p1 + p2 +\end_layout + +\begin_layout LyX-Code +print p1 - p2 +\end_layout + +\begin_layout LyX-Code +print p1.dist() +\end_layout + +\begin_layout Standard +Output of program point1.py is shown below. +\end_layout + +\begin_layout Quotation +Point at (0.000000,0.000000) +\end_layout + +\begin_layout Quotation +Point at (4.000000,4.000000) +\end_layout + +\begin_layout Quotation +Point at (8.000000,7.000000) +\end_layout + +\begin_layout Quotation +Point at (12.000000,11.000000) +\end_layout + +\begin_layout Quotation +5.0 +\end_layout + +\begin_layout Quotation +5.65685424949 +\end_layout + +\begin_layout Standard +In this section, we have demonstrated the OO concepts like class, object + and operator overloading. +\end_layout + +\begin_layout Subsection +Inheritance, reusing code +\end_layout + +\begin_layout Standard +\align left +Reuse of code is one of the main advantages of object oriented programming. + We can define another class that inherits all the properties of the Point + class, as shown below. + The __init__ function of colPoint calls the __init__ function of Point, + to get all work except initilization of color done. + All other methods and operator overloading defined for Point is inherited + by colPoint. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example cpoint.py +\end_layout + +\begin_layout LyX-Code +class colPoint(Point): #colPoint inherits Point +\end_layout + +\begin_layout LyX-Code + color = 'black' +\end_layout + +\begin_layout LyX-Code + def __init__(self,x=0,y=0,col='black'): +\end_layout + +\begin_layout LyX-Code + Point.__init__(self,x,y) +\end_layout + +\begin_layout LyX-Code + self.color = col +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def __str__(self): +\end_layout + +\begin_layout LyX-Code + return '%s colored Point at (%f,%f)'% +\backslash + +\end_layout + +\begin_layout LyX-Code + (self.color,self.xpos, self.ypos) +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example point2.py +\end_layout + +\begin_layout LyX-Code +from cpoint import * +\end_layout + +\begin_layout LyX-Code +p1 = Point(5,5) +\end_layout + +\begin_layout LyX-Code +rp1 = colPoint(2,2,'red') +\end_layout + +\begin_layout LyX-Code +print p1 +\end_layout + +\begin_layout LyX-Code +print rp1 +\end_layout + +\begin_layout LyX-Code +print rp1 + p1 +\end_layout + +\begin_layout LyX-Code +print rp1.dist() +\end_layout + +\begin_layout Standard +The output of point2.py is listed below. +\end_layout + +\begin_layout Standard +Point at (5.000000,5.000000) +\end_layout + +\begin_layout Standard +red colored Point at (2.000000,2.000000) +\end_layout + +\begin_layout Standard +Point at (7.000000,7.000000) +\end_layout + +\begin_layout Standard +2.82842712475 +\end_layout + +\begin_layout Standard +\align left +For a detailed explanation on the object oriented features of Python, refer + to chapters 13, 14 and 15 of the online book http://openbookproject.net//thinkCS +py/ +\end_layout + +\begin_layout Subsection +A graphics example program +\end_layout + +\begin_layout Standard +Object Oriented programming allows us to write Classes with a well defined + external interface hiding all the internal details. + This example shows a Class named 'disp', for drawing curves, providing + the xy coordinates within an arbitrary range . + The the world-to-screen coordinate conversion is performed internally. + The method named line() accepts a list of xy coordinates. + The file +\shape italic +tkplot_class.py +\shape default + defines the 'disp' class and is listed below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example tkplot_class.py +\end_layout + +\begin_layout LyX-Code +from Tkinter import * +\end_layout + +\begin_layout LyX-Code +from math import * +\end_layout + +\begin_layout LyX-Code +class disp: +\end_layout + +\begin_layout LyX-Code + def __init__(self, parent, width=400., height=200.): +\end_layout + +\begin_layout LyX-Code + self.parent = parent +\end_layout + +\begin_layout LyX-Code + self.SCX = width +\end_layout + +\begin_layout LyX-Code + self.SCY = height +\end_layout + +\begin_layout LyX-Code + self.border = 1 +\end_layout + +\begin_layout LyX-Code + self.canvas = Canvas(parent, width=width, height=height) +\end_layout + +\begin_layout LyX-Code + self.canvas.pack(side = LEFT) +\end_layout + +\begin_layout LyX-Code + self.setWorld(0 , 0, self.SCX, self.SCY) # scale factors +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def setWorld(self, x1, y1, x2, y2): +\end_layout + +\begin_layout LyX-Code + self.xmin = float(x1) +\end_layout + +\begin_layout LyX-Code + self.ymin = float(y1) +\end_layout + +\begin_layout LyX-Code + self.xmax = float(x2) +\end_layout + +\begin_layout LyX-Code + self.ymax = float(y2) +\end_layout + +\begin_layout LyX-Code + self.xscale = (self.xmax - self.xmin) / (self.SCX) +\end_layout + +\begin_layout LyX-Code + self.yscale = (self.ymax - self.ymin) / (self.SCY) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def w2s(self, p): #world-to-screen before plotting +\end_layout + +\begin_layout LyX-Code + ip = [] +\end_layout + +\begin_layout LyX-Code + for xy in p: +\end_layout + +\begin_layout LyX-Code + ix = self.border + int( (xy[0] - self.xmin) / self.xscale) +\end_layout + +\begin_layout LyX-Code + iy = self.border + int( (xy[1] - self.ymin) / self.yscale) +\end_layout + +\begin_layout LyX-Code + iy = self.SCY - iy +\end_layout + +\begin_layout LyX-Code + ip.append((ix,iy)) +\end_layout + +\begin_layout LyX-Code + return ip +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + def line(self, points, col='blue'): +\end_layout + +\begin_layout LyX-Code + ip = self.w2s(points) +\end_layout + +\begin_layout LyX-Code + t = self.canvas.create_line(ip, fill=col) +\end_layout + +\begin_layout Standard +The program +\shape italic +tkplot.py +\shape default + imports tkplot_class.py and plots two graphs. + The advantage of code reuse is evident from this example. + +\begin_inset Foot +status collapsed + +\begin_layout Standard +A more sophisticated version of the +\shape italic +disp +\shape default + class program (draw.py) is included in the package 'learn-by-coding', available + on the CD. + +\end_layout + +\end_inset + +. + Output of +\shape italic +tkplot.py +\shape default + is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-tkplot.py" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/tkplot.png + width 10cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of tkplot.py +\begin_inset LatexCommand label +name "fig:Output-of-tkplot.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example tkplot.py +\end_layout + +\begin_layout LyX-Code +from tkplot_class import * +\end_layout + +\begin_layout LyX-Code +from math import * +\end_layout + +\begin_layout LyX-Code +w = Tk() +\end_layout + +\begin_layout LyX-Code +gw1 = disp(w) +\end_layout + +\begin_layout LyX-Code +xy = [] +\end_layout + +\begin_layout LyX-Code +for k in range(200): +\end_layout + +\begin_layout LyX-Code + x = 2 * pi * k/200 +\end_layout + +\begin_layout LyX-Code + y = sin(x) +\end_layout + +\begin_layout LyX-Code + xy.append((x,y)) +\end_layout + +\begin_layout LyX-Code +gw1.setWorld(0, -1.0, 2*pi, 1.0) +\end_layout + +\begin_layout LyX-Code +gw1.line(xy) +\end_layout + +\begin_layout LyX-Code +gw2 = disp(w) +\end_layout + +\begin_layout LyX-Code +gw2.line([(10,10),(100,100),(350,50)], 'red') +\end_layout + +\begin_layout LyX-Code +w.mainloop() +\end_layout + +\begin_layout Section +Exercises +\end_layout + +\begin_layout Enumerate +Generate multiplication table of eight and write it to a file. +\end_layout + +\begin_layout Enumerate +Make a list and write it to a file using the pickle module. +\end_layout + +\begin_layout Enumerate +Write a Python program to open a file and write 'hello world' to it. +\end_layout + +\begin_layout Enumerate +Write a Python program to open a text file and read all lines from it. +\end_layout + +\begin_layout Enumerate +Write a program to generate the multiplication table of a number from the + user. + The output should be formatted as shown below +\newline +\InsetSpace ~ +\InsetSpace ~ +1 x 5 = \InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +5 +\newline +\InsetSpace ~ +\InsetSpace ~ +2 x 5 = \InsetSpace ~ +10 +\end_layout + +\begin_layout Enumerate +Define the list [1,2,3,4,5,6] using the range function. + Write code to insert a 10 after 2, delete 4, add 0 at the end and sort + it in the ascending order. +\end_layout + +\begin_layout Enumerate +Write Python code to generate the sequence of numbers +\newline +25 20 15 10 5 +\newline +using + range function . + Delete 15 from the result and sort it. + Print it using a for loop. +\end_layout + +\begin_layout Enumerate +Define a string +\shape italic +s = 'mary had a little lamb'. + +\newline + +\shape default +a) print it in reverse order +\newline +b) split it using space character as sepatator +\end_layout + +\begin_layout Enumerate +Join the elements of the list ['I', 'am', 'in', 'pieces'] using + character. + Do the same using a for loop also. +\end_layout + +\begin_layout Enumerate +Create a window with five buttons. + Make each button a different color. + Each button should have some text on it. + +\end_layout + +\begin_layout Enumerate +Create a program that will put words in alphabetical order. + The program should allow the user to enter as many words as he wants to. + +\end_layout + +\begin_layout Enumerate +Create a program that will check a sentence to see if it is a palindrome. + A palindrome is a sentence that reads the same backwards and forwards ('malayal +am'). + +\end_layout + +\begin_layout Enumerate +A text file contains two columns of numbers. + Write a program to read them and print the sum of numbers in each row. +\end_layout + +\begin_layout Enumerate +Read a String from the keyboard. + Multiply it by an integer to make its length more than 50. + How do you find out the smallest number that does the job. +\end_layout + +\begin_layout Enumerate +Write a program to find the length of the hypotenuse of a right triangle + from the length of other two sides, get the input from the user. +\end_layout + +\begin_layout Enumerate +Write a program displaying 2 labels and 2 buttons. + It should print two different messages when clicked on the two buttons. +\end_layout + +\begin_layout Enumerate +Write a program with a Canvas and a circle drawn on it. +\end_layout + +\begin_layout Enumerate +Write a program using for loop to reverse a string. + +\end_layout + +\begin_layout Enumerate +Write a Python function to calculate the GCD of two numbers +\end_layout + +\begin_layout Enumerate +Write a program to print the values of sine function from +\begin_inset Formula $0$ +\end_inset + + to +\begin_inset Formula $2\pi$ +\end_inset + + with 0.1 increments. + Find the mean value of them. +\end_layout + +\begin_layout Enumerate +Generate N random numbers using random.random() and find out howmay are below + 0.5 . + Repeat the same for different values of N to draw some conclusions. +\end_layout + +\begin_layout Enumerate +Use the equation +\begin_inset Formula $x=(-b\pm\sqrt{b^{2}-4ac})/2a$ +\end_inset + + to find the roots of +\begin_inset Formula $3x^{2}+6x+12=0$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Write a program to calculate the distance between points (x1,y1) and (x2,y2) + in a Cartesian plane. + Get the coordinates from the user. +\end_layout + +\begin_layout Enumerate +Write a program to evaluate +\begin_inset Formula $y$ +\end_inset + += +\begin_inset Formula $\sqrt{2.3a}+a^{2}+34.5$ +\end_inset + + for a = 1, 2 and 3. +\end_layout + +\begin_layout Enumerate +Print Fibanocci numbers upto 100, without using multiple assignment statement. +\end_layout + +\begin_layout Enumerate +Draw a chess board pattern using turtle graphics. +\end_layout + +\begin_layout Enumerate +Find the syntax error in the following code and correct it. +\newline +x=1 +\newline +while x <= + 10: +\newline +print x * 5 +\end_layout + +\begin_layout Chapter +Arrays and Matrices +\begin_inset LatexCommand label +name "sec:Arrays-and-Matrices" + +\end_inset + + +\end_layout + +\begin_layout Standard +In the previous chapter, we have learned the essential features of Python + language. + We also used the +\shape italic +math +\shape default + module to calculate trigonometric functions. + Using the tools introduced so far, let us generate the data points to plot + a sine wave. + The program sine.py generates the coordinates to plot a sine wave. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example sine.py +\end_layout + +\begin_layout LyX-Code +import math +\end_layout + +\begin_layout LyX-Code +x = 0.0 +\end_layout + +\begin_layout LyX-Code +while x < 2 * math.pi: +\end_layout + +\begin_layout LyX-Code + print x , math.sin(x) +\end_layout + +\begin_layout LyX-Code + x = x + 0.1 +\end_layout + +\begin_layout Standard +The output to the screen can be redirected to a file as shown below, from + the command prompt. + You can plot the data using some program like xmgrace. +\end_layout + +\begin_layout Standard +$ python sine.py > sine.dat +\end_layout + +\begin_layout Standard +$ xmgrace sine.dat +\end_layout + +\begin_layout Standard +It would be better if we could write such programs without using loops explicitl +y. + Serious scientific computing requires manipulating of large data structures + like matrices. + The +\shape italic +list +\shape default + data type of Python is very flexible but the performance is not acceptable + for large scale computing. + The need of special tools is evident even from the simple example shown + above. + +\shape italic +NumPy +\shape default + is a package widely used for scientific computing with Python. +\begin_inset Foot +status collapsed + +\begin_layout Standard +http://numpy.scipy.org/ +\end_layout + +\begin_layout Standard +http://www.scipy.org/Tentative_NumPy_Tutorial +\end_layout + +\begin_layout Standard +http://www.scipy.org/Numpy_Functions_by_Category +\end_layout + +\begin_layout Standard +http://www.scipy.org/Numpy_Example_List_With_Doc +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +The NumPy Module +\end_layout + +\begin_layout Standard +The +\shape italic +\color black +numpy +\shape default +\color inherit + module supports operations on compound data types like arrays and matrices. + +\shape italic +\color black + First thing to learn is how to create arrays and matrices using the numpy + package. + +\shape default +\color inherit + Python lists can be converted into multi-dimensional arrays. + There are several other functions that can be used for creating matrices. + The mathematical functions like sine, cosine etc. + of numpy accepts array objects as arguments and return the results as arrays + objects. + NumPy arrays can be indexed, sliced and copied like Python Lists. +\end_layout + +\begin_layout Standard +In the examples below, we will import numpy functions as local (using the + syntax +\shape italic +from numpy import * +\shape default +). + Since it is the only package used there is no possibility of any function + name conflicts. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example numpy1.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +x = array( [1, 2, 3] ) # Make array from list +\end_layout + +\begin_layout LyX-Code +print x , type(x) +\end_layout + +\begin_layout Standard +In the above example, we have created an array from a list. +\end_layout + +\begin_layout Subsection +Creating Arrays and Matrices +\end_layout + +\begin_layout Standard +We can also make multi-dimensional arrays. + Remember that a member of a list can be another list. + The following example shows how to make a two dimensional array. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example numpy3.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = [ [1,2] , [3,4] ] # make a list of lists +\end_layout + +\begin_layout LyX-Code +x = array(a) # and convert to an array +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout Standard +Other than than +\shape italic +array(), +\shape default + there are several other functions that can be used for creating different + types of arrays and matrices. + Some of them are described below. +\end_layout + +\begin_layout Subsubsection +arange(start, stop, step, dtype = None) +\end_layout + +\begin_layout Standard +Creates an evenly spaced one-dimensional array. + Start, stop, stepsize and datatype are the arguments. + If datatype is not given, it is deduced from the other arguments. + Note that, the values are generated within the interval, including start + but excluding stop. + +\end_layout + +\begin_layout Standard +arange(2.0, 3.0, .1) makes the array([ 2. + , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9]) +\end_layout + +\begin_layout Subsubsection +linspace(start, stop, number of elements) +\end_layout + +\begin_layout Standard +Similar to arange(). + Start, stop and number of samples are the arguments. + +\end_layout + +\begin_layout Standard +linspace(1, 2, 11) is equivalent to array([ 1. + , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. + ]) +\end_layout + +\begin_layout Subsubsection +zeros(shape, datatype) +\end_layout + +\begin_layout Standard +Returns a new array of given shape and type, filled zeros. + The arguments are shape and datatype. + For example +\emph on +\color black + zeros( [3,2], 'float') +\emph default +\color inherit + generates a 3 x 2 array filled with zeros as shown below. + If not specified, the type of elements defaults to int. +\end_layout + +\begin_layout Standard +\begin_inset Formula $\begin{array}{ccc} +0.0 & 0.0 & 0.0\\ +0.0 & 0.0 & 0.0\end{array}$ +\end_inset + + +\end_layout + +\begin_layout Subsubsection +ones(shape, datatype) +\end_layout + +\begin_layout Standard +Similar to zeros() except that the values are initialized to 1. +\end_layout + +\begin_layout Subsubsection +random.random(shape) +\end_layout + +\begin_layout Standard +Similar to the functions above, but the matrix is filled with random numbers + ranging from 0 to 1, of +\emph on +\color black +float +\emph default +\color inherit + type. + For example, random.random([3,3]) will generate the 3x3 matrix; +\end_layout + +\begin_layout LyX-Code +array([[ 0.3759652 , 0.58443562, 0.41632997], +\end_layout + +\begin_layout LyX-Code + [ 0.88497654, 0.79518478, 0.60402514], +\end_layout + +\begin_layout LyX-Code + [ 0.65468458, 0.05818105, 0.55621826]]) +\end_layout + +\begin_layout Subsubsection +reshape(array, newshape) +\end_layout + +\begin_layout Standard +We can also make multi-dimensions arrays by reshaping a one-dimensional + array. + The function +\shape italic +reshape() +\shape default + changes dimensions of an array. + The total number of elements must be preserved. + Working of +\shape italic +reshape() +\shape default + can be understood by looking at +\emph on +\color black +reshape.py +\emph default +\color inherit + and its result. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example reshape.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = arange(20) +\end_layout + +\begin_layout LyX-Code +b = reshape(a, [4,5]) +\end_layout + +\begin_layout LyX-Code +print b +\end_layout + +\begin_layout Standard +The result is shown below. +\end_layout + +\begin_layout LyX-Code +array([[ 0, 1, 2, 3, 4], +\end_layout + +\begin_layout LyX-Code + [ 5, 6, 7, 8, 9], +\end_layout + +\begin_layout LyX-Code + [10, 11, 12, 13, 14], +\end_layout + +\begin_layout LyX-Code + [15, 16, 17, 18, 19]]) +\end_layout + +\begin_layout Standard +The program +\shape italic +numpy2.py +\shape default + demonstrates most of the functions discussed so far. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example numpy2.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = arange(1.0, 2.0, 0.1) +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout LyX-Code +b = linspace(1,2,11) +\end_layout + +\begin_layout LyX-Code +print b +\end_layout + +\begin_layout LyX-Code +c = ones(5,'float') +\end_layout + +\begin_layout LyX-Code +print c +\end_layout + +\begin_layout LyX-Code +d = zeros(5, 'int') +\end_layout + +\begin_layout LyX-Code +print d +\end_layout + +\begin_layout LyX-Code +e = random.rand(5) +\end_layout + +\begin_layout LyX-Code +print e +\end_layout + +\begin_layout Standard +Output of this program will look like; +\end_layout + +\begin_layout Standard +[ 1. + 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9] +\end_layout + +\begin_layout Standard +[ 1. + 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. + ] +\end_layout + +\begin_layout Standard +[ 1. + 1. + 1. + 1. + 1.] +\end_layout + +\begin_layout Standard +[ 0. + 0. + 0. + 0. + 0.] +\end_layout + +\begin_layout Standard +[ 0.89039193 0.55640332 0.38962117 0.17238343 0.01297415] +\end_layout + +\begin_layout Subsection +Copying +\end_layout + +\begin_layout Standard +Numpy arrays can be copied using the copy method, as shown below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example array_copy.py +\end_layout + +\begin_layout LyX-Code +from mumpy import * +\end_layout + +\begin_layout LyX-Code +a = zeros(5) +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout LyX-Code +b = a +\end_layout + +\begin_layout LyX-Code +c = a.copy() +\end_layout + +\begin_layout LyX-Code +c[0] = 10 +\end_layout + +\begin_layout LyX-Code +print a, c +\end_layout + +\begin_layout LyX-Code +b[0] = 10 +\end_layout + +\begin_layout LyX-Code +print a,c +\end_layout + +\begin_layout Standard +The output of the program is shown below. + The statement +\begin_inset Formula $b=a$ +\end_inset + + does not make a copy of a. + Modifying b affects a, but c is a separate entity. +\end_layout + +\begin_layout Standard +[ 0. + 0. + 0.] +\end_layout + +\begin_layout Standard +[ 0. + 0. + 0.] [ 10. + 0. + 0.] +\end_layout + +\begin_layout Standard +[ 10. + 0. + 0.] [ 10. + 0. + 0.] +\end_layout + +\begin_layout Subsection +Arithmetic Operations +\end_layout + +\begin_layout Standard +Arithmetic operations performed on an array is carried out on all individual + elements. + Adding or multiplying an array object with a number will multiply all the + elements by that number. + However, adding or multiplying two arrays having identical shapes will + result in performing that operation with the corresponding elements. + To clarify the idea, have a look at +\emph on +\color black +aroper.py +\emph default +\color inherit + and its results. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example aroper.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = array([[2,3], [4,5]]) +\end_layout + +\begin_layout LyX-Code +b = array([[1,2], [3,0]]) +\end_layout + +\begin_layout LyX-Code +print a + b +\end_layout + +\begin_layout LyX-Code +print a * b +\end_layout + +\begin_layout Standard +The output will be as shown below +\end_layout + +\begin_layout LyX-Code +array([[3, 5], +\end_layout + +\begin_layout LyX-Code + [7, 5]]) +\end_layout + +\begin_layout LyX-Code +array([[ 2, 6], +\end_layout + +\begin_layout LyX-Code + [12, 0]]) +\end_layout + +\begin_layout Standard +Modifying this program for more operations is left as an exercise to the + reader. +\end_layout + +\begin_layout Subsection +cross product +\end_layout + +\begin_layout Standard +Returns the cross product of two vectors, defined by +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +A\times B=\left|\begin{array}{clc} +i & j & k\\ +A_{1} & A_{2} & A_{3}\\ +B_{1} & B_{2} & B_{3}\end{array}\right|=i(A_{2}B_{3}-A_{3}B_{2})+j(A_{1}B_{3}-A_{3}B_{1})+k(A_{1}B_{2}-A_{2}B_{1})\label{eq:cross product}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +It can be evaluated using the function cross((array1, array2). + The program +\shape italic +cross.py +\shape default + prints [-3, 6, -3] +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example cross.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = array([1,2,3]) +\end_layout + +\begin_layout LyX-Code +b = array([4,5,6]) +\end_layout + +\begin_layout LyX-Code +c = cross(a,b) +\end_layout + +\begin_layout LyX-Code +print c +\end_layout + +\begin_layout Subsection +dot product +\end_layout + +\begin_layout Standard +Returns the dot product of two vectors defined by +\begin_inset Formula $A.B=A_{1}B_{1}+A_{2}B_{2}+A_{3}B_{3}$ +\end_inset + + . + If you change the fourth line of +\emph on +\color black +cross.py +\emph default +\color inherit + to +\begin_inset Formula $c=dot(a,b)$ +\end_inset + +, the result will be 32. +\end_layout + +\begin_layout Subsection +Saving and Restoring +\end_layout + +\begin_layout Standard +An array can be saved to text file using +\shape italic +array.tofile(filename) +\shape default + and it can be read back using +\shape italic +array=fromfile() +\shape default + methods, as shown by the code fileio.py +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example fileio.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = arange(10) +\end_layout + +\begin_layout LyX-Code +a.tofile('myfile.dat') +\end_layout + +\begin_layout LyX-Code +b = fromfile('myfile.dat',dtype = 'int') +\end_layout + +\begin_layout LyX-Code +print b +\end_layout + +\begin_layout Standard +The function fromfile() sets dtype='float' by default. + In this case we have saved an integer array and need to specify that while + reading the file. + We could have saved it as float the the statement a.tofile('myfile.dat', + 'float'). +\end_layout + +\begin_layout Subsection +Matrix inversion +\end_layout + +\begin_layout Standard +The function +\shape italic +linalg.inv(matrix) +\shape default + computes the inverse of a square matrix, if it exists. + We can verify the result by multiplying the original matrix with the inverse. + Giving a singular matrix as the argument should normally result in an error + message. + In some cases, you may get a result whose elements are having very high + values, and it indicates an error. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example inv.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = array([ [4,1,-2], [2,-3,3], [-6,-2,1] ], dtype='float') +\end_layout + +\begin_layout LyX-Code +ainv = linalg.inv(a) +\end_layout + +\begin_layout LyX-Code +print ainv +\end_layout + +\begin_layout LyX-Code +print dot(a,ainv) +\end_layout + +\begin_layout Standard +Result of this program is printed below. +\end_layout + +\begin_layout LyX-Code +[[ 0.08333333 0.08333333 -0.08333333] +\end_layout + +\begin_layout LyX-Code + [-0.55555556 -0.22222222 -0.44444444] +\end_layout + +\begin_layout LyX-Code + [-0.61111111 0.05555556 -0.38888889]] +\end_layout + +\begin_layout LyX-Code +[[ 1.00000000e+00 -1.38777878e-17 0.00000000e+00] +\end_layout + +\begin_layout LyX-Code + [-1.11022302e-16 1.00000000e+00 0.00000000e+00] +\end_layout + +\begin_layout LyX-Code + [ 0.00000000e+00 2.08166817e-17 1.00000000e+00]] +\end_layout + +\begin_layout Section +Vectorized Functions +\end_layout + +\begin_layout Standard +The functions like sine, log etc. + from NumPy are capable of accepting arrays as arguments. + This eliminates the need of writing loops in our Python code. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example vfunc.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +a = array([1,10,100,1000]) +\end_layout + +\begin_layout LyX-Code +print log10(a) +\end_layout + +\begin_layout Standard +The output of the program is [ 0. + 1. + 2. + 3.] , where the log of each element is calculated and returned in an array. + This feature simplifies the programs a lot. + Numpy also provides a function to vectorize functions written by the user. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example vectorize.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def spf(x): +\end_layout + +\begin_layout LyX-Code + return 3*x +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +vspf = vectorize(spf) +\end_layout + +\begin_layout LyX-Code +a = array([1,2,3,4]) +\end_layout + +\begin_layout LyX-Code +print vspf(a) +\end_layout + +\begin_layout Standard +The output will be [ 3 6 9 12] . +\end_layout + +\begin_layout Section +Exercises +\end_layout + +\begin_layout Enumerate +Write code to make a one dimensional matrix with elements 5,10,15,20 and + 25. + make another matrix by slicing the first three elements from it. +\end_layout + +\begin_layout Enumerate +Create a +\begin_inset Formula $3\times2$ +\end_inset + + matrix and print the sum of its elements using for loops. +\end_layout + +\begin_layout Enumerate +Create a +\begin_inset Formula $2\times3$ +\end_inset + + matrix and fill it with random numbers. +\end_layout + +\begin_layout Enumerate +Use linspace to make an array from 0 to 10, with stepsize of 0.1 +\end_layout + +\begin_layout Enumerate +Use arange to make an 100 element array ranging from 0 to 10 +\end_layout + +\begin_layout Enumerate +Make an array a = [2,3,4,5] and copy it to +\shape italic +b +\shape default +. + change one element of +\shape italic +b +\shape default + and print both. +\end_layout + +\begin_layout Enumerate +Make a 3x3 matrix and multipy it by 5. +\end_layout + +\begin_layout Enumerate +Create two 3x3 matrices and add them. +\end_layout + +\begin_layout Enumerate +Write programs to demonstrate the dot and cross products. +\end_layout + +\begin_layout Enumerate +Using matrix inversion, solve the system of equations +\newline +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +4x1 − 2x2 + \InsetSpace ~ +\InsetSpace ~ +x3 = 11 +\newline +−2x1 + + 4x2 − 2x3 = −16 +\newline + \InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +x1 − 2x2 + 4x3 = 17 +\end_layout + +\begin_layout Enumerate +Find the new values of the coordinate (10,10) under a rotation by angle + +\begin_inset Formula $\pi/4$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +Write a vectorized function to evaluate +\begin_inset Formula $y=x^{2}$ +\end_inset + + and print the result for x=[1,2,3]. +\end_layout + +\begin_layout Chapter +Data visualization +\end_layout + +\begin_layout Standard +A graph or chart is used to present numerical data in visual form. + A graph is one of the easiest ways to compare numbers. + They should be used to make facts clearer and more understandable. + Results of mathematical computations are often presented in graphical format. + In this chapter, we will explore the Python modules used for generating + two and three dimensional graphs of various types. +\end_layout + +\begin_layout Section +The Matplotlib Module +\end_layout + +\begin_layout Standard +Matplotlib is a python package that produces publication quality figures + in a variety of hardcopy formats. + It also provides many functions for matrix manipulation. + You can generate plots, histograms, power spectra, bar charts, error-charts, + scatter-plots, etc, with just a few lines of code and have full control + of line styles, font properties, axes properties, etc. + The data points to the plotting functions are supplied as Python lists + or Numpy arrays. +\end_layout + +\begin_layout Standard +If you import matplotlib as +\emph on +\color black +pylab, +\emph default +\color inherit + the plotting functions from the submodules +\emph on +\color black + pyplot +\emph default +\color inherit + and matrix manipulation functions from the submodule +\emph on +\color black +mlab +\emph default +\color inherit + will be available as local functions. + Pylab also imports Numpy for you. + Let us start with some simple plots to become familiar with matplotlib. +\begin_inset Foot +status collapsed + +\begin_layout Standard +http://matplotlib.sourceforge.net/ +\end_layout + +\begin_layout Standard +http://matplotlib.sourceforge.net/users/pyplot_tutorial.html +\end_layout + +\begin_layout Standard +http://matplotlib.sourceforge.net/examples/index.html +\end_layout + +\begin_layout Standard +http://matplotlib.sourceforge.net/api/axes_api.html +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example plot1.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +data = [1,2,5] +\end_layout + +\begin_layout LyX-Code +plot(data) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +In the above example, the x-axis of the three points is taken from 0 to + 2. + We can specify both the axes as shown below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example plot2.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +x = [1,2,5] +\end_layout + +\begin_layout LyX-Code +y = [4,5,6] +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +By default, the color is blue and the line style is continuous. + This can be changed by an optional argument after the coordinate data, + which is the format string that indicates the color and line type of the + plot. + The default format string is ‘b-‘ (blue, continuous line). + Let us rewrite the above example to plot using red circles. + We will also set the ranges for x and y axes and label them. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example plot3.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +x = [1,2,5] +\end_layout + +\begin_layout LyX-Code +y = [4,5,6] +\end_layout + +\begin_layout LyX-Code +plot(x,y,'ro') +\end_layout + +\begin_layout LyX-Code +xlabel('x-axis') +\end_layout + +\begin_layout LyX-Code +ylabel('y-axis') +\end_layout + +\begin_layout LyX-Code +axis([0,6,1,7]) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/plot4.png + lyxscale 40 + width 4cm + +\end_inset + + +\begin_inset Graphics + filename pics/subplot1.png + lyxscale 40 + width 4cm + +\end_inset + + +\begin_inset Graphics + filename pics/piechart.png + lyxscale 40 + width 4cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of (a) plot4.py (b) subplot1.py (c) piechart.py +\begin_inset LatexCommand label +name "fig:Output-of-plot4.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The figure +\begin_inset LatexCommand ref +reference "fig:Output-of-plot4.py" + +\end_inset + + shows two different plots in the same window, using different markers and + colors. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example plot4.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +t = arange(0.0, 5.0, 0.2) +\end_layout + +\begin_layout LyX-Code +plot(t, t**2,'x') # +\begin_inset Formula $t^{2}$ +\end_inset + + +\end_layout + +\begin_layout LyX-Code +plot(t, t**3,'ro') # +\begin_inset Formula $t^{3}$ +\end_inset + + +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +We have just learned how to draw a simple plot using the pylab interface + of matplotlib. +\end_layout + +\begin_layout Subsection +Multiple plots +\end_layout + +\begin_layout Standard +Matplotlib allows you to have multiple plots in the same window, using the + subplot() command as shown in the example subplot1.py, whose output is shown + in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-plot4.py" + +\end_inset + +(b). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example subplot1.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +subplot(2,1,1) # the first subplot +\end_layout + +\begin_layout LyX-Code +plot([1,2,3,4]) +\end_layout + +\begin_layout LyX-Code +subplot(2,1,2) # the second subplot +\end_layout + +\begin_layout LyX-Code +plot([4,2,3,1]) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +The arguments to subplot function are NR (number of rows) , NC (number of + columns) and a figure number, that ranges from 1 to +\begin_inset Formula $NR*NC$ +\end_inset + +. + The commas between the arguments are optional if +\begin_inset Formula $NR*NC<10$ +\end_inset + +, ie. + subplot(2,1,1) can be written as subplot(211). + +\end_layout + +\begin_layout Standard +Another example of subplot is given is +\shape italic +subplot2.py +\shape default +. + You can modify the variable NR and NC to watch the results. + Please note that the % character has different meanings. + In +\shape italic +(pn+1)%5 +\shape default +, it is the reminder operator resulting in a number less than 5. + The % character also appears in the String formatting. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example subplot2.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +mark = ['x','o','^','+','>'] +\end_layout + +\begin_layout LyX-Code +NR = 2 # number of rows +\end_layout + +\begin_layout LyX-Code +NC = 3 # number of columns +\end_layout + +\begin_layout LyX-Code +pn = 1 +\end_layout + +\begin_layout LyX-Code +for row in range(NR): +\end_layout + +\begin_layout LyX-Code + for col in range(NC): +\end_layout + +\begin_layout LyX-Code + subplot(NR, NC, pn) +\end_layout + +\begin_layout LyX-Code + a = rand(10) * pn +\end_layout + +\begin_layout LyX-Code + plot(a, marker = mark[(pn+1)%5]) +\end_layout + +\begin_layout LyX-Code + xlabel('plot %d X'%pn) +\end_layout + +\begin_layout LyX-Code + ylabel('plot %d Y'%pn) +\end_layout + +\begin_layout LyX-Code + pn = pn + 1 +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Subsection +Polar plots +\end_layout + +\begin_layout Standard +Polar coordinates locate a point on a plane with one distance and one angle. + The distance ‘r’ is measured from the origin. + The angle +\begin_inset Formula $\theta$ +\end_inset + + is measured from some agreed starting point. + Use the positive part of the +\begin_inset Formula $x-axis$ +\end_inset + + as the starting point for measuring angles. + Measure positive angles anti-clockwise from the positive +\begin_inset Formula $x-axis$ +\end_inset + + and negative angles clockwise from it. +\end_layout + +\begin_layout Standard +Matplotlib supports polar plots, using the polar( +\begin_inset Formula $\theta,r$ +\end_inset + +) function. + Let us plot a circle using polar(). + For every point on the circle, the value of +\begin_inset Formula $radius$ +\end_inset + + is the same but the polar angle +\begin_inset Formula $\theta$ +\end_inset + + changes from +\begin_inset Formula $0$ +\end_inset + +to +\begin_inset Formula $2\pi$ +\end_inset + +. + Both the coordinate arguments must be arrays of equal size. + Since +\begin_inset Formula $\theta$ +\end_inset + + is having 100 points , +\begin_inset Formula $r$ +\end_inset + + also must have the same number. + This array can be generated using the +\begin_inset Formula $ones()$ +\end_inset + + function. + The axis([ +\begin_inset Formula $\theta_{min},\theta_{max},r_{min},r_{max}$ +\end_inset + +) function can be used for setting the scale. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example polar.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +th = linspace(0,2*pi,100) +\end_layout + +\begin_layout LyX-Code +r = 5 * ones(100) # radius = 5 +\end_layout + +\begin_layout LyX-Code +polar(th,r) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Subsection +Pie Charts +\end_layout + +\begin_layout Standard +An example of a pie chart is given below. + The percentage of different items and their names are given as arguments. + The output is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-plot4.py" + +\end_inset + +(c). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example piechart.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' +\end_layout + +\begin_layout LyX-Code +fracs = [25, 25, 30, 20] +\end_layout + +\begin_layout LyX-Code +pie(fracs, labels=labels) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +Plotting mathematical functions +\end_layout + +\begin_layout Standard +One of our objectives is to understand different mathematical functions + better, by plotting them graphically. + We will use the +\shape italic +arange +\shape default +, +\shape italic +linspace +\shape default + and +\shape italic +logspace +\shape default + functions from +\shape italic +numpy +\shape default + to generate the input data and also the vectorized versions of the mathematical + functions. + For arange(), the third argument is the stepsize. + The total number of elements is calculated from start, stop and stepsize. + In the case of linspace(), we provide start, stop and the total number + of points. + The step size is calculated from these three parameters. + Please note that to create a data set ranging from 0 to 1 (including both) + with a stepsize of 0.1, we need to specify linspace(0,1,11) and not linspace(0,1 +,10). + +\end_layout + +\begin_layout Subsection +Sine function and friends +\end_layout + +\begin_layout Standard +Let the first example be the familiar sine function. + The input data is from +\begin_inset Formula $-\pi$ +\end_inset + + to +\begin_inset Formula $+\pi$ +\end_inset + + radians +\begin_inset Foot +status collapsed + +\begin_layout Standard +Why do we need to give the angles in radians and not in degrees. + Angle in radian is the length of the arc defined by the given angle, with + unit radius. + Degree is just an arbitrary unit. +\end_layout + +\end_inset + +. + To make it a bit more interesting we are plotting +\begin_inset Formula $\sin x^{2}$ +\end_inset + + also. + The objective is to explain the concept of odd and even functions. + Mathematically, we say that a function +\begin_inset Formula $f(x)$ +\end_inset + + is even if +\begin_inset Formula $f(x)=f(-x)$ +\end_inset + + and is odd if +\begin_inset Formula $f(-x)=-f(x)$ +\end_inset + +. + Even functions are functions for which the left half of the plane looks + like the mirror image of the right half of the plane. + From the figure +\begin_inset LatexCommand ref +reference "fig:Sine and Circ" + +\end_inset + +(a) you can see that +\begin_inset Formula $\sin x$ +\end_inset + + is odd and +\begin_inset Formula $\sin x^{2}$ +\end_inset + + is even. + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/npsin.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/circ.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +(a) Output of npsin.py (b) Output of circ.py +\begin_inset LatexCommand label +name "fig:Sine and Circ" + +\end_inset + +. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example npsin.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +x = linspace(-pi, pi , 200) +\end_layout + +\begin_layout LyX-Code +y = sin(x) +\end_layout + +\begin_layout LyX-Code +y1 = sin(x*x) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +plot(x,y1,'r') +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +Exercise: Modify the program +\emph on +\color black +npsin.py +\emph default +\color inherit + to plot +\begin_inset Formula $\sin^{2}x$ +\end_inset + + , +\begin_inset Formula $\cos x$ +\end_inset + +, +\begin_inset Formula $\sin x^{3}$ +\end_inset + + etc. +\end_layout + +\begin_layout Subsection +Trouble with Circle +\end_layout + +\begin_layout Standard +Equation of a circle is +\begin_inset Formula $x^{2}+y^{2}=a^{2}$ +\end_inset + + , where a is the radius and the circle is located at the origin of the + coordinate system. + In order to plot it using Cartesian coordinates, we need to express +\begin_inset Formula $y$ +\end_inset + + in terms of +\begin_inset Formula $x$ +\end_inset + +, and is given by +\begin_inset Formula \[ +y=\sqrt{a^{2}-x^{2}}\] + +\end_inset + + +\end_layout + +\begin_layout Standard +We will create the x-coordinates ranging from +\begin_inset Formula $-a$ +\end_inset + + to +\begin_inset Formula $+a$ +\end_inset + + and calculate the corresponding values of y. + This will give us only half of the circle, since for each value of x, there + are two values of y (+y and -y). + The following program +\emph on +\color black +circ.py +\emph default +\color inherit + creates both to make the complete circle as shown in figure +\begin_inset LatexCommand ref +reference "fig:Sine and Circ" + +\end_inset + +(b). + Any multi-valued function will have this problem while plotting. + Such functions can be plotted better using parametric equations or using + the polar plot options, as explained in the coming sections. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example circ.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 10.0 +\end_layout + +\begin_layout LyX-Code +x = linspace(-a, a , 200) +\end_layout + +\begin_layout LyX-Code +yupper = sqrt(a**2 - x**2) +\end_layout + +\begin_layout LyX-Code +ylower = -sqrt(a**2 - x**2) +\end_layout + +\begin_layout LyX-Code +plot(x,yupper) +\end_layout + +\begin_layout LyX-Code +plot(x,ylower) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Subsection +Parametric plots +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/circpar.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/arcs.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +(a)Output of circpar.py. + (b)Output of arcs.py +\begin_inset LatexCommand label +name "fig:(a)Circpar and Arc" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The circle can be represented using the equations +\begin_inset Formula $x=a\cos\theta$ +\end_inset + + and +\begin_inset Formula $y=a\sin\theta$ +\end_inset + + . + To get the complete circle +\begin_inset Formula $\theta$ +\end_inset + + should vary from zero to +\begin_inset Formula $2\pi$ +\end_inset + + radians. + The output of circpar.py is shown in figure +\begin_inset LatexCommand ref +reference "fig:(a)Circpar and Arc" + +\end_inset + +(a). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example circpar.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 10.0 +\end_layout + +\begin_layout LyX-Code +th = linspace(0, 2*pi, 200) +\end_layout + +\begin_layout LyX-Code +x = a * cos(th) +\end_layout + +\begin_layout LyX-Code +y = a * sin(th) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +Changing the range of +\begin_inset Formula $\theta$ +\end_inset + + to less than +\begin_inset Formula $2\pi$ +\end_inset + + radians will result in an arc. + The following example plots several arcs with different radii. + The +\emph on +\color black +for +\emph default +\color inherit + loop will execute four times with the values of radius 5,10,15 and 20. + The range of +\begin_inset Formula $\theta$ +\end_inset + + also depends on the loop variable. + For the next three values it will be +\begin_inset Formula $\pi,1.5\pi and2\pi$ +\end_inset + + respectively. + The output is shown in figure +\begin_inset LatexCommand ref +reference "fig:(a)Circpar and Arc" + +\end_inset + +(b). + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example arcs.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 10.0 +\end_layout + +\begin_layout LyX-Code +for a in range(5,21,5): +\end_layout + +\begin_layout LyX-Code + th = linspace(0, pi * a/10, 200) +\end_layout + +\begin_layout LyX-Code + x = a * cos(th) +\end_layout + +\begin_layout LyX-Code + y = a * sin(th) +\end_layout + +\begin_layout LyX-Code + plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +Famous Curves +\end_layout + +\begin_layout Standard +Connection between different branches of mathematics like trigonometry, + algebra and geometry can be understood by geometrically representing the + equations. + You will find a large number of equations generating geometric patterns + having interesting symmetries. + A collection of them is available on the Internet +\begin_inset LatexCommand cite +key "wikipedia" + +\end_inset + + +\begin_inset LatexCommand cite +key "gap-system" + +\end_inset + +. + We will select some of them and plot here. + Exploring them further is left as an exercise to the reader. +\end_layout + +\begin_layout Subsection +Astroid +\end_layout + +\begin_layout Standard +The astroid was first discussed by Johann Bernoulli in 1691-92. + It also appears in Leibniz's correspondence of 1715. + It is sometimes called the tetracuspid for the obvious reason that it has + four cusps. + A circle of radius 1/4 rolls around inside a circle of radius 1 and a point + on its circumference traces an astroid. + The Cartesian equation is +\begin_inset Formula \begin{equation} +x^{\frac{2}{3}}+y^{\frac{2}{3}}=a^{\frac{2}{3}}\label{eq:Astroid-cart}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The parametric equations are +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +x=a\cos^{3}(t),y=a\sin^{3}(t)\label{eq:Astroid-Par}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +In order to plot the curve in the Cartesian system, we rewrite equation + +\begin_inset LatexCommand ref +reference "eq:Astroid-cart" + +\end_inset + + as +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +y=(a^{\frac{2}{3}}-x^{\frac{2}{3}})^{\frac{3}{2}}\] + +\end_inset + + +\end_layout + +\begin_layout Standard +The program +\emph on +\color black +astro.py +\emph default +\color inherit + plots the part of the curve in the first quadrant. + The program +\emph on +\color black +astropar.py +\emph default +\color inherit + uses the parametric equation and plots the complete curve. + Both are shown in figure +\begin_inset LatexCommand ref +reference "fig:(a)Astro.py" + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example astro.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 2 +\end_layout + +\begin_layout LyX-Code +x = linspace(0,a,100) +\end_layout + +\begin_layout LyX-Code +y = ( a**(2.0/3) - x**(2.0/3) )**(3.0/2) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example astropar.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 2 +\end_layout + +\begin_layout LyX-Code +t = linspace(-2*a,2*a,101) +\end_layout + +\begin_layout LyX-Code +x = a * cos(t)**3 +\end_layout + +\begin_layout LyX-Code +y = a * sin(t)**3 +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Subsection +Ellipse +\end_layout + +\begin_layout Standard +The ellipse was first studied by Menaechmus +\begin_inset LatexCommand cite +key "ellipse" + +\end_inset + + . + Euclid wrote about the ellipse and it was given its present name by Apollonius. + The focus and directrix of an ellipse were considered by Pappus. + Kepler, in 1602, said he believed that the orbit of Mars was oval, then + he later discovered that it was an ellipse with the sun at one focus. + In fact Kepler introduced the word +\emph on +\color black +focus +\emph default +\color inherit + and published his discovery in 1609. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/astro.png + lyxscale 30 + width 4cm + +\end_inset + + +\begin_inset Graphics + filename pics/astropar.png + lyxscale 40 + width 4cm + +\end_inset + + +\begin_inset Graphics + filename pics/lissa.png + lyxscale 40 + width 4cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +(a)Output of astro.py (b) astropar.py (c) lissa.py +\begin_inset LatexCommand label +name "fig:(a)Astro.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The Cartesian equation is +\begin_inset Formula \begin{equation} +\frac{x^{2}}{a^{2}}+\frac{y^{2}}{b^{2}}=1\label{eq:Ellipse-cart}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The parametric equations are +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +x=a\cos(t),y=b\sin(t)\label{eq:Ellipse-Par}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The program +\emph on +\color black +ellipse.py +\emph default +\color inherit + uses the parametric equation to plot the curve. + Modifying the parametric equations will result in Lissajous figures. + The output of lissa.py are shown in figure +\begin_inset LatexCommand ref +reference "fig:(a)Astro.py" + +\end_inset + +(c). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example ellipse.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 2 +\end_layout + +\begin_layout LyX-Code +b = 3 +\end_layout + +\begin_layout LyX-Code +t = linspace(0, 2 * pi, 100) +\end_layout + +\begin_layout LyX-Code +x = a * sin(t) +\end_layout + +\begin_layout LyX-Code +y = b * cos(t) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example lissa.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 2 +\end_layout + +\begin_layout LyX-Code +b = 3 +\end_layout + +\begin_layout LyX-Code +t= linspace(0, 2*pi,100) +\end_layout + +\begin_layout LyX-Code +x = a * sin(2*t) +\end_layout + +\begin_layout LyX-Code +y = b * cos(t) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +x = a * sin(3*t) +\end_layout + +\begin_layout LyX-Code +y = b * cos(2*t) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +The Lissajous curves are closed if the ratio of the arguments for sine and + cosine functions is an integer. + Otherwise open curves will result, both are shown in figure +\begin_inset LatexCommand ref +reference "fig:(a)Astro.py" + +\end_inset + +(c). + +\end_layout + +\begin_layout Subsection +Spirals of Archimedes and Fermat +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/archi.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/fermat.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +(a)Archimedes Spiral (b)Fermat's Spiral (c)Polar Rose +\begin_inset LatexCommand label +name "fig:(a)Archimedes-Fermat" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The spiral of Archimedes is represented by the equation +\begin_inset Formula $r=a\theta$ +\end_inset + +. + Fermat's Spiral is given by +\begin_inset Formula $r^{2}=a^{2}\theta$ +\end_inset + +. + The output of archi.py and fermat.py are shown in figure +\begin_inset LatexCommand ref +reference "fig:(a)Archimedes-Fermat" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example archi.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 2 +\end_layout + +\begin_layout LyX-Code +th= linspace(0, 10*pi,200) +\end_layout + +\begin_layout LyX-Code +r = a*th +\end_layout + +\begin_layout LyX-Code +polar(th,r) +\end_layout + +\begin_layout LyX-Code +axis([0, 2*pi, 0, 70]) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example fermat.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = 2 +\end_layout + +\begin_layout LyX-Code +th= linspace(0, 10*pi,200) +\end_layout + +\begin_layout LyX-Code +r = sqrt(a**2 * th) +\end_layout + +\begin_layout LyX-Code +polar(th,r) +\end_layout + +\begin_layout LyX-Code +polar(th, -r) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Subsection +Polar Rose +\end_layout + +\begin_layout Standard +A rose or rhodonea curve is a sinusoid +\begin_inset Formula $r=\cos(k\theta)$ +\end_inset + + plotted in polar coordinates. + If k is an even integer, the curve will have +\begin_inset Formula $2k$ +\end_inset + + petals and +\begin_inset Formula $k$ +\end_inset + + petals if it is odd. + If k is rational, then the curve is closed and has finite length. + If k is irrational, then it is not closed and has infinite length. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example rose.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +k = 4 +\end_layout + +\begin_layout LyX-Code +th = linspace(0, 10*pi,1000) +\end_layout + +\begin_layout LyX-Code +r = cos(k*th) +\end_layout + +\begin_layout LyX-Code +polar(th,r) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +There are dozens of other famous curves whose details are available on the + Internet. + It may be an interesting exercise for the reader. + For more details refer to +\begin_inset LatexCommand cite +key "gap-system,wikipedia,wolfram" + +\end_inset + +on the Internet. +\end_layout + +\begin_layout Section +Power Series +\begin_inset LatexCommand label +name "sec:Power-Series" + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/series_sin.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/rose.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Outputs of (a)series_sin.py (b) rose.py +\begin_inset LatexCommand label +name "fig:Functions-Series" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Trigonometric functions like sine and cosine sounds very familiar to all + of us, due to our interaction with them since high school days. + However most of us would find it difficult to obtain the numerical values + of , say +\begin_inset Formula $\sin5^{0}$ +\end_inset + +, without trigonometric tables or a calculator. + We know that differentiating a sine function twice will give you the original + function, with a sign reversal, which implies +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +\frac{d^{2}y}{dx^{2}}+y=0\] + +\end_inset + + +\end_layout + +\begin_layout Standard +which has a series solution of the form +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +y=a_{0}\sum_{n=0}^{\infty}\left(-1\right)^{n}\frac{x^{2n}}{(2n)!}+a_{1}\sum_{n=0}^{\infty}\left(-1\right)^{n}\frac{x^{2n+1}}{(2n+1)!}\label{eq:Trig Series}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +These are the Maclaurin series for sine and cosine functions. + The following code plots several terms of the sine series and their sum. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example series_sin.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +from scipy import factorial +\end_layout + +\begin_layout LyX-Code +x = linspace(-pi, pi, 50) +\end_layout + +\begin_layout LyX-Code +y = zeros(50) +\end_layout + +\begin_layout LyX-Code +for n in range(5): +\end_layout + +\begin_layout LyX-Code + term = (-1)**(n) * (x**(2*n+1)) / factorial(2*n+1) +\end_layout + +\begin_layout LyX-Code + y = y + term +\end_layout + +\begin_layout LyX-Code + #plot(x,term) #uncomment to see each term +\end_layout + +\begin_layout LyX-Code +plot(x, y, '+b') +\end_layout + +\begin_layout LyX-Code +plot(x, sin(x),'r') # compare with the real one +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +The output of +\emph on +\color black +series_sin.py +\emph default +\color inherit + is shown in figure +\begin_inset LatexCommand ref +reference "fig:Functions-Series" + +\end_inset + +(a). + For comparison the +\begin_inset Formula $\sin$ +\end_inset + + function from the library is plotted. + The values calculated by using the series becomes closer to the actual + value with more and more number of terms. + The error can be obtained by adding the following lines to +\emph on +series_sin.py +\emph default +and the effect of number of terms on the error can be studied. +\end_layout + +\begin_layout LyX-Code +err = y - sin(x) +\end_layout + +\begin_layout LyX-Code +plot(x,err) +\end_layout + +\begin_layout LyX-Code +for k in err: +\end_layout + +\begin_layout LyX-Code + print k +\end_layout + +\begin_layout Section +Fourier Series +\end_layout + +\begin_layout Standard +A Fourier series is an expansion of a periodic function +\begin_inset Formula $f(x)$ +\end_inset + + in terms of an infinite sum of sines and cosines. + The computation and study of Fourier series is known as harmonic analysis + and is extremely useful as a way to break up an arbitrary periodic function + into a set of simple terms that can be plugged in, solved individually, + and then recombined to obtain the solution to the original problem or an + approximation to it to whatever accuracy is desired or practical. + +\end_layout + +\begin_layout Standard +The examples below shows how to generate a square wave and sawtooth wave + using this technique. + To make the output better, increase the number of terms by changing the + argument of the range() function, used in the for loop. + The output of the programs are shown in figure +\begin_inset LatexCommand ref +reference "fig:Square-and-Sawtooth" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/sawtooth.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/square.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Sawtooth and Square waveforms generated using Fourier series +\begin_inset LatexCommand label +name "fig:Square-and-Sawtooth" + +\end_inset + +. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example fourier_square.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +N = 100 # number of points +\end_layout + +\begin_layout LyX-Code +x = linspace(0.0, 2 * pi, N) +\end_layout + +\begin_layout LyX-Code +y = zeros(N) +\end_layout + +\begin_layout LyX-Code +for n in range(5): +\end_layout + +\begin_layout LyX-Code + term = sin((2*n+1)*x) / (2*n+1) +\end_layout + +\begin_layout LyX-Code + y = y + term +\end_layout + +\begin_layout LyX-Code + plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example fourier_sawtooth.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +N = 100 # number of points +\end_layout + +\begin_layout LyX-Code +x = linspace(-pi, pi, N) +\end_layout + +\begin_layout LyX-Code +y = zeros(N) +\end_layout + +\begin_layout LyX-Code +for n in range(1,10): +\end_layout + +\begin_layout LyX-Code + term = (-1)**(n+1) * sin(n*x) / n +\end_layout + +\begin_layout LyX-Code + y = y + term +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +2D plot using colors +\end_layout + +\begin_layout Standard +A two dimensional matrix can be represented graphically by assigning a color + to each point proportional to the value of that element. + The program imshow1.py makes a +\begin_inset Formula $50\times50$ +\end_inset + + matrix filled with random numbers and uses +\shape italic +imshow() +\shape default + to plot it. + The result is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-imshow1.py" + +\end_inset + +(a). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example imshow1.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +m = random([50,50]) +\end_layout + +\begin_layout LyX-Code +imshow(m) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/imshow.png + lyxscale 70 + width 4cm + +\end_inset + + +\begin_inset Graphics + filename pics/julia.png + lyxscale 40 + width 4cm + +\end_inset + + +\begin_inset Graphics + filename pics/mgrid2.png + lyxscale 70 + width 4cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Outputs of (a) imshow1.py (b) julia.py (c) mgrid2.py +\begin_inset LatexCommand label +name "fig:Output-of-imshow1.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Fractals +\end_layout + +\begin_layout Standard +Fractals +\begin_inset Foot +status collapsed + +\begin_layout Standard +http://en.wikipedia.org/wiki/Fractal +\end_layout + +\end_inset + + are a part of fractal geometry, which is a branch of mathematics concerned + with irregular patterns made of parts that are in some way similar to the + whole (e.g.: twigs and tree branches). + A fractal is a design of infinite details. + It is created using a mathematical formula. + No matter how closely you look at a fractal, it never loses its detail. + It is infinitely detailed, yet it can be contained in a finite space. + Fractals are generally self-similar and independent of scale. + The theory of fractals was developed from Benoit Mandelbrot's study of + complexity and chaos. + Complex numbers are required to compute the Mandelbrot and Julia Set fractals + and it is assumed that the reader is familiar with the basics of complex + numbers. +\end_layout + +\begin_layout Standard +To compute the basic Mandelbrot (or Julia) set one uses the equation +\begin_inset Formula $f(z)\rightarrow z^{2}+c$ +\end_inset + + , where both z and c are complex numbers. + The function is evaluated in an iterative manner, ie. + the result is assigned to +\begin_inset Formula $z$ +\end_inset + + and the process is repeated. + The purpose of the iteration is to determine the behavior of the values + that are put into the function. + If the value of the function goes to infinity (practically to some fixed + value, like 1 or 2) after few iterations for a particular value of +\begin_inset Formula $z$ +\end_inset + + , that point is considered to be outside the Set. + A Julia set can be defined as the set of all the complex numbers +\begin_inset Formula $(z)$ +\end_inset + + such that the iteration of +\begin_inset Formula $f(z)\rightarrow z^{2}+c$ +\end_inset + + is bounded for a particular value of c. + +\end_layout + +\begin_layout Standard +To generate the fractal the number of iterations required to diverge is + calculated for a set of points in the selected region in the complex plane. + The number of iterations taken for diverging decides the color of each + point. + The points that did not diverge, belonging to the set, are plotted with + the same color. + The program +\emph on +julia.py +\emph default + generates a fractal using a julia set. + The program creates a 2D array (200 x 200 elements). + For our calculations, this array represents a rectangular region on the + complex plane centered at the origin whose lower left corner is (-1,-j) + and the upper right corner is (1+j). + For 200x200 equidistant points in this plane the number of iterations are + calculated and that value is given to the corresponding element of the + 2D matrix. + The plotting is taken care by the imshow function. + The output is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-imshow1.py" + +\end_inset + +(b). + Change the value of +\begin_inset Formula $c$ +\end_inset + + and run the program to generate more patterns. + The equation also may be changed. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example julia.py +\end_layout + +\begin_layout LyX-Code +''' +\end_layout + +\begin_layout LyX-Code +Region of a complex plane ranging from -1 to +1 in both real +\end_layout + +\begin_layout LyX-Code +and imaginary axes is represented using a 2D matrix +\end_layout + +\begin_layout LyX-Code +having X x Y elements.For X and Y equal to 200,the stepsize +\end_layout + +\begin_layout LyX-Code +in the complex plane is 2.0/200 = 0.01. +\end_layout + +\begin_layout LyX-Code +The nature of the pattern depends much on the value of c. +\end_layout + +\begin_layout LyX-Code +''' +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +X = 200 +\end_layout + +\begin_layout LyX-Code +Y = 200 +\end_layout + +\begin_layout LyX-Code +MAXIT = 100 +\end_layout + +\begin_layout LyX-Code +MAXABS = 2.0 +\end_layout + +\begin_layout LyX-Code +c = 0.02 - 0.8j # The constant in equation z**2 + c +\end_layout + +\begin_layout LyX-Code +m = zeros([X,Y]) # A two dimensional array +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def numit(x,y): # number of iterations to diverge +\end_layout + +\begin_layout LyX-Code + z = complex(x,y) +\end_layout + +\begin_layout LyX-Code + for k in range(MAXIT): +\end_layout + +\begin_layout LyX-Code + if abs(z) <= MAXABS: +\end_layout + +\begin_layout LyX-Code + z = z**2 + c +\end_layout + +\begin_layout LyX-Code + else: +\end_layout + +\begin_layout LyX-Code + return k # diverged after k trials +\end_layout + +\begin_layout LyX-Code + return MAXIT # did not diverge, +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +for x in range(X): +\end_layout + +\begin_layout LyX-Code + for y in range(Y): +\end_layout + +\begin_layout LyX-Code + re = 0.01 * x - 1.0 # complex number for +\end_layout + +\begin_layout LyX-Code + im = 0.01 * y - 1.0 # this (x,y) coordinate +\end_layout + +\begin_layout LyX-Code + m[x][y] = numit(re,im) # get the color for (x,y) +\end_layout + +\begin_layout LyX-Code +imshow(m) # Colored plot using the 2D matrix +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +Meshgrids +\end_layout + +\begin_layout Standard +in order to make contour and 3D plots, we need to understand the meshgrid. + Consider a rectangular area on the X-Y plane. + Assume there are m divisions in the X direction and n divisions in the + Y direction. + We now have a +\begin_inset Formula $m\times n$ +\end_inset + + mesh. + A meshgrid is the coordinates of a grid in a 2D plane, x coordinates of + each mesh point is held in one matrix and y coordinates are held in another. + +\end_layout + +\begin_layout Standard +The NumPy function meshgrid() creates two 2x2 matrices from two 1D arrays, + as shown in the example below. + This can be used for plotting surfaces and contours, by assigning a Z coordinat +e to every mesh point. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example mgrid1.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +x = arange(0, 3, 1) +\end_layout + +\begin_layout LyX-Code +y = arange(0, 3, 1) +\end_layout + +\begin_layout LyX-Code +gx, gy = meshgrid(x, y) +\end_layout + +\begin_layout LyX-Code +print gx +\end_layout + +\begin_layout LyX-Code +print gy +\end_layout + +\begin_layout Standard +\align block +The outputs are as shown below, gx(i,j) contains the x-coordinate and gx(i,j) + contains the y-coordinate of the point (i,j). +\end_layout + +\begin_layout Standard +[[0 1 2] +\end_layout + +\begin_layout Standard +[0 1 2] +\end_layout + +\begin_layout Standard +[0 1 2]] +\end_layout + +\begin_layout Standard +[[0 0 0] +\end_layout + +\begin_layout Standard +[1 1 1] +\end_layout + +\begin_layout Standard +[2 2 2]] +\end_layout + +\begin_layout Standard +\align block +We can evaluate a function at all points of the meshgrid by passing the + meshgrid as an argument. + The program mgrid2.py plots the sum of sines of the x and y coordinates, + using imshow to get a result as shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-imshow1.py" + +\end_inset + +(c). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example mgrid2.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +x = arange(-3*pi, 3*pi, 0.1) +\end_layout + +\begin_layout LyX-Code +y = arange(-3*pi, 3*pi, 0.1) +\end_layout + +\begin_layout LyX-Code +xx, yy = meshgrid(x, y) +\end_layout + +\begin_layout LyX-Code +z = sin(xx) + sin(yy) +\end_layout + +\begin_layout LyX-Code +imshow(z) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +3D Plots +\end_layout + +\begin_layout Standard +Matplotlib supports several types of 3D plots, using the Axes3D class. + The following three lines of code are required in every program making + 3D plots using matplotlib. +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +from mpl_toolkits.mplot3d import Axes3D +\end_layout + +\begin_layout LyX-Code +ax = Axes3D(figure()) +\end_layout + +\begin_layout Subsection +Surface Plots +\end_layout + +\begin_layout Standard +The example mgrid2.py is re-written to make a surface plot using the same + equation in surface3d.py and the result is shown in figure +\begin_inset LatexCommand ref +reference "fig:Suface3d and Line3d" + +\end_inset + +(a). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example sufrace3d.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +from mpl_toolkits.mplot3d import Axes3D +\end_layout + +\begin_layout LyX-Code +ax = Axes3D(figure()) +\end_layout + +\begin_layout LyX-Code +x = arange(-3*pi, 3*pi, 0.1) +\end_layout + +\begin_layout LyX-Code +y = arange(-3*pi, 3*pi, 0.1) +\end_layout + +\begin_layout LyX-Code +xx, yy = meshgrid(x, y) +\end_layout + +\begin_layout LyX-Code +z = sin(xx) + sin(yy) +\end_layout + +\begin_layout LyX-Code +ax.plot_surface(xx, yy, z, cmap=cm.jet, cstride=1) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/surface3d.png + width 5cm + +\end_inset + + +\begin_inset Graphics + filename pics/line3d.png + width 5cm + +\end_inset + + +\end_layout + +\begin_layout Standard +Output of (a)surface3d.py (b)line3d.py +\begin_inset LatexCommand label +name "fig:Suface3d and Line3d" + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Line Plots +\end_layout + +\begin_layout Standard +Example of a line plot is shown in line3d.py along with the output in figure + +\begin_inset LatexCommand ref +reference "fig:Suface3d and Line3d" + +\end_inset + +(b). +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example line3d.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +from mpl_toolkits.mplot3d import Axes3D +\end_layout + +\begin_layout LyX-Code +ax = Axes3D(figure()) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +phi = linspace(0, 2*pi, 400) +\end_layout + +\begin_layout LyX-Code +x = cos(phi) +\end_layout + +\begin_layout LyX-Code +y = sin(phi) +\end_layout + +\begin_layout LyX-Code +z = 0 +\end_layout + +\begin_layout LyX-Code +ax.plot(x, y, z, label = 'x')# circle +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +z = sin(4*phi) # modulated in z plane +\end_layout + +\begin_layout LyX-Code +ax.plot(x, y, z, label = 'x') +\end_layout + +\begin_layout LyX-Code +ax.set_xlabel('X') +\end_layout + +\begin_layout LyX-Code +ax.set_ylabel('Y') +\end_layout + +\begin_layout LyX-Code +ax.set_zlabel('Z') +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +Modify the code to make x = sin(2*phi) to observe Lissajous figures +\end_layout + +\begin_layout Subsection +Wire-frame Plots +\end_layout + +\begin_layout Standard +Data for a sphere is generated using the outer product of matrices and plotted, + by sphere.py. +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +from mpl_toolkits.mplot3d import Axes3D +\end_layout + +\begin_layout LyX-Code +ax = Axes3D(figure()) +\end_layout + +\begin_layout LyX-Code +phi = linspace(0, 2 * pi, 100) +\end_layout + +\begin_layout LyX-Code +theta = linspace(0, pi, 100) +\end_layout + +\begin_layout LyX-Code +x = 10 * outer(cos(phi), sin(theta)) +\end_layout + +\begin_layout LyX-Code +y = 10 * outer(sin(phi), sin(theta)) +\end_layout + +\begin_layout LyX-Code +z = 10 * outer(ones(size(phi)), cos(theta)) +\end_layout + +\begin_layout LyX-Code +ax.plot_wireframe(x,y,z, rstride=2, cstride=2) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +Mayavi, 3D visualization +\end_layout + +\begin_layout Standard +For more efficient and advanced 3D visualization, use Mayavi that is available + on most of the GNU/Linux platforms. + Program ylm20.py plots the spherical harmonics +\begin_inset Formula $Y_{m}^{l}$ +\end_inset + + for +\begin_inset Formula $l=2,m=0$ +\end_inset + +, using mayavi. + The plot of +\begin_inset Formula $Y_{2}^{0}=\frac{1}{4}\sqrt{\frac{5}{\pi}}(3\cos^{2}\phi-1)$ +\end_inset + + is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-ylm20.py" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example ylm20.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +from enthought.mayavi import mlab +\end_layout + +\begin_layout LyX-Code +polar = linspace(0,pi,100) +\end_layout + +\begin_layout LyX-Code +azimuth = linspace(0, 2*pi,100) +\end_layout + +\begin_layout LyX-Code +phi,th = meshgrid(polar, azimuth) +\end_layout + +\begin_layout LyX-Code +r = 0.25 * sqrt(5.0/pi) * (3*cos(phi)**2 - 1) +\end_layout + +\begin_layout LyX-Code +x = r*sin(phi)*cos(th) +\end_layout + +\begin_layout LyX-Code +y = r*cos(phi) +\end_layout + +\begin_layout LyX-Code +z = r*sin(phi)*sin(th) +\end_layout + +\begin_layout LyX-Code +mlab.mesh(x, y, z) +\end_layout + +\begin_layout LyX-Code +mlab.show() +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/ylm20.png + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of ylm20.py +\begin_inset LatexCommand label +name "fig:Output-of-ylm20.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Exercises +\end_layout + +\begin_layout Enumerate +Plot a sine wave using markers +, o and x using three different colors. +\end_layout + +\begin_layout Enumerate +Plot +\begin_inset Formula $\tan\theta$ +\end_inset + + from +\begin_inset Formula $\theta$ +\end_inset + + from +\begin_inset Formula $-2\pi$ +\end_inset + + to +\begin_inset Formula $2\pi$ +\end_inset + +, watch for singular points. +\end_layout + +\begin_layout Enumerate +Plot a circle using the polar() function. +\end_layout + +\begin_layout Enumerate +Plot the following from the list of Famous curves at reference +\begin_inset LatexCommand cite +key "gap-system" + +\end_inset + + +\newline +a) +\begin_inset Formula $r^{2}=a^{2}\cos2\theta$ +\end_inset + + , Lemniscate of Bernoulli +\newline +b) +\begin_inset Formula $y=\sqrt{2\pi}e^{-x^{2}/2}$ +\end_inset + + Frequency curve +\newline +c) +\begin_inset Formula $a\cosh(x/a)$ +\end_inset + + catenary +\newline +d) +\begin_inset Formula $\sin(a\theta)$ +\end_inset + + for a = 2, 3, and 4. + Rhodonea curves +\end_layout + +\begin_layout Enumerate +Generate a triangular wave using Fourier series. +\end_layout + +\begin_layout Enumerate +Evaluate +\begin_inset Formula $y=\sum_{n=1}^{n=\infty}\frac{(-1)^{n}x^{2n+1}}{(2n+1)!}$ +\end_inset + + for 10 terms. +\end_layout + +\begin_layout Enumerate +Write a Python program to calculate sine function using series expansion + and plot it. +\end_layout + +\begin_layout Enumerate +Write a Python program to plot +\begin_inset Formula $y=5x^{2}+3x+2$ +\end_inset + + (for x from 0 to 5, 20 points),using pylab, with axes and title. + Use red colored circles to mark the points. + +\end_layout + +\begin_layout Enumerate +Write a Python program to plot a Square wave using Fourier series, number + of terms should be a variable. +\end_layout + +\begin_layout Enumerate +Write a Python program to read the x and y coordinates from a file, in a + two column format, and plot them. + +\end_layout + +\begin_layout Enumerate +Plot +\begin_inset Formula $x^{2}+y^{2}+z^{2}=25$ +\end_inset + + using mayavi. +\end_layout + +\begin_layout Enumerate +Make a plot z = sin(x) + sin(y) using imshow() , from +\begin_inset Formula $-4\pi to4\pi$ +\end_inset + + for both x and y. +\end_layout + +\begin_layout Enumerate +Write Python code to plot +\begin_inset Formula $y=x^{2}$ +\end_inset + +, with the axes labelled +\end_layout + +\begin_layout Chapter +Type setting using LaTeX +\end_layout + +\begin_layout Standard +LaTeX is a powerful typesetting system, used for producing scientific and + mathematical documents of high typographic quality. + LaTeX is not a word processor! Instead, LaTeX encourages authors not to + worry too much about the appearance of their documents but to concentrate + on getting the right content. + You prepare your document using a plain text editor, and the formatting + is specified by commands embedded in your document. + The appearance of your document is decided by LaTeX, but you need to specify + it using some commands. + In this chapter, we will discuss some of these commands mainly to typeset + mathematical equations. + +\begin_inset Foot +status collapsed + +\begin_layout Standard +http://www.latex-project.org/ +\end_layout + +\begin_layout Standard +http://mirror.ctan.org/info/lshort/english/lshort.pdf +\end_layout + +\begin_layout Standard +http://en.wikibooks.org/wiki/LaTeX +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Document classes +\end_layout + +\begin_layout Standard +LaTeX provides several predefined document classes (book, article, letter, + report, etc.) with extensive sectioning and cross-referencing capabilities. + Title, chapter, section, subsection, paragraph, subparagraph etc. + are specified by commands and it is the job of LaTeX to format them properly. + It does the numbering of sections automatically and can generate a table + of contents if requested. + Figures and tables are also numbered and placed without the user worrying + about it. +\end_layout + +\begin_layout Standard +The latex source document (the .tex file) is compiled by the latex program + to generate a device independent (the .dvi file) output. + From that you can generate postscript or PDF versions of the document. + We will start with a simple example +\shape italic +hello.tex +\shape default + to demonstrate this process. + In a line, anything after a % sign is taken as a comment. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example hello.tex +\end_layout + +\begin_layout LyX-Code + +\backslash +documentclass{article} +\end_layout + +\begin_layout LyX-Code + +\backslash +begin{document} +\end_layout + +\begin_layout LyX-Code +Small is beautiful. + % I am just a comment +\end_layout + +\begin_layout LyX-Code + +\backslash +end{document} +\end_layout + +\begin_layout Standard +Compile, view and make a PDF file using the following commands: +\end_layout + +\begin_layout Standard +$ latex hello.tex +\end_layout + +\begin_layout Standard +$ xdvi hello.dvi +\end_layout + +\begin_layout Standard +$ dvipdf hello.dvi +\end_layout + +\begin_layout Standard +\align left +The output will look like : Small is beautiful. +\end_layout + +\begin_layout Section +Modifying Text +\end_layout + +\begin_layout Standard +In the next example +\shape italic +texts.tex +\shape default + we will demonstrate different types of text. + We will +\backslash +newline or +\backslash + +\backslash + to generate a line break. + A blank line will start a new paragraph. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example texts.tex +\end_layout + +\begin_layout Quotation + +\backslash +documentclass{article} +\end_layout + +\begin_layout Quotation + +\backslash +begin{document} +\end_layout + +\begin_layout Quotation +This is normal text. + +\end_layout + +\begin_layout Quotation + +\backslash +newline +\end_layout + +\begin_layout Quotation + +\backslash +textbf{This is bold face text.} +\end_layout + +\begin_layout Quotation + +\backslash +textit{This is italic text.} +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation + +\backslash +tiny{This is tiny text.} +\end_layout + +\begin_layout Quotation + +\backslash +large{This is large text.} +\end_layout + +\begin_layout Quotation + +\backslash +underline{This is underlined text.} +\end_layout + +\begin_layout Quotation + +\backslash +end{document} +\end_layout + +\begin_layout Standard +\align left +Compiling +\shape italic +texts.tex, +\shape default + as explained in the previous example, will genearte the following output. +\end_layout + +\begin_layout Standard + +\lyxline + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +textnormal{This is normal text.} +\end_layout + +\begin_layout Standard + + +\backslash +newline +\end_layout + +\begin_layout Standard + + +\backslash +textbf{This is bold face text.} +\end_layout + +\begin_layout Standard + + +\backslash +textit{This is italic text.} +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + + +\backslash +tiny{This is tiny text.} +\end_layout + +\begin_layout Standard + + +\backslash +large{This is large text.} +\end_layout + +\begin_layout Standard + + +\backslash +underline{This is underlined text.} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\lyxline + +\end_layout + +\begin_layout Section +Dividing the document +\end_layout + +\begin_layout Standard +A document is generally organized in to sections, subsections, paragraphs + etc. + and Latex allows us to do this by inserting commands like section subsection + etc. + If the document class is book, you can have chapters also. + There is a command to generate the table of contents from the sectioning + information. +\begin_inset Foot +status collapsed + +\begin_layout Standard +To generate the table of contents, you may have to compile the document + two times. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/sections.png + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of sections.tex +\begin_inset LatexCommand label +name "fig:Output-of-sections.tex" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example sections.tex +\end_layout + +\begin_layout Quotation + +\backslash +documentclass{article} +\end_layout + +\begin_layout Quotation + +\backslash +begin{document} +\end_layout + +\begin_layout Quotation + +\backslash +tableofcontents +\end_layout + +\begin_layout Quotation + +\backslash +section{Animals} +\end_layout + +\begin_layout Quotation +This document defines sections. + +\end_layout + +\begin_layout Quotation + +\backslash +subsection{Domestic} +\end_layout + +\begin_layout Quotation +This document also defines subsections. + +\end_layout + +\begin_layout Quotation + +\backslash +subsubsection{cats and dogs} +\end_layout + +\begin_layout Quotation +Cats and dogs are Domestic animals. + +\end_layout + +\begin_layout Quotation + +\backslash +end{document} +\end_layout + +\begin_layout Standard +The output of sections.tex is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-sections.tex" + +\end_inset + +. +\end_layout + +\begin_layout Section +Environments +\end_layout + +\begin_layout Standard +Environments decide the way in which your text is formatted : numbered lists, + tables, equations, quotations, justifications, figure, etc. + are some of the environments. + Environments are defined like : +\end_layout + +\begin_layout Standard + +\backslash +begin{environment_name} your text +\backslash +end{environment_name} +\end_layout + +\begin_layout Standard +\align block +The example program +\shape italic +environ.tex +\shape default + demonstrates some of the environments. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example environs.tex +\end_layout + +\begin_layout Standard + +\backslash +documentclass{article} +\end_layout + +\begin_layout Standard + +\backslash +begin{document} +\end_layout + +\begin_layout Standard + +\backslash +begin{flushleft} A bulleted list. + +\backslash +end{flushleft} +\end_layout + +\begin_layout Standard + +\backslash +begin{itemize} +\backslash +item dog +\backslash +item cat +\backslash +end{itemize} +\end_layout + +\begin_layout Standard + +\backslash +begin{center} A numbered List. + +\backslash +end{center} +\end_layout + +\begin_layout Standard + +\backslash +begin{enumerate} +\backslash +item dog +\backslash +item cat +\backslash +end{enumerate} +\end_layout + +\begin_layout Standard + +\backslash +begin{flushright} This text is right justified. + +\backslash +end{flushright} +\end_layout + +\begin_layout Standard + +\backslash +begin{quote} +\end_layout + +\begin_layout Standard +Any text inside quote +\backslash + +\backslash + environment will appe- +\backslash + +\backslash + ar as typed. +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + +\backslash +end{quote} +\end_layout + +\begin_layout Standard + +\backslash +begin{verbatim} +\end_layout + +\begin_layout Standard +x = 1 +\end_layout + +\begin_layout Standard +while x <= 10: +\end_layout + +\begin_layout Standard +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +print x * 5 +\end_layout + +\begin_layout Standard +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +x = x + 1 +\end_layout + +\begin_layout Standard + +\backslash +end{verbatim} +\end_layout + +\begin_layout Standard + +\backslash +end{document} +\end_layout + +\begin_layout Standard +\align block +The enumerate and itemize are used for making numbered and non-numbered + lists. + Flushleft, flushright and center are used for specifying text justification. + Quote and verbatim are used for portions where we do not want LaTeX to + do the formatting. + The output of environs.tex is shown below. +\end_layout + +\begin_layout Standard + +\lyxline + +\end_layout + +\begin_layout Standard +\align block +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +begin{flushleft} A bulleted list. + +\backslash +end{flushleft} +\end_layout + +\begin_layout Standard + + +\backslash +begin{itemize} +\backslash +item dog +\backslash +item cat +\backslash +end{itemize} +\end_layout + +\begin_layout Standard + + +\backslash +begin{center} A numbered List. + +\backslash +end{center} +\end_layout + +\begin_layout Standard + + +\backslash +begin{enumerate} +\backslash +item dog +\backslash +item cat +\backslash +end{enumerate} +\end_layout + +\begin_layout Standard + + +\backslash +begin{flushright} This text is right justified. + +\backslash +end{flushright} +\end_layout + +\begin_layout Standard + + +\backslash +begin{quote} +\end_layout + +\begin_layout Standard + +Any text inside quote +\backslash + +\backslash + environment will appe- +\backslash + +\backslash + ar as typed. +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + + +\backslash +end{quote} +\end_layout + +\begin_layout Standard + + +\backslash +begin{verbatim} +\end_layout + +\begin_layout Standard + +x = 1 # a Python program +\end_layout + +\begin_layout Standard + +while x <= 10: +\end_layout + +\begin_layout Standard + + print x * 5 +\end_layout + +\begin_layout Standard + + x = x + 1 +\end_layout + +\begin_layout Standard + + +\backslash +end{verbatim} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\lyxline + +\end_layout + +\begin_layout Section +Typesetting Equations +\end_layout + +\begin_layout Standard +There two ways to typeset mathematical formulae: in-line within a paragraph, + or in a separate line. + In-line equations are entered between +\shape italic +two $ symbols +\shape default +. + The equations in a separate line can be done within the +\shape italic +equation +\shape default + environment. + Both are demonstrated in math1.tex. + +\shape italic +We use the amsmath package in this example. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example math1.tex +\end_layout + +\begin_layout Quotation + +\backslash +documentclass{article} +\end_layout + +\begin_layout Quotation + +\backslash +usepackage{amsmath} +\end_layout + +\begin_layout Quotation + +\backslash +begin{document} +\end_layout + +\begin_layout Quotation +The equation $a^2 + b^2 = c^2$ is typeset as inline. + +\end_layout + +\begin_layout Quotation +The same can be done in a separate line using +\end_layout + +\begin_layout Quotation + +\backslash +begin{equation} +\end_layout + +\begin_layout Quotation +a^2 + b^2 = c^2 +\end_layout + +\begin_layout Quotation + +\backslash +end{equation} +\end_layout + +\begin_layout Quotation + +\backslash +end{document} +\end_layout + +\begin_layout Standard +The output of this file is shown below. +\end_layout + +\begin_layout Standard + +\lyxline + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +The equation $a^2 + b^2 = c^2$ is typeset as inline. + +\end_layout + +\begin_layout Standard + +The same can be done in a separate line using +\end_layout + +\begin_layout Standard + + +\backslash +begin{equation} +\end_layout + +\begin_layout Standard + +a^2 + b^2 = c^2 +\end_layout + +\begin_layout Standard + + +\backslash +end{equation} +\end_layout + +\end_inset + + +\lyxline + +\end_layout + +\begin_layout Standard +The equation number becomes 5.1 because this happens to be the first equation + in chapter 5. + +\end_layout + +\begin_layout Subsection +Building blocks for typesetting equations +\end_layout + +\begin_layout Standard +To typeset equations, we need to know the commands to make constructs like + fraction, sqareroot, integral etc. + The following list shows several commands and corresponding outputs. + For each item, the output of the command, between the two $ signs, is shown + on the right side. + The reader is expected to insert then inside the body of a document, compile + the file and view the output for practicing. +\end_layout + +\begin_layout Enumerate +Extra space +\begin_inset Foot +status collapsed + +\begin_layout Standard + +\backslash +quad is for inserting space, the size of a +\backslash +quad corresponds to the width of the character ‘M’ of the current font. + Use +\backslash +qquad for larger space. +\end_layout + +\end_inset + + : $A +\backslash +quad B +\backslash +qquad C$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$A +\backslash +quad B +\backslash +qquad C$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Greek letters : $ +\backslash +alpha +\backslash +beta +\backslash +gamma +\backslash +pi$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +alpha +\backslash +beta +\backslash +gamma +\backslash +pi$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Subscript and Exponents : $A_n +\backslash +quad A^m $\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$A_n +\backslash +quad A^m$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Multiple Exponents : $a^b +\backslash +quad a^{b^c}$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$a^b +\backslash +quad a^{b^c}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Fractions : $ +\backslash +frac{3}{5}$ \InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +frac{3}{5}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Dots : $n! = 1 +\backslash +cdot 2 +\backslash +cdots (n-1) +\backslash +cdot n$ \InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$n! = 1 +\backslash +cdot 2 +\backslash +cdots (n-1) +\backslash +cdot n$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Under/over lines : $0. +\backslash +overline{3} = +\backslash +underline{1/3}}$ \InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$0. +\backslash +overline{3} = +\backslash +underline{1/3}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Vectors : $ +\backslash +vec{a}$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +vec{a}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Functions : $ +\backslash +sin x + +\backslash +arctan y$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +sin x + +\backslash +arctan y$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Square root : $ +\backslash +sqrt{x^2+y^2}$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +sqrt{x^2+y^2}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Higher roots : $z= +\backslash +sqrt[3]{x^{2} + +\backslash +sqrt{y}}$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$z= +\backslash +sqrt[3]{x^{2} + +\backslash +sqrt{y}}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Equalities : $A +\backslash +neq B +\backslash +quad A +\backslash +approx C$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$A +\backslash +neq B +\backslash +quad A +\backslash +approx C +\backslash +quad $ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Arrows : $ +\backslash +Leftrightarrow +\backslash +quad +\backslash +Downarrow$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +Leftrightarrow +\backslash +quad +\backslash +Downarrow$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Partial derivative : $ +\backslash +frac{ +\backslash +partial ^2A}{ +\backslash +partial x^2}$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +frac{ +\backslash +partial ^2A}{ +\backslash +partial x^2}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Summation : $ +\backslash +sum_{i=1}^n$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +sum_{i=1}^n$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Integration : $ +\backslash +int_0^{ +\backslash +frac{ +\backslash +pi}{2} +\backslash +sin x}$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +int_0^{ +\backslash +frac{ +\backslash +pi}{2}} sin x$ +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Product : $ +\backslash +prod_ +\backslash +epsilon$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +prod_ +\backslash +epsilon$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Big brackets : $ +\backslash +Big((x+1)(x-1) +\backslash +Big)^{2}$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +Big((x+1)(x-1) +\backslash +Big)^{2}$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Integral : $ +\backslash +int_a^b f(x) dx$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +int _a^b f(x)dx$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +Operators : $ +\backslash +pm +\backslash +div +\backslash +times +\backslash +cup +\backslash +ast +\backslash +$\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ +\InsetSpace ~ + +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\backslash +pm +\backslash +div +\backslash +times +\backslash +cup +\backslash +ast $ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Arrays and matrices +\end_layout + +\begin_layout Standard +To typeset arrays, use the array environment, that is similar to the tabular + environment. + Within an array environment, & character separates columns, +\backslash + +\backslash + starts a new line. + The command +\backslash +hline inserts a horizontal line. + Alignment of the columns is shown inside braces using characters (lcr) + and the | symbol is used for adding vertical lines. + An example of making a table is shown below. + +\end_layout + +\begin_layout Quotation +$ +\backslash +begin{array}{|l|cr|} +\backslash +hline +\end_layout + +\begin_layout Quotation +person & sex & age +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation +John & male & 20 +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation +Mary & female & 10 +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation +Gopal & male & 30 +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation + +\backslash +hline +\end_layout + +\begin_layout Quotation + +\backslash +end{array} $ +\end_layout + +\begin_layout Standard +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\end_layout + +\begin_layout Standard + + +\backslash +begin{array}{|l|cr|} +\backslash +hline +\end_layout + +\begin_layout Standard + +person & sex & age +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + +John & male & 7 +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + +Mary & female & 20 +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + +Gopal & male & 30 +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + + +\backslash +hline +\end_layout + +\begin_layout Standard + + +\backslash +end{array} +\end_layout + +\begin_layout Standard + +$ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The first column is left justified, second is centered and the third is + right justified (decided by the {|l|cr|}). + If you insert a | character between c and r, it will add a vertical line + between second and third columns. + +\end_layout + +\begin_layout Standard +Let us make a matrix using the same command. +\end_layout + +\begin_layout Quotation +$ A = +\backslash +left( +\end_layout + +\begin_layout Quotation + +\backslash +begin{array}{ccc} +\end_layout + +\begin_layout Quotation +x_1 & x_2 & +\backslash +ldots +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation +y_1 & y_2 & +\backslash +ldots +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation + +\backslash +vdots & +\backslash +vdots & +\backslash +ddots +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation + +\backslash +end{array} +\end_layout + +\begin_layout Quotation + +\backslash +right) $ +\end_layout + +\begin_layout Standard +The output is shown below. + The +\backslash +left( and +\backslash +right) provides the enclosure. + All the columns are centered. + We have also used horizontal, vertical and diagonal dots in this example. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status collapsed + +\begin_layout Standard + +$ +\end_layout + +\begin_layout Standard + +A = +\backslash +left( +\end_layout + +\begin_layout Standard + + +\backslash +begin{array}{ccc} +\end_layout + +\begin_layout Standard + +x_1 & x_2 & +\backslash +ldots +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + +y_1 & y_2 & +\backslash +ldots +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + + +\backslash +vdots & +\backslash +vdots & +\backslash +ddots +\backslash + +\backslash + +\end_layout + +\begin_layout Standard + + +\backslash +end{array} +\end_layout + +\begin_layout Standard + + +\backslash +right) $ +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Floating bodies, Inserting Images +\end_layout + +\begin_layout Standard +Figures and tables need special treatment, because they cannot be broken + across pages. + One method would be to start a new page every time a figure or a table + is too large to fit on the present page. + This approach would leave pages partially empty, which looks very bad. + The easiest solution is to +\shape italic +float +\shape default + them and let LaTeX decide the position. + ( You can influence the placement of the floats using the arguments [htbp], + here, top, bottom or special page). + Any material enclosed in a figure or table environment will be treated + as floating matter. + The +\shape italic +graphicsx +\shape default + packages is required in this case. +\end_layout + +\begin_layout Standard + +\backslash +usepackage{graphicx} +\end_layout + +\begin_layout Standard + +\backslash +text{Learn how to insert pictures with caption inside the figure environment.} +\end_layout + +\begin_layout Standard + +\backslash +begin{figure}[h] +\end_layout + +\begin_layout Standard + +\backslash +centering +\end_layout + +\begin_layout Standard + +\backslash +includegraphics[width=0.2 +\backslash +textwidth]{pics/arcs.png} +\end_layout + +\begin_layout Standard + +\backslash +includegraphics[width=0.2 +\backslash +textwidth]{pics/sawtooth.png} +\end_layout + +\begin_layout Standard + +\backslash +caption{Picture of Arc and Sawtooth, inserted with [h] option.} +\end_layout + +\begin_layout Standard + +\backslash +end{figure} +\end_layout + +\begin_layout Standard +\align left +The result is shown below. + +\lyxline + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Standard + + +\backslash +textit{Learn how to insert pictures with caption inside the figure environment.} +\end_layout + +\begin_layout Standard + + +\backslash +begin{figure}[h] +\end_layout + +\begin_layout Standard + + +\backslash +centering +\end_layout + +\begin_layout Standard + + +\backslash +includegraphics[width=0.2 +\backslash +textwidth]{pics/arcs.png} +\end_layout + +\begin_layout Standard + + +\backslash +includegraphics[width=0.2 +\backslash +textwidth]{pics/sawtooth.png} +\end_layout + +\begin_layout Standard + + +\backslash +caption{Picture of Arc and Sawtooth, inserted with [h] option.} +\end_layout + +\begin_layout Standard + + +\backslash +end{figure} +\end_layout + +\end_inset + + +\lyxline + +\end_layout + +\begin_layout Section +Example Application +\end_layout + +\begin_layout Standard +Latex source code for a simple question paper listed below. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example qpaper.tex +\end_layout + +\begin_layout Quotation + +\backslash +documentclass{article} +\end_layout + +\begin_layout Quotation + +\backslash +usepackage{amsmath} +\end_layout + +\begin_layout Quotation +begin{document} +\end_layout + +\begin_layout Quotation + +\backslash +begin{center} +\end_layout + +\begin_layout Quotation + +\backslash +large{ +\backslash +textbf{Sample Question Paper +\backslash + +\backslash +for +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation +Mathematics using Python}} +\end_layout + +\begin_layout Quotation + +\backslash +end{center} +\end_layout + +\begin_layout Quotation + +\backslash +begin{tabular}{p{8cm}r} +\end_layout + +\begin_layout Quotation + +\backslash +textbf{Duration:3 Hrs} & +\backslash +textbf{30 weightage} +\end_layout + +\begin_layout Quotation + +\backslash +end{tabular} +\backslash + +\backslash + +\end_layout + +\begin_layout Quotation + +\backslash +section{Answer all Questions. + $4 +\backslash +times 1 +\backslash +frac{1}{2}$} +\end_layout + +\begin_layout Quotation + +\backslash +begin{enumerate} +\end_layout + +\begin_layout Quotation + +\backslash +item What are the main document classes in LaTeX. + +\end_layout + +\begin_layout Quotation + +\backslash +item Typeset $ +\backslash +sin^{2}x+ +\backslash +cos^{2}x=1$ using LaTeX. + +\end_layout + +\begin_layout Quotation + +\backslash +item Plot a circle using the polar() function. + +\end_layout + +\begin_layout Quotation + +\backslash +item Write code to print all perfect cubes upto 2000. +\end_layout + +\begin_layout Quotation + +\backslash +end{enumerate} +\end_layout + +\begin_layout Quotation + +\backslash +section{Answer any two Questions. + $3 +\backslash +times 5$} +\end_layout + +\begin_layout Quotation + +\backslash +begin{enumerate} +\end_layout + +\begin_layout Quotation + +\backslash +item Set a sample question paper using LaTeX. + +\end_layout + +\begin_layout Quotation + +\backslash +item Using Python calculate the GCD of two numbers +\end_layout + +\begin_layout Quotation + +\backslash +item Write a program with a Canvas and a circle. + +\end_layout + +\begin_layout Quotation + +\backslash +end{enumerate} +\end_layout + +\begin_layout Quotation + +\backslash +begin{center} +\backslash +text{End} +\backslash +end{center} +\end_layout + +\begin_layout Quotation + +\backslash +end{document} +\end_layout + +\begin_layout Standard +The formatted output is shown below. +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/qpaper.png + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Section +Exercises +\end_layout + +\begin_layout Enumerate +What are the main document classes supported by LaTeX. +\end_layout + +\begin_layout Enumerate +How does Latex differ from other word processor programs. +\end_layout + +\begin_layout Enumerate +Write a .tex file to typeset 'All types of Text Available' in tiny, large, + underline and italic. +\end_layout + +\begin_layout Enumerate +Rewrite the previous example to make the output a list of numbered lines. +\end_layout + +\begin_layout Enumerate +Generate an article with section and subsections with table of contents. +\end_layout + +\begin_layout Enumerate +Typeset 'All types of justifications' to print it three times; left, right + and centered. +\end_layout + +\begin_layout Enumerate +Write a .tex file that prints 12345 in five lines (one character per line). +\end_layout + +\begin_layout Enumerate +Typeset a Python program to generate the multiplication table of 5, using + verbatim. +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $\sin^{2}x+\cos^{2}x=1$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $\left(\sqrt{x^{2}+y^{2}}\right)^{2}=x^{2}+y^{2}$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $\sum_{n=1}^{\infty}\left(1+\frac{1}{n}\right)^{n}$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $\frac{\partial A}{\partial x}=A$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $\int_{0}^{\pi}\cos x.dx$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $x=\frac{-b\pm\sqrt{b^{2}-4ac}}{2a}$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $A=\left(\begin{array}{cc} +1 & 2\\ +3 & 4\end{array}\right)$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Typeset +\begin_inset Formula $R=\left(\begin{array}{cc} +\sin\theta & \cos\theta\\ +\cos\theta & \sin\theta\end{array}\right)$ +\end_inset + + +\end_layout + +\begin_layout Chapter +Numerical methods +\end_layout + +\begin_layout Standard +Solving mathematical equations is an important requirement for various branches + of science but many of them evade an analytic solution. + The field of numerical analysis explores the techniques that give approximate + but accurate solutions to such problems. +\begin_inset Foot +status collapsed + +\begin_layout Standard +Introductory methods of numerical analysis by S.S.Sastry +\end_layout + +\begin_layout Standard +http://ads.harvard.edu/books/1990fnmd.book/ +\end_layout + +\end_inset + + Even when they have a solution, for all practical purposes we need to evaluate + the numeric value of the result, with the desired accuracy. + We will focus on developing simple working programs rather than going into + the theoretical details. + The mathematical equations giving numerical solutions will be explored + by changing various parameters and nature of input data. +\end_layout + +\begin_layout Section +Derivative of a function +\end_layout + +\begin_layout Standard +The mathematical definition of the derivative of a function +\begin_inset Formula $f(x)$ +\end_inset + + at point +\begin_inset Formula $x$ +\end_inset + + can be approximated by equation +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +{lim\atop \Delta x\rightarrow0}\frac{f(x+\frac{\triangle x}{2})-f(x-\frac{\triangle x}{2})}{\triangle x}\label{eq:derivative}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +neglecting the higher order terms. + The accuracy of the derivative calculated using discrete values +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none + depends on the stepsize +\begin_inset Formula $\triangle x$ +\end_inset + +. + It will also depends on the number of higher order derivatives the function + has. + We will try to explore these aspects using the program +\family default +\series default +\shape default +\size default +\emph on +\bar default +\noun default +\color black +diff.py +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none + , which evaluates the derivatives of few functions using two different + stepsizes (0.1 ans 0.01). + The input values to function deriv() are the function to be differentiated, + the point at which the derivative is to be found and the stepsize +\begin_inset Formula $\triangle x$ +\end_inset + +. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example diff.py +\end_layout + +\begin_layout LyX-Code +def f1(x): +\end_layout + +\begin_layout LyX-Code + return x**2 +\end_layout + +\begin_layout LyX-Code +def f2(x): +\end_layout + +\begin_layout LyX-Code + return x**4 +\end_layout + +\begin_layout LyX-Code +def f3(x): +\end_layout + +\begin_layout LyX-Code + return x**10 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def deriv(func, x, dx=0.1): +\end_layout + +\begin_layout LyX-Code + df = func(x+dx/2)-func(x-dx/2) +\end_layout + +\begin_layout LyX-Code + return df/dx +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print deriv(f1, 1.0), deriv(f1, 1.0, 0.01) +\end_layout + +\begin_layout LyX-Code +print deriv(f2, 1.0), deriv(f2, 1.0, 0.01) +\end_layout + +\begin_layout LyX-Code +print deriv(f3, 1.0), deriv(f3, 1.0, 0.01) +\end_layout + +\begin_layout Standard +The output of the program is shown below. + Comparing the two numbers on the same line shows the effect of stepsize. + Comparing the first number on each row shows the effect of the number of + higher order derivatives the function has. + For the same stepsize +\begin_inset Formula $x^{4}$ +\end_inset + + gives much less error than +\begin_inset Formula $x^{10}$ +\end_inset + +. + Second derivative of +\begin_inset Formula $x^{2}$ +\end_inset + + is constant and the result becomes exact, result on the first line. +\end_layout + +\begin_layout Quotation +2.0 2.0 +\end_layout + +\begin_layout Quotation +4.01 4.0001 +\end_layout + +\begin_layout Quotation +10.3015768754 10.0030001575 +\end_layout + +\begin_layout Standard +You may explore other functions by modifying the program. + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +It can be seen that the function deriv(), evaluates the function at two + points to calculate the derivative. + The higher order terms can be calculated by evaluating the function at + more points. + Techniques used for this will be discussed in section +\begin_inset LatexCommand ref +reference "sec:Interpolation" + +\end_inset + +, on interpolation. +\end_layout + +\begin_layout Subsection +Differentiate Sine to get Cosine +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/vdiff.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/vdiff_bigerror.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Outputs of vdiff.py (a)for +\begin_inset Formula $\triangle x=0.005$ +\end_inset + + (b) for +\begin_inset Formula $\triangle x=1.0$ +\end_inset + + +\begin_inset LatexCommand label +name "fig:Outputs-of-vdiff.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The program +\emph on +\color black +diff.py +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none + in the previous example can only calculate the value of the derivative + at a given point. + In the program +\family default +\series default +\shape default +\size default +\emph on +\bar default +\noun default +\color black +vdiff.py +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +, we use a vectorized version of our deriv() function. + The defined function is sine and the derivative is calculated using the + vectorized version of deriv(). + The actual cosine function also is plotted for comparison. + The output of vdiff.py is shown in +\begin_inset LatexCommand ref +reference "fig:Outputs-of-vdiff.py" + +\end_inset + +(a). + +\end_layout + +\begin_layout Standard + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +The value of +\begin_inset Formula $\triangle x$ +\end_inset + + is increased to 1.0 +\family default +\series default +\shape default +\size default +\emph default +\bar default +\noun default +\color inherit +by changing one line of code as +\begin_inset Formula $y=vecderiv(x,1.0)$ +\end_inset + + and the result is shown in +\begin_inset LatexCommand ref +reference "fig:Outputs-of-vdiff.py" + +\end_inset + +(b). + The values calculated using our function is shown using +\begin_inset Formula $+$ +\end_inset + +marker, while the continuous curve is the expected result , ie. + the cosine curve. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example vdiff.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +def f(x): +\end_layout + +\begin_layout LyX-Code + return sin(x) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def deriv(x,dx=0.005): +\end_layout + +\begin_layout LyX-Code + df = f(x+dx/2)-f(x-dx/2) +\end_layout + +\begin_layout LyX-Code + return df/dx +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +vecderiv = vectorize(deriv) +\end_layout + +\begin_layout LyX-Code +x = linspace(-2*pi, 2*pi, 200) +\end_layout + +\begin_layout LyX-Code +y = vecderiv(x) +\end_layout + +\begin_layout LyX-Code +plot(x,y,'+') +\end_layout + +\begin_layout LyX-Code +plot(x,cos(x)) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +Numerical Integration +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/integ1.png + lyxscale 50 + width 5cm + +\end_inset + + +\begin_inset Graphics + filename pics/integ2.png + lyxscale 50 + width 5cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Area under the curve is divided it in to a large number of intervals. + Area of each of them is calculated by assuming them to be trapezoids. +\begin_inset LatexCommand label +name "fig:Integration" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Numerical integration constitutes a broad family of algorithms for calculating + the numerical value of a definite integral. + The objective is to find the area under the curve as shown in figure +\begin_inset LatexCommand ref +reference "fig:Integration" + +\end_inset + +. + One method is to divide this area in to large number of sub-intervals and + find the sum of their areas. + The interval +\begin_inset Formula $a\leq x\leq b$ +\end_inset + + is divided in to +\begin_inset Formula $n$ +\end_inset + + sub-intervals, each of length +\begin_inset Formula $h=(b-a)/n$ +\end_inset + +, and area of a sub-interval is approximated by +\begin_inset Formula \[ +\int_{x_{n-1}}^{x_{n}}ydx=\frac{h}{2}(y_{n-1}+y_{n})\] + +\end_inset + +the integral is given by +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +\int_{a}^{b}ydx=\frac{h}{2}\left[y_{0}+2(y_{1}+y_{2}+\ldots+y_{n-1})+y_{n}\right]\label{eq:Trapez}\end{equation} + +\end_inset + + This is the sum of the areas of the individual trapezoids. + The error in using the trapezoid rule is approximately proportional to + +\begin_inset Formula $1/n^{2}$ +\end_inset + +. + If the number of sub-intervals is doubled, the error is reduced by a factor + of 4. + The program +\emph on +trapez.py +\emph default + does integration of a given function using equation +\begin_inset LatexCommand ref +reference "eq:Trapez" + +\end_inset + +. + We will choose an example where the results can be cross checked easily, + the value of +\begin_inset Formula $\pi$ +\end_inset + + is calculated by evaluating the area of a unit circle by integrating the + equation of a circle. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example trapez.py +\end_layout + +\begin_layout LyX-Code +from math import * +\end_layout + +\begin_layout LyX-Code +def y(x): # equation of a circle +\end_layout + +\begin_layout LyX-Code + return sqrt(1.0 - x**2) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def trapez(f, a, b, n): +\end_layout + +\begin_layout LyX-Code + h = (b-a) / n +\end_layout + +\begin_layout LyX-Code + sum = 0 +\end_layout + +\begin_layout LyX-Code + x = 0.5 * h # f(x) at middle of the slice +\end_layout + +\begin_layout LyX-Code + for i in range (1,n): +\end_layout + +\begin_layout LyX-Code + sum = sum + h * f(x) +\end_layout + +\begin_layout LyX-Code + x = x + h +\end_layout + +\begin_layout LyX-Code + return sum +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print 4 * trapez(y, 0.0, 1.0,1000) +\end_layout + +\begin_layout LyX-Code +print 4 * trapez(y, 0.0, 1.0,10000) +\end_layout + +\begin_layout LyX-Code +print trapez(sin,0,2,1000) # Why the error ? +\end_layout + +\begin_layout Standard +The output is shown below. + The result gets better by increasing +\begin_inset Formula $n$ +\end_inset + + thus resulting in smaller +\begin_inset Formula $h$ +\end_inset + +. + The last line shows, how things can go wrong if the arguments are given + in the integer format. + Learn how to avoid such pitfalls while writing programs. + It is left as an exercise to the reader to modify the function trapez() + to accept integer arguments also. +\end_layout + +\begin_layout Standard +3.14041703178 +\end_layout + +\begin_layout Standard +3.14155546691 +\end_layout + +\begin_layout Standard +0.0 +\end_layout + +\begin_layout Section +Ordinary Differential Equations +\end_layout + +\begin_layout Standard +Differential equations are one of the most important mathematical tools + used in producing models for physical and biological processes. + In this section, we will discuss the numerical methods for solving the + initial value problem for first-order ordinary differential equations. + Consider the equation, +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +\frac{dy}{dx}=f(x,y);\,\,\,\, y(x_{0})=y_{0}\label{eq:ODE}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +where the derivative of the function +\begin_inset Formula $f(x,y)$ +\end_inset + + is known and the value of the function at some value of +\begin_inset Formula $x=x_{0}$ +\end_inset + + also is known. + The objective is to find out the value of the function for other values + of +\begin_inset Formula $x$ +\end_inset + +. + The underlying idea of any routine for solving the initial value problem + is to rewrite the +\begin_inset Formula $dy$ +\end_inset + + and +\begin_inset Formula $dx$ +\end_inset + + as finite steps +\begin_inset Formula $\triangle y$ +\end_inset + + and +\begin_inset Formula $\triangle x$ +\end_inset + +, and multiply the equations by +\begin_inset Formula $\triangle x$ +\end_inset + +. + This gives algebraic formulas for the change in the value of +\begin_inset Formula $y(x)$ +\end_inset + + when +\begin_inset Formula $x$ +\end_inset + + is changed by one stepsize +\begin_inset Formula $\triangle x$ +\end_inset + + . + In the limit of making the stepsize very small, a good approximation to + the underlying differential equation is achieved. + +\end_layout + +\begin_layout Standard +Implementation of this procedure results in the Euler’s method, which is + conceptually very important, but not recommended for any practical use. + In this section we will discuss Euler's method and the Runge-Kutta method + with the help of example programs. + For detailed information refer to +\begin_inset LatexCommand cite +key "numerical recepies,mathcs.emory" + +\end_inset + +. +\end_layout + +\begin_layout Subsection +Euler method +\end_layout + +\begin_layout Standard +The equations of Euler's method can be obtained as follows. + By the definition of derivative, +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +y^{'}(x_{n},y_{n})={lim\atop h\rightarrow0}\frac{y(x_{n}+h)-y(x_{n})}{h}\label{eq:Euler}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +For sufficiently small values of +\begin_inset Formula $h$ +\end_inset + + , we can write, +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +y(x_{n}+h)=y(x_{n},y_{n})+hy^{'}(x_{n})\label{eq:Euler2}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The above equations implies that, if the value of the function +\begin_inset Formula $y(x)$ +\end_inset + + is known to be +\begin_inset Formula $y_{n}$ +\end_inset + + at the point +\begin_inset Formula $x_{n}$ +\end_inset + +, its value at a nearby point +\begin_inset Formula $x_{n+1}$ +\end_inset + + is given by +\begin_inset Formula $y_{n}+h\times y^{'}.$ +\end_inset + + The program +\emph on +euler.py +\emph default + calculates the value of sine function using its derivative, ie. + the cosine function. + We start from +\begin_inset Formula $x=0$ +\end_inset + + , where +\begin_inset Formula $\sin(x)=0$ +\end_inset + + and compute the subsequent values using the derivative, +\begin_inset Formula $cos(x)$ +\end_inset + +, and compare the result with the actual sine function. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/euler.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/rkmethod.png + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +(a)Output of euler.py (b)Four intermediate steps of RK4 method +\begin_inset LatexCommand label +name "fig:Output-of-euler.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example euler.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +h = 0.01 # stepsize +\end_layout + +\begin_layout LyX-Code +x = 0.0 # initial values +\end_layout + +\begin_layout LyX-Code +y = 0.0 +\end_layout + +\begin_layout LyX-Code +ax = [] # Lists to store x and y +\end_layout + +\begin_layout LyX-Code +ay = [] +\end_layout + +\begin_layout LyX-Code +while x < 2*pi: +\end_layout + +\begin_layout LyX-Code + y = y + h * math.cos(x) # Euler equation +\end_layout + +\begin_layout LyX-Code + x = x + h +\end_layout + +\begin_layout LyX-Code + ax.append(x) +\end_layout + +\begin_layout LyX-Code + ay.append(y) +\end_layout + +\begin_layout LyX-Code +plot(ax,ay) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +The output of +\emph on +euler.py +\emph default + is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-euler.py" + +\end_inset + +. +\end_layout + +\begin_layout Subsection +Runge-Kutta method +\end_layout + +\begin_layout Standard +The formula +\begin_inset LatexCommand ref +reference "eq:Euler" + +\end_inset + + used by Euler method which advances a solution from +\begin_inset Formula $x_{n}tox_{n+1}$ +\end_inset + + is not symmetric, it advances the solution through an interval +\begin_inset Formula $h$ +\end_inset + +, but uses derivative information only at the beginning of that interval. + Better results are obtained if we take +\shape italic +trial +\shape default + step to the midpoint of the interval and use the value of both +\begin_inset Formula $x$ +\end_inset + + and +\begin_inset Formula $y$ +\end_inset + + at that midpoint to compute the +\shape italic +real +\shape default + step across the whole interval. + This is called the second-order Runge-Kutta or the midpoint method. + This procedure can be further extended to higher orders. + +\end_layout + +\begin_layout Standard +The fourth order Runge-Kutta method is the most popular one and is commonly + referred as the Runge-Kutta method. + In each step the derivative is evaluated four times as shown in figure + +\begin_inset LatexCommand ref +reference "fig:Outputs-of-(a)rk4.py" + +\end_inset + +(a). + Once at the initial point, twice at trial midpoints, and once at a trial + endpoint. + Every trial evaluation uses the value of the function from the previous + trial point, ie. + +\begin_inset Formula $k_{2}$ +\end_inset + + is evaluated using +\begin_inset Formula $k_{1}$ +\end_inset + + and not using +\begin_inset Formula $y_{n}$ +\end_inset + +. + From these derivatives the final function value is calculated, The calculation + is done using the equations, +\end_layout + +\begin_layout Standard +\align center +\begin_inset Formula $\begin{array}{c} +k_{1}=hf(x_{n},y_{n})\\ +k_{2}=hf(x_{n}+\frac{h}{2},y_{n}+\frac{k_{1}}{2})\\ +k_{3}=hf(x_{n}+\frac{h}{2},y_{n}+\frac{k_{2}}{2})\\ +k_{4}=hf(x_{n}+h,y_{n}+k_{3})\end{array}$ +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +y_{n+1}=y_{n}+\frac{1}{6}\left(k_{1}+2k_{2}+2k_{3}+k_{4}\right)\label{eq:Runge-Kutta4}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The program rk4.py listed below uses the equations shown above to calculate + the sine function, by integrating the cosine. + The output is shown in figure +\begin_inset LatexCommand ref +reference "fig:Outputs-of-(a)rk4.py" + +\end_inset + +(a). +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/rk4.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/eurk4.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Outputs of (a)rk4.py (b) compareEuRK4.py +\begin_inset LatexCommand label +name "fig:Outputs-of-(a)rk4.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example rk4.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def rk4(x, y, fx, h = 0.1): # x, y , f(x), stepsize +\end_layout + +\begin_layout LyX-Code + k1 = h * fx(x) +\end_layout + +\begin_layout LyX-Code + k2 = h * fx(x + h/2.0) +\end_layout + +\begin_layout LyX-Code + k3 = h * fx(x + h/2.0) +\end_layout + +\begin_layout LyX-Code + k4 = h * fx(x + h) +\end_layout + +\begin_layout LyX-Code + return y + ( k1/6 + k2/3 + k3/3 + k4/6 ) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +h = 0.01 # stepsize +\end_layout + +\begin_layout LyX-Code +x = 0.0 # initial values +\end_layout + +\begin_layout LyX-Code +y = 0.0 +\end_layout + +\begin_layout LyX-Code +ax = [x] +\end_layout + +\begin_layout LyX-Code +ay = [y] +\end_layout + +\begin_layout LyX-Code +while x < math.pi: +\end_layout + +\begin_layout LyX-Code + y = rk4(x,y,math.cos) +\end_layout + +\begin_layout LyX-Code + x = x + h +\end_layout + +\begin_layout LyX-Code + ax.append(x) +\end_layout + +\begin_layout LyX-Code + ay.append(y) +\end_layout + +\begin_layout LyX-Code +plot(ax,ay) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +The program compareEuRK4.py calculates the values of Sine by integrating + Cosine. + The errors in both cases are evaluated at every step, by comparing it with + the sine function, and plotted as shown in figure +\begin_inset LatexCommand ref +reference "fig:Outputs-of-(a)rk4.py" + +\end_inset + +(b). + The accuracy of Runge-Kutta method is far superior to that of Euler's method, + for the same step size. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example compareEuRK4.py +\end_layout + +\begin_layout LyX-Code +from scipy import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def rk4(x, y, fx, h = 0.1): # x, y , f(x), stepsize +\end_layout + +\begin_layout LyX-Code + k1 = h * fx(x) +\end_layout + +\begin_layout LyX-Code + k2 = h * fx(x + h/2.0) +\end_layout + +\begin_layout LyX-Code + k3 = h * fx(x + h/2.0) +\end_layout + +\begin_layout LyX-Code + k4 = h * fx(x + h) +\end_layout + +\begin_layout LyX-Code + return y + ( k1/6 + k2/3 + k3/3 + k4/6 ) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +h = 0.1 # stepsize +\end_layout + +\begin_layout LyX-Code +x = 0.0 # initial values +\end_layout + +\begin_layout LyX-Code +ye = 0.0 # for Euler +\end_layout + +\begin_layout LyX-Code +yr = 0.0 # for RK4 +\end_layout + +\begin_layout LyX-Code +ax = [] # Lists to store results +\end_layout + +\begin_layout LyX-Code +euerr = [] +\end_layout + +\begin_layout LyX-Code +rkerr = [] +\end_layout + +\begin_layout LyX-Code +while x < 2*pi: +\end_layout + +\begin_layout LyX-Code + ye = ye + h * math.cos(x) # Euler method +\end_layout + +\begin_layout LyX-Code + yr = rk4(x, yr, cos, h) # RK4 method +\end_layout + +\begin_layout LyX-Code + x = x + h +\end_layout + +\begin_layout LyX-Code + ax.append(x) +\end_layout + +\begin_layout LyX-Code + euerr.append(ye - sin(x)) +\end_layout + +\begin_layout LyX-Code + rkerr.append(yr - sin(x)) +\end_layout + +\begin_layout LyX-Code +plot(ax,euerr,'o') +\end_layout + +\begin_layout LyX-Code +plot(ax, rkerr,'+') +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Subsection +Function depending on the integral +\end_layout + +\begin_layout Standard +In the previous section, the program +\shape italic +rk4.py +\shape default + implemented a simplified version of the Runge-Kutta method, the function + was assumed to depend on the independent variable only. + The program +\shape italic +rk4_proper.py +\shape default + listed below implements it properly. + The functions +\begin_inset Formula $f(x,y)=1+y^{2}$ +\end_inset + + and +\begin_inset Formula $f(x,y)=(y-x)/y+x)$ +\end_inset + + are used for testing. + Readers may verify the results by manual computing. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example rk4_proper.py +\end_layout + +\begin_layout LyX-Code +def f1(x,y): +\end_layout + +\begin_layout LyX-Code + return 1 + y**2 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def f2(x,y): +\end_layout + +\begin_layout LyX-Code + return (y-x)/(y+x) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def rk4(x, y, fxy, h): # x, y , f(x,y), step +\end_layout + +\begin_layout LyX-Code + k1 = h * fxy(x, y) +\end_layout + +\begin_layout LyX-Code + k2 = h * fxy(x + h/2.0, y+k1/2) +\end_layout + +\begin_layout LyX-Code + k3 = h * fxy(x + h/2.0, y+k2/2) +\end_layout + +\begin_layout LyX-Code + k4 = h * fxy(x + h, y+k3) +\end_layout + +\begin_layout LyX-Code + ny = y + ( k1/6 + k2/3 + k3/3 + k4/6 ) +\end_layout + +\begin_layout LyX-Code + #print x,y,k1,k2,k3,k4, ny +\end_layout + +\begin_layout LyX-Code + return ny +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +h = 0.2 # stepsize +\end_layout + +\begin_layout LyX-Code +x = 0.0 # initial values +\end_layout + +\begin_layout LyX-Code +y = 0.0 +\end_layout + +\begin_layout LyX-Code +print rk4(x,y, f1, h) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +h = 1 +\end_layout + +\begin_layout LyX-Code +x = 0.0 # initial values +\end_layout + +\begin_layout LyX-Code +y = 1.0 +\end_layout + +\begin_layout LyX-Code +print rk4(x,y,f2,h) +\end_layout + +\begin_layout Standard +The results are shown below. +\end_layout + +\begin_layout Standard +0.202707408081 +\end_layout + +\begin_layout Standard +1.5056022409 +\end_layout + +\begin_layout Section +Polynomials +\begin_inset LatexCommand label +name "sec:Polynomials" + +\end_inset + + +\end_layout + +\begin_layout Standard +A polynomial is a mathematical expression involving a sum of powers in one + or more variables multiplied by coefficients. + A polynomial in one variable with constant coefficients is given by +\begin_inset Formula \begin{equation} +a_{n}x^{n}+...+a_{2}x^{2}+a_{1}x+a_{0}\label{eq:Polinomial}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The derivative of +\begin_inset LatexCommand ref +reference "eq:Polinomial" + +\end_inset + + is, +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +na_{n}x^{n-1}+...+2a_{2}x+a_{1}\] + +\end_inset + + +\end_layout + +\begin_layout Standard +It is easy to find the derivative of a polynomial. + Complicated functions can be analyzed by approximating them with polynomials. + Taylor's theorem states that any sufficiently smooth function can locally + be approximated by a polynomial. + Computers use this property to evaluate trigonometric, logarithmic and + exponential functions. + +\end_layout + +\begin_layout Standard +One dimensional polynomials can be explored using the +\begin_inset Formula $poly1d$ +\end_inset + + function from Numpy. + You can define a polynomial by supplying the coefficient as a list. + For example , the statement p = poly1d([3,4,7]) constructs the polynomial + +\begin_inset Formula $3x^{2}+4x+7$ +\end_inset + +. + Numpy supports several polynomial operations. + The following example demonstrates evaluation at a particular value, multiplica +tion, differentiation, integration and division of polynomials using +\shape italic +poly1d +\shape default +. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/polyplot.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of polyplot.py +\begin_inset LatexCommand label +name "fig:Output-of-polyplot.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example poly.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +a = poly1d([3,4,5]) +\end_layout + +\begin_layout LyX-Code +b = poly1d([6,7]) +\end_layout + +\begin_layout LyX-Code +c = a * b + 5 +\end_layout + +\begin_layout LyX-Code +d = c/a +\end_layout + +\begin_layout LyX-Code +print a +\end_layout + +\begin_layout LyX-Code +print a(0.5) +\end_layout + +\begin_layout LyX-Code +print b +\end_layout + +\begin_layout LyX-Code +print a * b +\end_layout + +\begin_layout LyX-Code +print a.deriv() +\end_layout + +\begin_layout LyX-Code +print a.integ() +\end_layout + +\begin_layout LyX-Code +print d[0], d[1] +\end_layout + +\begin_layout Standard +The output of +\emph on +\color black +poly.py +\emph default +\color inherit + is shown below. +\end_layout + +\begin_layout Standard +\begin_inset Formula $\begin{array}[b]{l} +3x^{2}+4x+5\\ +7.75\\ +6x+7\\ +18x^{3}+45x^{2}+58x+35\\ +6x+4\\ +1x^{3}+2x^{2}+5x\\ +6x+7\\ +5\end{array}$ +\end_inset + + +\end_layout + +\begin_layout Standard +The last two lines show the result of the polynomial division, quotient + and reminder. + Note that a polynomial can take an array argument for evaluation to return + the results in an array. + The program +\emph on +\color black +polyplot.py +\emph default +\color inherit + evaluates polynomial +\begin_inset LatexCommand ref +reference "eq:polynomial of Sine" + +\end_inset + + and its first derivative. + +\begin_inset Formula \begin{equation} +x-\frac{x^{3}}{6}+\frac{x^{5}}{120}-\frac{x^{7}}{5040}\label{eq:polynomial of Sine}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The results are shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-polyplot.py" + +\end_inset + +. + The equation +\begin_inset LatexCommand ref +reference "eq:polynomial of Sine" + +\end_inset + + is the first four terms of series representing sine wave (7! = 5040). + The derivative looks like cosine as expected. + Try adding more terms and change the limits to see the effects. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example polyplot.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +x = linspace(-pi, pi, 100) +\end_layout + +\begin_layout LyX-Code +a = poly1d([-1.0/5040,0,1.0/120,0,-1.0/6,0,1,0]) +\end_layout + +\begin_layout LyX-Code +da = a.deriv() +\end_layout + +\begin_layout LyX-Code +y = a(x) +\end_layout + +\begin_layout LyX-Code +y1 = da(x) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +plot(x,y1) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Subsection +Taylor's Series +\begin_inset LatexCommand label +name "sub:Taylor's-Series" + +\end_inset + + +\end_layout + +\begin_layout Standard +If a function and its derivatives are known at some point +\begin_inset Formula $x=a$ +\end_inset + +, we can express +\begin_inset Formula $f(x)$ +\end_inset + + in the vicinity of that point using a polynomial. + The Taylor series expansion is given by, +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +f(x)=f(a)+(x-a)f^{'}(a)+\frac{(x-a)^{2}}{2!}f^{''}(a)+\cdots+\frac{(x-a)^{n}}{n!}f^{n}(a)\label{eq:Taylor's Series}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +For example let us consider the equation +\begin_inset Formula \begin{equation} +f(x)=x^{3}+x^{2}+x\label{eq:xcube}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +We can see that +\begin_inset Formula $f(0)=0$ +\end_inset + + and the derivatives are +\begin_inset Formula \[ +f'(x)=3x^{2}+2x+1;\,\,\,\,\,\,\,\,\,\,\, f''(x)=6x+2;\,\,\,\,\,\, f'''(x)=6\] + +\end_inset + + +\end_layout + +\begin_layout Standard +Using the values of the derivatives at +\begin_inset Formula $x=0$ +\end_inset + +and equation +\begin_inset LatexCommand ref +reference "eq:Taylor's Series" + +\end_inset + +, we evaluate the function at +\begin_inset Formula $x=.5$ +\end_inset + +, using the polynomial expression, +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f(0.5)=0+0.5\times1+\frac{0.5^{2}\times2}{2!}+\frac{0.5^{3}\times6}{3!}=.875\] + +\end_inset + + +\end_layout + +\begin_layout Standard +The result is same as +\begin_inset Formula $0.5^{3}+0.5^{2}+0.5=.875$ +\end_inset + +. + We have calculated it manually for +\begin_inset Formula $x=.5$ +\end_inset + + . + We can also do this using Numpy as shown in the program taylor.py. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example taylor.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +p = poly1d([1,1,1,0]) +\end_layout + +\begin_layout LyX-Code +dp = p.deriv() +\end_layout + +\begin_layout LyX-Code +dp2 = dp.deriv() +\end_layout + +\begin_layout LyX-Code +dp3 = dp2.deriv() +\end_layout + +\begin_layout LyX-Code +a = 0 # The known point +\end_layout + +\begin_layout LyX-Code +x = 0 # Evaluate at x +\end_layout + +\begin_layout LyX-Code +while x < .5: +\end_layout + +\begin_layout LyX-Code + tay = p(a) + (x-a)* dp(a) + +\backslash + +\end_layout + +\begin_layout LyX-Code + (x-a)**2 * dp2(a) / 2 + (x-a)**3 * dp3(a)/6 +\end_layout + +\begin_layout LyX-Code + print '%5.1f %8.5f +\backslash +t%8.5f'%(x, p(x), tay) +\end_layout + +\begin_layout LyX-Code + x = x + .1 +\end_layout + +\begin_layout Standard +The result is shown below. +\end_layout + +\begin_layout Quotation +0.0 0.00000 0.00000 +\end_layout + +\begin_layout Quotation +0.1 0.11100 0.11100 +\end_layout + +\begin_layout Quotation +0.2 0.24800 0.24800 +\end_layout + +\begin_layout Quotation +0.3 0.41700 0.41700 +\end_layout + +\begin_layout Quotation +0.4 0.62400 0.62400 +\end_layout + +\begin_layout Subsection +Sine and Cosine Series +\end_layout + +\begin_layout Standard +In the equation +\begin_inset LatexCommand ref +reference "eq:Taylor's Series" + +\end_inset + +, let us choose +\begin_inset Formula $f(x)=sin(x)$ +\end_inset + + and +\begin_inset Formula $a=0$ +\end_inset + +. + If +\begin_inset Formula $a=0$ +\end_inset + +, then the series is known as the Maclaurin Series. + The first term will become +\begin_inset Formula $sin(0)$ +\end_inset + +, which is just zero. + The other terms involve the derivatives of +\begin_inset Formula $sin(x)$ +\end_inset + +. + The first, second and third derivatives of +\begin_inset Formula $sin(x)$ +\end_inset + + are +\begin_inset Formula $cos(x)$ +\end_inset + +, +\begin_inset Formula $-sin(x)$ +\end_inset + + and +\begin_inset Formula $-cos(x)$ +\end_inset + +, respectively. + Evaluating each of these at zero, we get 1, 0 and -1 respectively. + The terms with even powers vanish, resulting in, +\begin_inset Formula \begin{equation} +\sin(x)=x-\frac{x^{3}}{3!}+\frac{x^{5}}{5!}+\cdots\,\,\,\,\,=\sum_{n=0}^{\infty}\left(-1\right)^{n}\frac{x^{2n+1}}{(2n+1)!}\label{eq:Taylor Sine}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +We can find the cosine series in a similar manner, to get +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +\cos(x)=1-\frac{x^{2}}{2!}+\frac{x^{4}}{4!}+\cdots\,\,\,\,\,=\sum_{n=0}^{\infty}\left(-1\right)^{n}\frac{x^{2n}}{(2n)!}\label{eq:Taylor cosine}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The program series_sc.py evaluates the sine and cosine series. + The output is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-series_sc.py" + +\end_inset + +. + Compare the output of polyplot.py from section +\begin_inset LatexCommand ref +reference "sec:Polynomials" + +\end_inset + + with this. + In both cases, we have evaluated the polynomial of sine function. + In the present case, we can easily modify the number of terms and the logic + is simpler. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example series_sc.py +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/series_sc.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of series_sc.py +\begin_inset LatexCommand label +name "fig:Output-of-series_sc.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def f(n): # Factorial function +\end_layout + +\begin_layout LyX-Code + if n == 0: +\end_layout + +\begin_layout LyX-Code + return 1 +\end_layout + +\begin_layout LyX-Code + else: +\end_layout + +\begin_layout LyX-Code + return n * f(n-1) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +NP = 100 +\end_layout + +\begin_layout LyX-Code +x = linspace(-pi, pi, NP) +\end_layout + +\begin_layout LyX-Code +sinx = zeros(NP) +\end_layout + +\begin_layout LyX-Code +cosx = zeros(NP) +\end_layout + +\begin_layout LyX-Code +for n in range(10): +\end_layout + +\begin_layout LyX-Code + sinx += (-1)**(n) * (x**(2*n+1)) / f(2*n+1) +\end_layout + +\begin_layout LyX-Code + cosx += (-1)**(n) * (x**(2*n)) / f(2*n) +\end_layout + +\begin_layout LyX-Code +plot(x, sinx) +\end_layout + +\begin_layout LyX-Code +plot(x, cosx,'r') +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Section +Finding roots of an equation +\end_layout + +\begin_layout Standard +In general, an equation may have any number of roots, or no roots at all. + For example +\begin_inset Formula $f(x)=x^{2}$ +\end_inset + + has a single root whereas +\begin_inset Formula $f(x)=sin(x)$ +\end_inset + + has an infinite number of roots. + The roots can be located visually, by looking at the intersections with + the x-axis. + Another useful tool for detecting and bracketing roots is the incremental + search method. + The basic idea behind the incremental search method is simple: if +\begin_inset Formula $f(x1)$ +\end_inset + + and +\begin_inset Formula $f(x2)$ +\end_inset + + have opposite signs, then there is at least one root in the interval +\begin_inset Formula $(x1,x2)$ +\end_inset + +. + If the interval is small enough, it is likely to contain a single root. + Thus the zeroes of +\begin_inset Formula $f(x)$ +\end_inset + + can be detected by evaluating the function at intervals of +\begin_inset Formula $\Delta x$ +\end_inset + + and looking for change in sign. +\end_layout + +\begin_layout Standard +There are several potential problems with the incremental search method: + It is possible to miss two closely spaced roots if the search increment + +\begin_inset Formula $\Delta x$ +\end_inset + + is larger than the spacing of the roots. + Certain singularities of +\begin_inset Formula $f(x)$ +\end_inset + + can be mistaken for roots. + For example, +\begin_inset Formula $f(x)=tan(x)$ +\end_inset + + changes sign at odd multiples of +\begin_inset Formula $\pi/2$ +\end_inset + +, but these locations are not true zeroes as shown in figure +\begin_inset LatexCommand ref +reference "fig:NRplot" + +\end_inset + + (b). +\end_layout + +\begin_layout Standard +Example +\shape italic +rootsearch.py +\shape default + implements the function +\begin_inset Formula $root()$ +\end_inset + + that searches the roots of a function +\begin_inset Formula $f(x)$ +\end_inset + + from +\begin_inset Formula $x=a$ +\end_inset + + to +\begin_inset Formula $x=b$ +\end_inset + +, incrementing it by +\begin_inset Formula $dx$ +\end_inset + +. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example rootsearch.py +\end_layout + +\begin_layout LyX-Code +def func(x): +\end_layout + +\begin_layout LyX-Code + return x**3-10.0*x*x + 5 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def root(f,a,b,dx): +\end_layout + +\begin_layout LyX-Code + x = a +\end_layout + +\begin_layout LyX-Code + while True: +\end_layout + +\begin_layout LyX-Code + f1 = f(x) +\end_layout + +\begin_layout LyX-Code + f2 = f(x+dx) +\end_layout + +\begin_layout LyX-Code + if f1*f2 < 0: +\end_layout + +\begin_layout LyX-Code + return x, x + dx +\end_layout + +\begin_layout LyX-Code + x = x + dx +\end_layout + +\begin_layout LyX-Code + if x >= b: +\end_layout + +\begin_layout LyX-Code + return (None,None) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +x,y = root(func, 0.0, 1.0,.1) +\end_layout + +\begin_layout LyX-Code +print x,y +\end_layout + +\begin_layout LyX-Code +x,y = root(math.cos, 0.0, 4,.1) +\end_layout + +\begin_layout LyX-Code +print x,y +\end_layout + +\begin_layout Standard +The outputs are (0.7 , 0.8) and (1.5 , 1.6). + The root of cosine, +\begin_inset Formula $\pi/2$ +\end_inset + +, is between 1.5 and 1.6. + After the root has been located roughly, we can find the root with any + specified accuracy, using bisection method, Newton-Raphson method etc. + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/nrplot.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/tanx.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +(a)Function +\begin_inset Formula $2x^{2}-3x-5$ +\end_inset + + and its tangents at +\begin_inset Formula $x=4$ +\end_inset + + and +\begin_inset Formula $x=4$ +\end_inset + + (b) tan(x) +\begin_inset LatexCommand label +name "fig:NRplot" + +\end_inset + +. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Method of Bisection +\end_layout + +\begin_layout Standard +The method of bisection finds the root by successively halving the interval + until it becomes sufficiently small. + Bisection is not the fastest method available for computing roots, but + it is the most reliable. + Once a root has been bracketed, bisection will always find it. + The method of bisection works in the following manner. + If there is a root between +\begin_inset Formula $x1$ +\end_inset + + and +\begin_inset Formula $x2$ +\end_inset + +, then +\begin_inset Formula $f(x1)\times f(x2)<0$ +\end_inset + +. + Next, we compute +\begin_inset Formula $f(x3)$ +\end_inset + +, where +\begin_inset Formula $x3=(x1+x2)/2$ +\end_inset + +. + If +\begin_inset Formula $f(x2)\times f(x3)<0$ +\end_inset + +, then the root must be in +\begin_inset Formula $(x2,x3)$ +\end_inset + + and we replace the original bound +\begin_inset Formula $x1$ +\end_inset + + by +\begin_inset Formula $x3$ +\end_inset + + . + Otherwise, the root lies between +\begin_inset Formula $x1$ +\end_inset + + and +\begin_inset Formula $x3$ +\end_inset + +, in that case +\begin_inset Formula $x2$ +\end_inset + + is replaced by +\begin_inset Formula $x3$ +\end_inset + +. + This process is repeated until the interval has been reduced to the specified + value, say +\begin_inset Formula $\varepsilon$ +\end_inset + +. + +\end_layout + +\begin_layout Standard +The number of bisections required to reach a prescribed limit, +\begin_inset Formula $\varepsilon,$ +\end_inset + + is given by equation +\begin_inset LatexCommand ref +reference "eq:bisection" + +\end_inset + +. +\begin_inset Formula \begin{equation} +n=\frac{\ln(|\triangle x|)/\varepsilon}{\ln2}\label{eq:bisection}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The program +\shape italic +bisection.py +\shape default + finds the root of the equation +\begin_inset Formula $x^{3}-10x^{2}+5$ +\end_inset + +. + The starting values are found using the program +\shape italic +rootsearch.py +\shape default +. + The results are printed for two different accuracies. + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example bisection.py +\end_layout + +\begin_layout LyX-Code +import math def func(x): +\end_layout + +\begin_layout LyX-Code + return x**3 - 10.0* x*x + 5 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def bisect(f, x1, x2, epsilon=1.0e-9): +\end_layout + +\begin_layout LyX-Code + f1 = f(x1) +\end_layout + +\begin_layout LyX-Code + f2 = f(x2) +\end_layout + +\begin_layout LyX-Code + if f1*f2 > 0.0: +\end_layout + +\begin_layout LyX-Code + print 'x1 and x2 are on the same side of x-axis' +\end_layout + +\begin_layout LyX-Code + return +\end_layout + +\begin_layout LyX-Code + n = math.ceil(math.log(abs(x2 - x1)/epsilon)/math.log(2.0)) +\end_layout + +\begin_layout LyX-Code + n = int(n) +\end_layout + +\begin_layout LyX-Code + for i in range(n): +\end_layout + +\begin_layout LyX-Code + x3 = 0.5 * (x1 + x2) +\end_layout + +\begin_layout LyX-Code + f3 = f(x3) +\end_layout + +\begin_layout LyX-Code + if f3 == 0.0: return x3 +\end_layout + +\begin_layout LyX-Code + if f2*f3 < 0.0: +\end_layout + +\begin_layout LyX-Code + x1 = x3 +\end_layout + +\begin_layout LyX-Code + f1 = f3 +\end_layout + +\begin_layout LyX-Code + else: +\end_layout + +\begin_layout LyX-Code + x2 = x3 +\end_layout + +\begin_layout LyX-Code + f2 = f3 +\end_layout + +\begin_layout LyX-Code + return (x1 + x2)/2.0 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print bisect(func, 0.70, 0.8, 1.0e-4) +\end_layout + +\begin_layout LyX-Code +print bisect(func, 0.70, 0.8, 1.0e-9) +\end_layout + +\begin_layout Subsection +Newton-Raphson Method +\end_layout + +\begin_layout Standard +The Newton–Raphson algorithm requires the derivative of the function also + to evaluate the roots. + Therefore, it is usable only in problems where +\begin_inset Formula $f'(x)$ +\end_inset + + can be readily computed. + It does not require the value at two points to start with. + We start with an initial guess which is reasonably close to the true root. + Then the function is approximated by its tangent line and the x-intercept + of the tangent line is calculated. + This value is taken as the next guess and the process is repeated. + The Newton-Raphson formula is shown below. + +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +x_{i+1}=x_{i}-\frac{f(x_{i})}{f'(x_{i})}\label{eq:Newton-Raphson}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +Figure +\begin_inset LatexCommand ref +reference "fig:NRplot" + +\end_inset + +(a) shows the graph of the quadratic equation +\begin_inset Formula $2x^{2}-3x-5=0$ +\end_inset + + and its two tangents. + It can be seen that the zeros are at x = -1 and x = 2.5, and we use the + program newraph.py shown below to find the roots. + The function nr() is called twice, and we get the roots nearer to the correspon +ding starting values. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example newraph.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +def f(x): +\end_layout + +\begin_layout LyX-Code + return 2.0 * x**2 - 3*x - 5 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def df(x): +\end_layout + +\begin_layout LyX-Code + return 4.0 * x - 3 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def nr(x, tol = 1.0e-9): +\end_layout + +\begin_layout LyX-Code + for i in range(30): +\end_layout + +\begin_layout LyX-Code + dx = -f(x)/df(x) +\end_layout + +\begin_layout LyX-Code + #print x +\end_layout + +\begin_layout LyX-Code + x = x + dx +\end_layout + +\begin_layout LyX-Code + if abs(dx) < tol: +\end_layout + +\begin_layout LyX-Code + return x +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +print nr(4) +\end_layout + +\begin_layout LyX-Code +print nr(0) +\end_layout + +\begin_layout Standard +The output is shown below. +\end_layout + +\begin_layout Standard +2.5 +\end_layout + +\begin_layout Standard +-1.0 +\end_layout + +\begin_layout Standard +\align block +Uncomment the print statement inside nr() to view how fast this method converges +, compared to the bisection method. + The program newraph_plot.py, listed below is used for generating the figure + +\begin_inset LatexCommand ref +reference "fig:NRplot" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example newraph_plot.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +def f(x): +\end_layout + +\begin_layout LyX-Code + return 2.0 * x**2 - 3*x - 5 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def df(x): +\end_layout + +\begin_layout LyX-Code + return 4.0 * x - 3 +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +vf = vectorize(f) +\end_layout + +\begin_layout LyX-Code +x = linspace(-2, 5, 100) +\end_layout + +\begin_layout LyX-Code +y = vf(x) +\end_layout + +\begin_layout LyX-Code +# Tangents at x=3 and 4, using one point slope formula +\end_layout + +\begin_layout LyX-Code +x1 = 4 +\end_layout + +\begin_layout LyX-Code +tg1 = df(x1)*(x-x1) + f(x1) +\end_layout + +\begin_layout LyX-Code +x1 = 3 +\end_layout + +\begin_layout LyX-Code +tg2 = df(x1)*(x-x1) + f(x1) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +grid(True) +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +plot(x,tg1) +\end_layout + +\begin_layout LyX-Code +plot(x,tg2) +\end_layout + +\begin_layout LyX-Code +ylim([-20,40]) +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +\align left +We have defined the function +\begin_inset Formula $f(x)=2x^{2}-3x-5$ +\end_inset + + and vectorized it. + The derivative +\begin_inset Formula $4x^{2}-3$ +\end_inset + + also is defined by +\begin_inset Formula $df(x)$ +\end_inset + +, which is the slope of +\begin_inset Formula $f(x)$ +\end_inset + +. + The tangents are drawn at +\begin_inset Formula $x=4$ +\end_inset + + and +\begin_inset Formula $x=3$ +\end_inset + +, using the point slope formula for a line +\begin_inset Formula $y=m(x-x1)+y1$ +\end_inset + +. +\end_layout + +\begin_layout Section +System of Linear Equations +\end_layout + +\begin_layout Standard +A system of +\begin_inset Formula $m$ +\end_inset + + linear equations with +\begin_inset Formula $n$ +\end_inset + + unknowns can be written in a matrix form and can be solved by using several + standard techniques like Gaussian elimination. + In this section, the matrix inversion method, using Numpy, is demonstrated. + For more information see reference +\begin_inset LatexCommand cite +key "Kiusalas" + +\end_inset + +. +\end_layout + +\begin_layout Subsection +Equation solving using matrix inversion +\end_layout + +\begin_layout Standard +Non-homogeneous matrix equations of the form +\begin_inset Formula $Ax=b$ +\end_inset + + can be solved by matrix inversion to obtain +\begin_inset Formula $x=A^{-1}b$ +\end_inset + + . + The system of equations +\end_layout + +\begin_layout Standard +\align center +\begin_inset Formula $\begin{array}[b]{r} +4x+y\,-2z=0\\ +2x-3y+3z=9\\ +-6x-2y\,+z=0\end{array}$ +\end_inset + + +\end_layout + +\begin_layout Standard +can be represented in the matrix form as +\end_layout + +\begin_layout Standard +\align center +\begin_inset Formula \begin{eqnarray*} +\left(\begin{array}{rrr} +4 & 1 & -2\\ +2 & -3 & 3\\ +-6 & -2 & 1\end{array}\right)\left(\begin{array}{c} +x\\ +y\\ +z\end{array}\right) & = & \left(\begin{array}{c} +0\\ +9\\ +0\end{array}\right)\end{eqnarray*} + +\end_inset + + +\end_layout + +\begin_layout Standard +and can be solved by finding the inverse of the coefficient matrix. +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +\left(\begin{array}{c} +x\\ +y\\ +z\end{array}\right)=\left(\begin{array}{rrr} +4 & 1 & -2\\ +2 & -3 & 3\\ +-6 & -2 & 1\end{array}\right)^{-1}\left(\begin{array}{c} +0\\ +9\\ +0\end{array}\right)\] + +\end_inset + + +\end_layout + +\begin_layout Standard +Using numpy we can solve this as shown in solve_eqn.py +\end_layout + +\begin_layout Standard +\align left +Example solve_eqn.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +b = array([0,9,0]) +\end_layout + +\begin_layout LyX-Code +A = array([ [4,1,-2], [2,-3,3],[-6,-2,1]]) +\end_layout + +\begin_layout LyX-Code +print dot(linalg.inv(A),b) +\end_layout + +\begin_layout Standard +The result will be [ 0.75 -2. + 0.5 ], that means +\begin_inset Formula $x=0.75,y=-2,z=0.5$ +\end_inset + + . + This can be verified by substituting them back in to the equations. +\end_layout + +\begin_layout Standard +Exercise: solve x+y+3z = 6; 2x+3y-4z=6;3x+2y+7z=0 +\end_layout + +\begin_layout Section +Least Squares Fitting +\end_layout + +\begin_layout Standard +A mathematical procedure for finding the best-fitting curve +\begin_inset Formula $f(x)$ +\end_inset + + for a given set of points +\begin_inset Formula $(x_{n},y_{n})$ +\end_inset + + by minimizing the sum of the squares of the vertical offsets of the points + from the curve is called least squares fitting. + The least square fit is obtained by minimizing the function, +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +S(a_{0},a_{1},\ldots,a_{m})=\sum_{i=0}^{n}\left[y_{i}-f(x_{i})\right]^{2}\label{eq:Least square}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +with respect to each +\begin_inset Formula $a_{i}$ +\end_inset + +and the condition for that is +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +\frac{\partial S}{\partial a_{i}}=0,\,\,\,\,\, i=0,1,\ldots m\label{eq:LS2}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +For a linear fit, the equation is +\begin_inset Formula \[ +f(a,b)=a+bx\] + +\end_inset + + +\end_layout + +\begin_layout Standard +Solving the equations +\begin_inset Formula $\frac{\partial S}{\partial a}=0$ +\end_inset + + and +\begin_inset Formula $\frac{\partial S}{\partial b}=0$ +\end_inset + + will give the result, +\begin_inset Formula \begin{equation} +b=\frac{\sum y_{i}(x-\overline{x})}{\sum x_{i}(x-\overline{x})},\,\,\,\, and\,\,\,\, a=\overline{y}-\overline{x}b\label{eq:LS3}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +where +\begin_inset Formula $\overline{x}$ +\end_inset + + and +\begin_inset Formula $\overline{y}$ +\end_inset + + are the mean values defined by the equations, +\begin_inset Formula \begin{equation} +\overline{x}=\frac{1}{n+1}\sum_{i=0}^{n}x_{i},\,\,\,\,\,\,\overline{y}=\frac{1}{n+1}\sum_{i=0}^{n}y{}_{i}\label{eq:LS4}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The program lsfit.py demonstrates the usage of equations +\begin_inset LatexCommand ref +reference "eq:LS3" + +\end_inset + + and +\begin_inset LatexCommand ref +reference "eq:LS4" + +\end_inset + +. + +\end_layout + +\begin_layout Standard +\align left +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/lsfit.png + lyxscale 50 + width 7cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of lsfit.py +\begin_inset LatexCommand label +name "fig:Output-of-lsfit.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example lsfit.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +NP = 50 +\end_layout + +\begin_layout LyX-Code +r = 2*ranf([NP]) - 0.5 +\end_layout + +\begin_layout LyX-Code +x = linspace(0,10,NP) +\end_layout + +\begin_layout LyX-Code +data = 3 * x + 2 + r +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +xbar = mean(x) +\end_layout + +\begin_layout LyX-Code +ybar = mean(data) +\end_layout + +\begin_layout LyX-Code +b = sum(data*(x-xbar)) / sum(x*(x-xbar)) +\end_layout + +\begin_layout LyX-Code +a = ybar - xbar * b +\end_layout + +\begin_layout LyX-Code +print a,b +\end_layout + +\begin_layout LyX-Code +y = a + b * x +\end_layout + +\begin_layout LyX-Code +plot(x,y) +\end_layout + +\begin_layout LyX-Code +plot(x,data,'ob') +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +The raw data is made by adding random numbers (between -1 and 1) to the + +\begin_inset Formula $y$ +\end_inset + + coordinates generated by +\begin_inset Formula $y=3*x+2$ +\end_inset + + . + The Numpy functions mean() and sum() are used. + The output is shown in figure +\begin_inset LatexCommand ref +reference "fig:Output-of-lsfit.py" + +\end_inset + +. +\end_layout + +\begin_layout Section +Interpolation +\begin_inset LatexCommand label +name "sec:Interpolation" + +\end_inset + + +\end_layout + +\begin_layout Standard +Interpolation is the process of constructing a function +\begin_inset Formula $f(x)$ +\end_inset + + from a set of data points +\begin_inset Formula $(x_{i},y_{i})$ +\end_inset + +, in the interval +\begin_inset Formula $a + + + + + + + + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $x_{0}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $x_{0}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{0}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $x_{1}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $y{}_{1}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\family roman +\series medium +\shape up +\size normal +\emph off +\bar no +\noun off +\color none +\begin_inset Formula $\left[y_{1}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{0},y_{1}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $x_{2}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $y_{2}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{2}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{1},y_{2}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{0},y_{1},y_{2}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $x_{3}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $y_{3}$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{3}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{2},y_{3}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{1},y_{2},y_{3}\right]$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\left[y_{0},y_{1},y_{2},y_{3}\right]$ +\end_inset + + +\end_layout + +\end_inset + + + + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular + + + + + + + + + +\begin_inset Text + +\begin_layout Standard +0 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +0 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +1 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +3 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\frac{3-0}{1-0}=3$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +2 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +14 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\frac{14-3}{2-1}=11$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\frac{11-3}{2-0}=4$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Standard +3 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +39 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\frac{39-14}{3-2}=25$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\frac{25-11}{3-1}=7$ +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\frac{7-4}{3-0}=1$ +\end_inset + + +\end_layout + +\end_inset + + + + +\end_inset + + +\end_layout + +\begin_layout Standard +The table given above shows the divided difference table for the data set + x = [0,1,2,3] and y = [0,3,14,39], calculated manually. + The program newpoly.py can be used for calculating the coefficients, which + prints the output [0, 3, 4, 1]. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example newpoly.py +\end_layout + +\begin_layout LyX-Code +from copy import copy +\end_layout + +\begin_layout LyX-Code +def coef(x,y): +\end_layout + +\begin_layout LyX-Code + a = copy(y) +\end_layout + +\begin_layout LyX-Code + m = len(x) +\end_layout + +\begin_layout LyX-Code + for k in range(1,m): +\end_layout + +\begin_layout LyX-Code + tmp = copy(a) +\end_layout + +\begin_layout LyX-Code + for i in range(k,m): +\end_layout + +\begin_layout LyX-Code + tmp[i] = (a[i] - a[i-1])/(x[i]-x[i-k]) +\end_layout + +\begin_layout LyX-Code + a = copy(tmp) +\end_layout + +\begin_layout LyX-Code + return a +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +x = [0,1,2,3] +\end_layout + +\begin_layout LyX-Code +y = [0,3,14,39] +\end_layout + +\begin_layout LyX-Code +print coef(x,y) +\end_layout + +\begin_layout Standard +We start by copying the list +\begin_inset Formula $y$ +\end_inset + + to coefficient +\begin_inset Formula $a$ +\end_inset + +, the first element +\begin_inset Formula $a_{0}=y_{0}$ +\end_inset + +. + While calculating the differences, we have used two loops and a temporary + list. + The same can be done in a better way using arrays of Numpy +\begin_inset Foot +status collapsed + +\begin_layout Standard +This function is from reference +\begin_inset LatexCommand cite +key "Kiusalas" + +\end_inset + +, some PDF versions of this book are available on the web. +\end_layout + +\end_inset + +, as shown in newpoly2.py. +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example newpoly2.py +\end_layout + +\begin_layout LyX-Code +from numpy import * +\end_layout + +\begin_layout LyX-Code +def coef(x,y): +\end_layout + +\begin_layout LyX-Code + a = copy(y) +\end_layout + +\begin_layout LyX-Code + m = len(x) +\end_layout + +\begin_layout LyX-Code + for k in range(1,m): +\end_layout + +\begin_layout LyX-Code + a[k:m] = (a[k:m] - a[k-1])/(x[k:m]-x[k-1]) +\end_layout + +\begin_layout LyX-Code + return a +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +x = array([0,1,2,3]) +\end_layout + +\begin_layout LyX-Code +y = array([0,3,14,39]) +\end_layout + +\begin_layout LyX-Code +print coef(x,y) +\end_layout + +\begin_layout Standard +The next step is to calculate the value of +\begin_inset Formula $y$ +\end_inset + + for any given value of +\begin_inset Formula $x$ +\end_inset + +, using the coefficients already calculated. + The program +\shape italic +newinterpol.py +\shape default + calculates the coefficients using the four data points. + The function eval() uses the recurrence relation +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +P_{k}(x)=a_{n-k}+(x-x_{n-k})P_{k-1}(x),\,\,\,\, k=1,2,\ldots n\label{eq:NPrecur}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +The program generates 20 new values of +\begin_inset Formula $x$ +\end_inset + +, and calculate corresponding values of +\begin_inset Formula $y$ +\end_inset + + and plots them along with the original data points, as shown in figure + +\begin_inset LatexCommand ref +reference "fig:Output-of-newton_in3.py" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\align left +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/newton_in3.png + lyxscale 50 + width 8cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Output of newton_in3.py +\begin_inset LatexCommand label +name "fig:Output-of-newton_in3.py" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left + +\emph on +Example newinterpol.py +\end_layout + +\begin_layout LyX-Code +from pylab import * +\end_layout + +\begin_layout LyX-Code +def eval(a,xpoints,x): +\end_layout + +\begin_layout LyX-Code + n = len(xpoints) - 1 +\end_layout + +\begin_layout LyX-Code + p = a[n] +\end_layout + +\begin_layout LyX-Code + for k in range(1,n+1): +\end_layout + +\begin_layout LyX-Code + p = a[n-k] + (x -xpoints[n-k]) * p +\end_layout + +\begin_layout LyX-Code + return p +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +def coef(x,y): +\end_layout + +\begin_layout LyX-Code + a = copy(y) +\end_layout + +\begin_layout LyX-Code + m = len(x) +\end_layout + +\begin_layout LyX-Code + for k in range(1,m): +\end_layout + +\begin_layout LyX-Code + a[k:m] = (a[k:m] - a[k-1])/(x[k:m]-x[k-1]) +\end_layout + +\begin_layout LyX-Code + return a +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +x = array([0,1,2,3]) +\end_layout + +\begin_layout LyX-Code +y = array([0,3,14,39]) +\end_layout + +\begin_layout LyX-Code +coef = coef(x,y) +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code +NP = 20 +\end_layout + +\begin_layout LyX-Code +newx = linspace(0,3, NP) # New x-values +\end_layout + +\begin_layout LyX-Code +newy = zeros(NP) +\end_layout + +\begin_layout LyX-Code +for i in range(NP): # evaluate y-values +\end_layout + +\begin_layout LyX-Code + newy[i] = eval(coef, x, newx[i]) +\end_layout + +\begin_layout LyX-Code +plot(newx, newy,'-x') +\end_layout + +\begin_layout LyX-Code +plot(x, y,'ro') +\end_layout + +\begin_layout LyX-Code +show() +\end_layout + +\begin_layout Standard +You may explore the results for new points outside the range by changing + the second argument of line +\shape italic +newx = linspace(0,3,NP) +\shape default + to a higher value. + +\end_layout + +\begin_layout Standard +Look for similarities between Taylor's series discussed in section +\begin_inset LatexCommand ref +reference "sub:Taylor's-Series" + +\end_inset + + that and polynomial interpolation process. + The derivative of a function represents an infinitesimal change in the + function with respect to one of its variables. + The finite difference is the discrete analog of the derivative. + Using the divided difference method, we are in fact calculating the derivatives + in the discrete form. + +\end_layout + +\begin_layout Section +Exercises +\end_layout + +\begin_layout Enumerate +Differentiate +\begin_inset Formula $5x^{2}+3x+5$ +\end_inset + + numerically and evaluate at +\begin_inset Formula $x=2$ +\end_inset + + and +\begin_inset Formula $x=-2$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +Write code to numerically differentiate +\begin_inset Formula $\sin(x^{2})$ +\end_inset + + and plot it by vectorizing the function. + Compare with the analytical result. +\end_layout + +\begin_layout Enumerate +Integrate +\begin_inset Formula $\ln x$ +\end_inset + +, +\begin_inset Formula $e^{x}$ +\end_inset + + from +\begin_inset Formula $x=1$ +\end_inset + +to +\begin_inset Formula $2$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +Solve +\begin_inset Formula $2x+y=3;-x+4y=0;3+3y=-1$ +\end_inset + + using matrices. +\end_layout + +\begin_layout Enumerate +Modify the program julia.py, +\begin_inset Formula $c=0.2-0.8j$ +\end_inset + + and +\begin_inset Formula $z=z^{6}+c$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Write Python code, using pylab, to solve the following equations using matrices +\newline + +\begin_inset Formula $\begin{array}[b]{r} +4x+y\,-2z=0\\ +2x-3y+3z=9\\ +-6x-2y\,+z=0\end{array}$ +\end_inset + + +\end_layout + +\begin_layout Enumerate +Find the roots of +\begin_inset Formula $5x^{2}+3x-6$ +\end_inset + + using bisection method. +\end_layout + +\begin_layout Enumerate +Find the all the roots of +\begin_inset Formula $sin(x)$ +\end_inset + + between 0 and 10, using Newton-Raphson method. +\end_layout + +\begin_layout Chapter* +Appendix A : Installing GNU/Linux +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +addcontentsline{toc}{chapter}{Appendix A} +\end_layout + +\end_inset + + +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +markboth{Appendix A}{Installing Ubuntu} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Programming can be learned better by practicing and it requires an operating + system, and Python interpreter along with some library modules. + All these requirements are packaged on the Live CD comes along with this + book. + You can boot any PC from this CD and start working. + However, it is better to install the whole thing to a harddisk. + The following section explains howto install GNU/Linux. + We have selected the Ubuntu distribution due to its relatively simple installat +ion procedure, ease of maintenanace and support for most of the hardware + available in the market. +\end_layout + +\begin_layout Section +Installing Ubuntu +\end_layout + +\begin_layout Standard +Most of the users prefer a dual boot system, to keep their MSWindows working. + We will explain the installation process keeping that handicap in mind. + All we need is an empty partition of minimum 5 GB size to install Ubuntu. + Free space inside a Windows partition will not do, we need to format the + partition to install Ubuntu. + The Ubuntu installer will make the system multi-boot by searching through + all the partitions for installed operating systems. +\end_layout + +\begin_layout Standard +\align left + +\shape italic +\bar under +The System +\end_layout + +\begin_layout Standard +This section will describe how Ubuntu was installed on a system, with MSWindows, + having the following partitions: +\end_layout + +\begin_layout Standard +C: (GNU/Linux calls it /dev/sda1) 20 GB +\end_layout + +\begin_layout Standard +D: ( /dev/sda5) 20 GB +\end_layout + +\begin_layout Standard +E: (/dev/sda6) 30 GB +\end_layout + +\begin_layout Standard +We will use the partition E: to install Ubuntu, it will be formatted. + +\end_layout + +\begin_layout Standard +\align left + +\shape italic +\bar under +The Procedure +\end_layout + +\begin_layout Standard +Set the first boot device CD ROM from the BIOS. + Boot the PC from the Ubuntu installation CD, we have used Phoenix Live + CD (a modified version on Ubuntu 9.1). + After 2 to 3 minutes a desktop as shown below will appear. + Click on the Installer icon, the window shown next will pop up. + Screens will appear to select the language, time zone and keyboard layout + as shown in the figures below. +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/desktop.png + lyxscale 30 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/inst1.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/inst2.png + lyxscale 50 + width 6cm + +\end_inset + + +\begin_inset Graphics + filename pics/inst3.png + lyxscale 50 + width 6cm + +\end_inset + + +\end_layout + +\begin_layout Standard +Now we proceed to the important part, choosing a partition to install Ubuntu. +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/inst_disk1.png + lyxscale 50 + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +The bar on the top graphically displays the existing partitions. + Below that there are three options provided : +\end_layout + +\begin_layout Enumerate +Install them side by side. + +\end_layout + +\begin_layout Enumerate +Erase and use the entire disk. +\end_layout + +\begin_layout Enumerate +Specify partitions manually. +\end_layout + +\begin_layout Standard +If you choose the first option, the Installer will resize and repartition + the disk to make some space for the new system. + By default this option is marked as selected. + The bar at the bottom shows the proposed partition scheme. + In the present example, the installer plans to divide the C: drive in to + two partitions to put ubuntu on the second. +\end_layout + +\begin_layout Standard +We are going to choose the third option, choose the partition manually. + We will use the last partition (drive E: ) for installing Ubuntu. + Once you choose that and click forward, a screen will appear where we can + add, delete and change partitions. + We have selected the third partition and clicked on Change. + A pop-up window appeared. + Using that we selected the file-system type to ext3, marked the format + option, and selected the mount point as / . + The screen with the pop-up window is shown below. +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/inst_disk2.png + lyxscale 50 + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\align left +If we proceed with this, a warning will appear complaining about the absence + of swap partitions. + The swap partition is used for supplementing the RAM with some virtual + memory. + When RAM is full, processes started but not running will be swapped out. + One can install a system without swap partition but it is a good idea to + have one. +\end_layout + +\begin_layout Standard +We decide to go back on the warning, to delete the E: drive, create two + new partitions in that space and make one of them as swap. + This also demonstrates how to make new partitions. + The screen after deleting E: , with the pop-up window to make the swap + partition is shown below. +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/inst_makeswap.png + lyxscale 50 + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +We made a 2 GB swap. + The remaining space is used for making one more partition, as shown in + the figure +\begin_inset LatexCommand ref +reference "fig:Making-the-partition" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/inst_disk3.png + lyxscale 50 + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Making the partition to install Ubuntu +\begin_inset LatexCommand label +name "fig:Making-the-partition" + +\end_inset + +. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Once disk partitioning is over, you will be presented with a screen to enter + a user name and password. +\begin_inset Foot +status collapsed + +\begin_layout Standard +All GNU/Linux installations ask for a root password during installation. + For simplicity, Ubuntu has decided to hide this information. + The first user created during installation has special privileges and that + password is asked, instead of the root password, for all system administration + jobs, like installing new software. +\end_layout + +\end_inset + + A warning will be issued if the password is less than 8 characters in length. + You will be given an option to import desktop settings from other installations + already on the disk, choose this if you like. + The next screen will confirm the installation. + After the installation is over, mat take 10 to 15 minutes, you will be + prompted to reboot the system. + On rebooting you will be presented with a menu, to choose the operating + system to boot. + First item in the menu will be the newly installed Ubuntu. +\end_layout + +\begin_layout Section +Package Management +\end_layout + +\begin_layout Standard +The Ubuntu install CD contains some common application programs like web + browser, office package, document viewer, image manipulation program etc. + After installing Ubuntu, you may want to add more applications. + The Ubuntu repository has an enormous number of packages, that can be installed + very easily. + You need to have a reasonably fast Internet connection for this purpose. +\end_layout + +\begin_layout Standard +From the main menu, open System->Administration->Synaptic package manager. + After providing the pass word (of the first user, created during installation), + the synaptic window will popup as shown in figure +\begin_inset LatexCommand ref +reference "fig:Synaptic-package-manager" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status collapsed + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/synaptic1.png + lyxscale 50 + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Synaptic package manager window +\begin_inset LatexCommand label +name "fig:Synaptic-package-manager" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Select Settings->Repositories to get a pop-up window as shown below. + Tick the four repositories, close the pop-up window and Click on Reload. + Synaptic will now try to download the index files from all these repositories. + It may take several minute. +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename pics/synaptic2.png + lyxscale 50 + width 12cm + +\end_inset + + +\end_layout + +\begin_layout Standard +Now, you are ready to install any package from the Ubuntu repository. + Search for any package by name, from these repositories, and install it. + If you have done the installation from original Ubuntu CD, you may require + the following packges: +\end_layout + +\begin_layout Itemize +lyx : A latex front-end. + Latex will be installed since lyx dpends on latex. +\end_layout + +\begin_layout Itemize +python-matplotlib : The graphics library +\end_layout + +\begin_layout Itemize +python-visual : 3D graphics +\end_layout + +\begin_layout Itemize +python-imaging-tk : Tkinter, Python Imaging Library etc. + will be installed +\end_layout + +\begin_layout Itemize +build-essential : C compiler and related tools. +\end_layout + +\begin_layout Subsection +Install from repository CD +\end_layout + +\begin_layout Standard +We can also install packages from repository CDs. + Insert the CD in the drive and Select Add CDROM from the Edit menu of Synaptic. + Now all the packages on the CD will be available for search and install. +\end_layout + +\begin_layout Subsubsection +Installing from the Terminal +\end_layout + +\begin_layout Standard +You can install packages from the terminal also. + You have to become the root user by giving the sudo command; +\end_layout + +\begin_layout Standard +$ sudo -s +\end_layout + +\begin_layout Standard +enter password : +\end_layout + +\begin_layout Standard +# +\end_layout + +\begin_layout Standard +Note that the prompt changes from $ to #, when you become root. + +\end_layout + +\begin_layout Standard +Install packages using the command : +\end_layout + +\begin_layout Standard +#apt-cdrom add +\end_layout + +\begin_layout Standard +#apt-get install mayavi2 +\end_layout + +\begin_layout Subsection +Behind the scene +\end_layout + +\begin_layout Standard +Even though there are installation programs that performs all these steps + automatically,it is better to know what is really happening. + Installing an operating system involves; +\end_layout + +\begin_layout Itemize +Partitioning of the hard disk +\end_layout + +\begin_layout Itemize +Formatting the partitions +\end_layout + +\begin_layout Itemize +Copying the operating system files +\end_layout + +\begin_layout Itemize +Installing a boot loader program +\end_layout + +\begin_layout Standard +The storage space of a hard disk drive can be divided into separate data + areas, known as partitions. + You can create primary partitions and extended partitions. + Logical drives (secondary partitions can be created inside the extended + partitions). + On a disk, you can have up to 4 partitions, where one of them could be + an extended partition. + You can have many logical drives inside the extended partition. +\end_layout + +\begin_layout Standard +On a MSWindows system, the primary partition is called the C: drive. + The logical drives inside the extended partition are named from D: onwards. + GNU/Linux uses a different naming convention. + The individual disks are named as /dev/sda , /dev/sdb etc. + and the partitions inside them are named as /dev/sda1, /dev/sda2 etc. + The numbering of secondary partitions inside the logical drive starts at + /dev/sda5. + (1 to 4 are reserved for primary and extended). + Hard disk partitioning can be done using the fdisk program. + The installation program also does this for you. +\end_layout + +\begin_layout Standard +The process of making a file system on a partition is called formatting. + There are many different types of file systems. + MSWindows use file systems like FAT32, NTFS etc. + and GNU/Linux mostly uses file systems like ext3, ext4 etc. +\end_layout + +\begin_layout Standard +The operating system files are kept in directories named boot, sbin, bin, + etc etc. + The kernel that loads while booting the system is kept in /boot. + The configuration files are kept in /etc. + /sbin and /bin holds programs that implements many of the shell commands. + Most of the application programs are kept in /usr/bin area. +\end_layout + +\begin_layout Standard +The boot loader program is the one provides the selection of OS to boot, + when you power on the system. + GRUB is the boot loader used by most of the GNU/Linux systems. +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "2" +key "wikipedia" + +\end_inset + +http://en.wikipedia.org/wiki/List_of_curves +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "3" +key "gap-system" + +\end_inset + +http://www.gap-system.org/~history/Curves/Curves.html +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "4" +key "ellipse" + +\end_inset + +http://www.gap-system.org/~history/Curves/Ellipse.html +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "5" +key "wolfram" + +\end_inset + +http://mathworld.wolfram.com/ +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "6" +key "numpy examples" + +\end_inset + +http://www.scipy.org/Numpy_Example_List +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "7" +key "scipy/doc" + +\end_inset + +http://docs.scipy.org/doc/ +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "8" +key "Numerical Integration" + +\end_inset + +http://numericalmethods.eng.usf.edu/mws/gen/07int/index.html +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "9" +key "fractals" + +\end_inset + +http://www.angelfire.com/art2/fractals/lesson2.htm +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "10" +key "numerical recepies" + +\end_inset + +http://www.fizyka.umk.pl/nrbook/bookcpdf.html +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "11" +key "mathcs.emory" + +\end_inset + +http://www.mathcs.emory.edu/ccs/ccs315/ccs315/ccs315.html +\end_layout + +\begin_layout Bibliography +\begin_inset LatexCommand bibitem +label "12" +key "Kiusalas" + +\end_inset + +Numerical Methods in Engineering with Python by Jaan Kiusalaas +\end_layout + +\end_body +\end_document