نرم افزار: سیستم ها: محاسبات علمی

علوم کامپیوتر با Mathematica: نظریه و عمل برای علوم، ریاضیات و مهندسی

Computer science with Mathematica: theory and practice for science, mathematics, and engineering

دانلود کتاب Computer science with Mathematica: theory and practice for science, mathematics, and engineering (به فارسی: علوم کامپیوتر با Mathematica: نظریه و عمل برای علوم، ریاضیات و مهندسی) نوشته شده توسط «Roman E. Maeder – Roman Maeder»


اطلاعات کتاب علوم کامپیوتر با Mathematica: نظریه و عمل برای علوم، ریاضیات و مهندسی

موضوع اصلی: ریاضیات

نوع: کتاب الکترونیکی

ناشر: Cambridge University Press

نویسنده: Roman E. Maeder – Roman Maeder

زبان: English

فرمت کتاب: djvu (قابل تبدیل به سایر فرمت ها)

سال انتشار: 2000

تعداد صفحه: 399

حجم کتاب: 4 مگابایت

کد کتاب: 9780521663953 , 0521663954 , 0521631726

توضیحات کتاب علوم کامپیوتر با Mathematica: نظریه و عمل برای علوم، ریاضیات و مهندسی

Mathematica به عنوان یک زبان برنامه نویسی نمادین و به عنوان زبانی که می تواند به طور موثر از اکثر پارادایم های برنامه نویسی تقلید کند، بی نظیر است. در این کتاب، نویسنده این موضوع را به وفور روشن می‌کند، زیرا خواننده را از طریق نمونه‌گیری از قدرت Mathematica می‌برد، با خواننده مورد نظر یک دانشمند کامپیوتر بدون دانش ریاضیات.

پس از بررسی بسیار مختصر مفاهیم و معماری های کامپیوتر در فصل 1، نویسنده فصل 2 را با مروری بر نحو Mathematica آغاز می کند. مفیدترین نکات در این فصل عبارت بودند از: 1. نحوه پیاده سازی توابع تعریف شده به صورت تکه ای. 2. توابع خالص. 3. توانایی Mathematica برای انجام برنامه نویسی تابعی از طریق عملیات تابعی. 4. عبارات و اتم های عادی.

فصل 3 مقدمه ای بر تکرار و بازگشت است. نویسنده فصل را با نشان دادن نحوه استفاده از برنامه های مبتنی بر قانون یا بازگشتی برای ساختن برنامه ای برای محاسبه بزرگترین مقسوم علیه مشترک دو عدد صحیح آغاز می کند. با این حال، او مراقب است که توجه داشته باشد که استفاده از بازگشت ممکن است ناکارآمد باشد و بنابراین او نشان می دهد که چگونه برنامه را به برنامه ای تبدیل کنید که از تکرار حلقه استفاده می کند. تضاد در ناکارآمدی بین برنامه های تکراری و بازگشتی دوباره در بخش بعدی که به مسئله کولاتز می پردازد، نشان داده شده است. یک محاسبه تکراری از دنباله Collatz داده شده است، و نویسنده استفاده از حلقه ها و نه بازگشتی را برای به دست آوردن برنامه های کارآمد تشویق می کند. نویسنده نحوه استفاده از متغیرهای حلقه را برای آزمایش صحت برنامه برای حلقه ها نشان می دهد. خواننده مهندس/فیزیکدان از کاربرد روش های تکراری برای حل معادلات دیفرانسیل معمولی قدردانی خواهد کرد.

در فصل 4، نویسنده نحوه ساخت بسته‌ها در Mathematica را از طریق مثالی در متغیرهای مختلط نشان می‌دهد. نقش زمینه‌ها در Mathematica و همچنین نحوه مدیریت گزینه‌ها در بسته کاملاً واضح است.

بحث در مورد انواع داده های انتزاعی در فصل 5 دنبال می شود. نویسنده این موارد را به معنای معمول مستقل بودن از پیاده سازی تعریف می کند و مفهوم مدل را معرفی می کند. حلقه اعداد مدولار به عنوان نمونه ای از نحوه طراحی و پیاده سازی انواع داده در Mathematica انتخاب شده است و نشان می دهد که چگونه با استفاده از سازنده و انتخابگر، نوع داده این حلقه را مستقل از پیاده سازی کنیم. بحث در این فصل در کتاب‌های معمولی Mathematica یافت نمی‌شود، بنابراین برای یک دید عمیق‌تر از قابلیت‌های Mathematica برای مدیریت انواع داده‌های انتزاعی بسیار ارزشمند است.

موضوعاتی با ماهیت کاربردی تر در فصل 6 مورد بحث قرار می گیرند که در آن نویسنده الگوریتم های Mathematica را برای مرتب سازی و جستجو ارائه می دهد. از قابلیت گرافیکی Mathematica برای نشان دادن ویژگی‌های این الگوریتم‌ها استفاده می‌شود و نویسنده نشان می‌دهد که چگونه می‌توان یک الگوریتم جستجوی باینری را طراحی کرد که چند شکلی است، یعنی الگوریتمی که می‌تواند برای جستجوی مجموعه‌هایی از داده‌ها از انواع مختلف استفاده شود. ساختارهای داده پویا از طریق درخت باینری نشان داده شده است.

پیچیدگی محاسباتی الگوریتم ها در فصل 7 مورد بحث قرار گرفته است. نویسنده از محاسبه عدد فیبوناچی n برای مقایسه پیچیدگی الگوریتم های مختلف استفاده می کند. یک الگوریتم بازگشتی برای این محاسبات ارائه شده است و نشان داده شده است که دارای پیچیدگی نمایی است. این الگوریتم (با توجه به وابستگی درجه دوم در تعداد مراحل) با استفاده از تکنیکی از برنامه نویسی پویا، که در آن هر عدد فیبوناچی محاسبه شده به عنوان یک قانون ذخیره می شود، بهبود یافته است. برای کسانی که درگیر الگوریتم های رمزگذاری هستند، بحث در مورد محاسبات اعداد صحیح بلند و ضرب سریع باید مفید باشد. روش کاراتسوبا برای ضرب دو عدد صحیح در Mathematica پیاده سازی شده است.

فصل 8 به جبر خطی اختصاص دارد، که در آن نویسنده نحوه پیاده‌سازی ضرب ماتریس پایه و محصولات درونی و بیرونی را در Mathematica نشان می‌دهد. علاوه بر این، او نحوه انجام محاسبات برداری را با استفاده از Mathematica نشان می‌دهد و عملگر واگرایی، گرادیان، ژاکوبین و لاپلاسین را تعریف می‌کند. مهم‌تر از همه، نویسنده نحوه برنامه‌نویسی با ساختارهای داده پویا در Mathematica را نشان می‌دهد، این نسبتاً ساده است زیرا Mathematica جمع‌آوری زباله را انجام می‌دهد. ساختار داده های پشته به عنوان مثال به تفصیل تجزیه و تحلیل می شود.

فصل 9 مروری دقیق تر از لیست ها و بازگشت در Mathematica است. خوانندگان علاقه مند به هوش مصنوعی به دلیل ارتباط با زبان برنامه نویسی LISP از این بحث استقبال خواهند کرد. اگرچه کوتاه است، اما نویسنده روشی قانع کننده از نحوه کار بر روی ساختارهای داده از طریق انتخابگرها و سازنده های آنها ارائه می دهد.

بحث در فصل 9 در مورد برنامه نویسی مبتنی بر قاعده برای من مهم ترین بود، زیرا در ارائه قابلیت های تطبیق الگوی Mathematica مفید بود. اگر کسی در تلاش برای پیاده‌سازی برنامه‌نویسی منطق استقرایی یا برنامه‌نویسی منطق تصادفی در Mathematica است، این فصل شروع خوبی در این زمینه است.

فصل 11 را می توان به عنوان بحثی در مورد نحوه اجرای حساب لامبدا از منطق ریاضی در Mathematica در نظر گرفت. توانایی Mathematica در تقلید برنامه نویسی تابعی است


As a symbolic programming language, and as one that can effectively emulate most programming paradigms, Mathematica is unequaled. In this book, the author makes this abundantly clear as he takes the reader through a sampling of the power of Mathematica, with the target reader being a computer scientist without a knowledge of Mathematica.

After a very brief review of computer concepts and architectures in chapter 1, the author begins chapter 2 with an overview of the syntax of Mathematica. The most helpful points in this chapter were: 1. How to implement piecewise-defined functions. 2. Pure functions. 3. The ability of Mathematica to do functional programming via functional operations. 4. Normal expressions and atoms.

Chapter 3 is an introduction to iteration and recursion. The author begins the chapter by showing how to use rule-based or recursive programs to construct a program to calculate the greatest common divisor of two integers. He is careful to note however that the use of recursion may be inefficient and so he shows how to convert the program to one that uses loop iteration. The contrast in inefficiency between iterative and recursive programs is illustrated again in the next section which deals with the Collatz problem. An iterative computation of the Collatz sequence is given, and the author encourages the use of loops and not recursion, to obtain efficient programs. The author shows how to use loop invariants to test program correctness for loops. The engineer/physicist reader will appreciate the application of iterative methods to the solution of ordinary differential equations.

In chapter 4, the author shows how to build packages in Mathematica, via an example in complex variables. The role of contexts in Mathematica is made very clear, as well as how to handle options in the package.

A discussion of abstract data types follows in chapter 5. The author defines these in the usual sense of being independent of implementation and he introduces the concept of a model. The ring of modular numbers is chosen as an example of how to design and implement data types in Mathematica, and he shows how to make the data type for this ring independent of implementation by using constructors and selectors. The discussion in this chapter is not found in the usual Mathematica books, so it is invaluable for a more in-depth view of the capabilities of Mathematica to handle abstract data types.

Topics of a more applied nature are discussed in chapter 6, wherein the author gives Mathematica algorithms for sorting and searching. The graphics capability of Mathematica is used to illustrate the properties of these algorithms and the author shows how to design a binary search algorithm that is polymorphic, i.e. one that can be used to search collections of data of different types. Dynamic data structures are illustrated via the binary tree.

The computational complexity of algorithms is discussed in chapter 7. The author uses the computation of the nth Fibonacci number to compare the complexity of different algorithms. A recursive algorithm is given for this computation, and shown to be of exponential complexity. This algorithm is improved upon (given a quadratic dependence in the number of steps) by using a technique from dynamic programming, wherein each computed Fibonacci number is stored as a rule. For those involved in encryption algorithms, the discussion on long-integer arithmetic and fast multiplication should be helpful. The Karatsuba method for multiplying two integers is implemented in Mathematica.

Chapter 8 is devoted to linear algebra, wherein the author shows how to implement basic matrix multiplication and inner and outer products in Mathematica. In addition, he shows how to do vector calculus using Mathematica, and defines the divergence operator, the gradient, the Jacobian, and Laplacian. Most importantly, the author shows how to program with dynamic data structures in Mathematica, this being relatively straightforward since Mathematica does garbage collection. The heap data structure is analyzed in detail as an example.

Chapter 9 is a more detailed overview of lists and recursion in Mathematica. Readers interested in artificial intelligence will appreciate the discussion because of the connection with the LISP programming language. Although short, the author does give a convincing treatment of how to operate on data structures via their selectors and constructors.

The discussion in chapter 9 on rule-based programming was the most important to me, as it was helpful in bringing out the pattern matching capabilities of Mathematica. If one is attempting to implement such as inductive logic programming or stochastic logic programming in Mathematica, this chapter is a good start in that regard.

Chapter 11 could be viewed as a discussion of how the lambda calculus from mathematical logic is implemented in Mathematica. The ability of Mathematica to emulate functional programming is one of its most powerful features, and this is illustrated nicely here.

The topics in chapter 12 are more theoretical in nature, and those interested in this facet of computer science will find the discussion on primitive recursive functions fairly convincing. In addition, the author gives the Mathematica code for simulating a Turing machine. He shows via Mathematica, that recursive functions are Turing computable.

The author gives an introduction to databases in chapter 13. He shows how to perform the relational algebra in relational databases using Mathematica. Although the practical value of this chapter is limited since one would probably not want to access databases using Mathematica, the treatment does allow an understanding of how databases are constructed.

The last chapter of the book is a very interesting discussion on how to implement object oriented programming in Mathematica. The author shows how to implement containers using Mathematica and gives the class hierarchy associated with the collections. The interval, list, and set are given as implementations of collections, and the array and dictionary is given as an implementation of an indexed collection.

دانلود کتاب «علوم کامپیوتر با Mathematica: نظریه و عمل برای علوم، ریاضیات و مهندسی»

مبلغی که بابت خرید کتاب می‌پردازیم به مراتب پایین‌تر از هزینه‌هایی است که در آینده بابت نخواندن آن خواهیم پرداخت.

برای دریافت کد تخفیف ۲۰ درصدی این کتاب، ابتدا صفحه اینستاگرام کازرون آنلاین (@kazerun.online ) را دنبال کنید. سپس، کلمه «بلیان» را در دایرکت ارسال کنید تا کد تخفیف به شما ارسال شود.