کتاب برنامه‌نویسی سی‌پلاس‌پلاس نسخه PDF انگلیسی
کتاب برنامه‌نویسی سی‌پلاس‌پلاس نسخه PDF انگلیسی قیمت اصلی ۸۴.۸۷۰ تومان بود.قیمت فعلی ۳۸.۴۵۰ تومان است.
بازگشت به محصولات
کتاب حسابان نسخه PDF انگلیسی
کتاب حسابان نسخه PDF انگلیسی قیمت اصلی ۸۴.۸۷۰ تومان بود.قیمت فعلی ۳۸.۴۵۰ تومان است.

کتاب محاسبات عددی با سی‌پلاس‌پلاس اثر دائوچی یانگ نسخه PDF انگلیسی

قیمت اصلی ۸۴.۸۷۰ تومان بود.قیمت فعلی ۳۸.۴۵۰ تومان است.

مشخصات فایل

  • نوع فایل: PDF
  • زبان: انگلیسی
  • تعداد صفحات: 334 صفحه
  • قابل استفاده در: موبایل، تبلت، کامپیوتر
  • نوع دسترسی: دانلود فوری بعد از خرید
دسته:
توضیحات

معرفی کتاب C++ and Object-Oriented Numeric Computing for Scientists and Engineers

C++ and Object-Oriented Numeric Computing for Scientists and Engineers اثر Daoqi Yang کتابی درباره پیوند برنامه‌نویسی C++، طراحی شیءگرا و محاسبات عددی برای مسائل علمی و مهندسی است. فایل محصول با عنوان و نویسنده این اثر هم‌خوانی دارد. کتاب برای دانشجویان و مهندسانی مناسب است که می‌خواهند الگوریتم‌های عددی را فقط به‌صورت فرمول نبینند، بلکه آن‌ها را در قالب نرم‌افزار ساخت‌یافته، قابل توسعه و قابل استفاده مجدد پیاده‌سازی کنند.

محاسبات علمی در عمل فقط نوشتن چند Formula نیست. داده باید نمایش داده شود، Matrix و Vector مدیریت شوند، Errorهای عددی کنترل شوند، Algorithmها تست شوند و Code در پروژه‌های بزرگ قابل نگهداری بماند. C++ به دلیل Performance، Type System و قابلیت ساخت Abstractionهای سطح بالا، برای این نوع پروژه‌ها ابزار مهمی است.

محاسبات عددی چیست؟

Numerical Computing مجموعه روش‌هایی برای تقریب Solution مسائل ریاضی با Computer است. بسیاری از مسائل علمی Solution تحلیلی ساده ندارند یا Data آن‌قدر بزرگ است که محاسبه دستی ممکن نیست.

Algorithm عددی معمولاً با Approximation کار می‌کند و باید Error، Stability و Cost محاسباتی آن بررسی شود.

چرا C++ برای Scientific Computing؟

C++ هم کنترل مناسب روی Memory و Performance می‌دهد و هم با Class، Template و Operator Overloading امکان ساخت Interfaceهای سطح بالا را فراهم می‌کند.

این ترکیب برای Libraryهای Matrix، Solverها و Simulationهای عددی مفید است.

برنامه‌نویسی شیءگرا در محاسبات علمی

Object-Oriented Programming کمک می‌کند داده و رفتار مرتبط در Classهای مشخص قرار گیرند. برای مثال Matrix می‌تواند علاوه بر Storage، عملیات Indexing، Addition و Multiplication را در یک Abstraction واحد ارائه کند.

هدف OOP در Scientific Code فقط زیبایی نیست؛ باید Reuse، Correctness و Maintenance را بهبود دهد.

Class

Class می‌تواند Concept ریاضی را به Type برنامه‌نویسی تبدیل کند. Vector، Matrix، Polynomial یا Mesh می‌توانند Classهای جداگانه باشند.

Interface باید Operationهای معتبر را مشخص کند و State نامعتبر را تا حد ممکن جلوگیری کند.

Encapsulation

جزئیات Storage بهتر است پشت Interface بماند. User یک Matrix نباید برای هر Operation مجبور باشد Layout داخلی Memory را بداند.

این جداسازی تغییر Implementation را ساده‌تر می‌کند.

Constructor و State معتبر

Object باید از زمان ساخته شدن State معتبر داشته باشد. Dimension منفی، Buffer ناقص یا Ownership مبهم نباید اجازه ایجاد Object نامعتبر بدهد.

Operator Overloading

برای Typeهای ریاضی، Operator Overloading می‌تواند Code را طبیعی‌تر کند. جمع دو Vector یا ضرب Matrix با Scalar نمونه‌هایی هستند که Meaning روشن دارند.

اما Overload نباید رفتاری غیرمنتظره ایجاد کند یا Cost سنگین را پنهان کند.

Template

Template اجازه می‌دهد یک Algorithm برای Typeهای عددی مختلف نوشته شود. Matrix می‌تواند با float، double یا Typeهای دیگر کار کند، اگر Requirementهای لازم را داشته باشند.

Generic Programming برای Libraryهای عددی اهمیت زیادی دارد.

Vector و Matrix

بخش بزرگی از Scientific Computing بر Vector و Matrix بنا شده است. Representation و Layout آن‌ها روی Performance اثر دارد.

Operationهایی مانند Addition، Multiplication، Transpose و Norm باید هم از نظر ریاضی و هم از نظر هزینه اجرا فهمیده شوند.

Indexing

خطای Index یکی از Bugهای خطرناک است. در Development می‌توان Boundary Check داشت، اما در مسیرهای Performance-sensitive ممکن است Strategy متفاوتی انتخاب شود.

Memory Layout

Row-major و Column-major بودن روی Cache Locality و Compatibility با Libraryهای دیگر اثر دارد.

Loop Ordering باید با Layout هماهنگ باشد.

Floating-Point

اعداد حقیقی در Computer با Precision محدود نمایش داده می‌شوند. بسیاری از اعداد اعشاری Representation دقیق ندارند.

بنابراین Equality مستقیم و جمع تعداد زیادی مقدار می‌تواند Error عددی ایجاد کند.

Round-off Error

هر Operation Floating-Point ممکن است مقدار کمی Error داشته باشد. در Algorithmهای طولانی این Errorها می‌توانند تجمع پیدا کنند.

Truncation Error

وقتی Process پیوسته یا Infinite با Approximation محدود جایگزین می‌شود، Truncation Error ایجاد می‌شود. انتخاب Step Size روی آن اثر دارد.

Stability

Algorithm پایدار Error کوچک ورودی یا Round-off را بیش از حد تقویت نمی‌کند. دو روش که از نظر ریاضی معادل‌اند ممکن است از نظر Numerical Stability بسیار متفاوت باشند.

Conditioning

Conditioning ویژگی خود مسئله است و Stability ویژگی Algorithm. مسئله Ill-conditioned ممکن است نسبت به تغییر کوچک Input بسیار حساس باشد.

تفکیک این دو مفهوم برای Debugging Numerical Result مهم است.

Linear Systems

حل سیستم خطی Ax=b یکی از هسته‌های محاسبات عددی است. روش مستقیم و Iterative هرکدام کاربرد دارند.

ساخت Matrix معکوس به‌صورت صریح معمولاً برای حل سیستم بهترین راه نیست.

Gaussian Elimination

حذف گاوسی یک روش کلاسیک برای حل سیستم خطی است. Pivoting برای کاهش مشکلات عددی اهمیت دارد.

LU Factorization

با تجزیه Matrix به Factorهای پایین و بالای مثلثی می‌توان چند System با Matrix یکسان و Right-hand side متفاوت را Efficientتر حل کرد.

Iterative Solvers

برای Matrixهای بزرگ و Sparse، Solverهای Iterative می‌توانند بهتر از روش مستقیم باشند.

Convergence به Structure Matrix و Preconditioning وابسته است.

Sparse Matrices

در بسیاری از مسائل PDE و Simulation، اکثر Elementهای Matrix صفر هستند. ذخیره کامل Matrix Memory را هدر می‌دهد.

ساختار Sparse باید فقط Elementهای لازم را نگه دارد.

Interpolation

Interpolation از Pointهای شناخته‌شده مقدار میان آن‌ها را تخمین می‌زند. انتخاب Polynomial درجه بالا همیشه بهترین نیست و می‌تواند Oscillation ایجاد کند.

Polynomial Interpolation

روش‌های مختلف Representation و Evaluation Polynomial از نظر Stability و Efficiency متفاوت‌اند.

Splines

Splineها با Piecewise Polynomial Smooth Approximation می‌سازند و در بسیاری از کاربردها رفتار بهتری نسبت به یک Polynomial سراسری با درجه بالا دارند.

Numerical Differentiation

Derivative را می‌توان با Difference Formula تقریب زد. Step بسیار بزرگ Truncation Error و Step بسیار کوچک Round-off Error را افزایش می‌دهد.

بنابراین کوچک‌تر کردن Step همیشه Accuracy را بیشتر نمی‌کند.

Numerical Integration

برای محاسبه Integral می‌توان از Quadrature استفاده کرد. Trapezoidal و Simpson نمونه‌های کلاسیک‌اند.

Adaptive Method می‌تواند در Regionهای دشوار Step بیشتری استفاده کند.

Root Finding

پیدا کردن Root معادله غیرخطی یکی از مسائل پایه است. Bisection robust اما نسبتاً کند است و Newton می‌تواند سریع باشد اما به Initial Guess و مشتق وابسته است.

Bisection

اگر Function روی Interval تغییر علامت دهد و شرایط لازم برقرار باشد، Bisection با نصف کردن Interval به Root نزدیک می‌شود.

Newton Method

Newton از Tangent برای Update Estimate استفاده می‌کند. نزدیک Root می‌تواند Convergence سریع داشته باشد، اما تضمین سراسری ندارد.

Optimization

بسیاری از مسائل علمی به Minimize یا Maximize کردن Function تبدیل می‌شوند. Gradient، Constraint و Condition Problem در انتخاب Method اهمیت دارند.

Ordinary Differential Equations

ODEها تغییر یک System را نسبت به زمان یا متغیر مستقل مدل می‌کنند. Simulation دینامیکی، Mechanics و Control مثال‌های رایج‌اند.

Euler Method

Euler ساده و آموزشی است اما Accuracy محدودی دارد. Step Size روی Error و Stability اثر مستقیم دارد.

Runge-Kutta

روش‌های Runge-Kutta با چند Evaluation در هر Step Accuracy بالاتری ایجاد می‌کنند و در ODE Solution بسیار رایج‌اند.

Partial Differential Equations

PDEها در Heat Transfer، Fluid Dynamics، Waves و بسیاری از مسائل مهندسی ظاهر می‌شوند.

Discretization فضای پیوسته را به Problem عددی محدود تبدیل می‌کند.

Finite Difference

Finite Difference مشتق را با Relation میان Grid Pointها Approximate می‌کند. Grid Resolution میان Accuracy و Cost Trade-off ایجاد می‌کند.

Boundary Conditions

Solution PDE به Boundary و Initial Condition وابسته است. پیاده‌سازی نادرست آن‌ها می‌تواند Result ظاهراً منطقی اما غلط تولید کند.

Eigenvalue Problems

Eigenvalue در Stability، Vibration، Quantum و بسیاری از مسائل علمی کاربرد دارد. Algorithm مناسب به Size و Structure Matrix بستگی دارد.

Power Method

Power Method برای یافتن Eigenvalue غالب Concept ساده‌ای دارد. Rate Convergence به نسبت Eigenvalueها وابسته است.

Randomness و Simulation

Random Number در Monte Carlo و Simulation استفاده می‌شود. Pseudorandom Generator باید Seed و Quality مناسب داشته باشد.

Monte Carlo

Monte Carlo با Sampling تصادفی Quantity را Estimate می‌کند. Error آن ماهیت آماری دارد و با تعداد Sample کاهش می‌یابد.

Object-Oriented Design برای Solverها

Solver می‌تواند Interface مشترک داشته باشد و Implementationهای مختلف Algorithm را پشت آن قرار دهد.

این Design Comparison و Testing روش‌ها را ساده می‌کند.

Inheritance

Inheritance زمانی مناسب است که رابطه واقعی «is-a» وجود داشته باشد. برای Reuse ساده، Composition اغلب انعطاف بیشتری دارد.

Polymorphism

Polymorphism اجازه می‌دهد Code از Interface عمومی برای چند Solver یا Model استفاده کند.

در مسیرهای Performance-sensitive باید هزینه Runtime Dispatch نیز در نظر گرفته شود.

Composition

یک Simulation می‌تواند Solver، Grid، Boundary Condition و Model را به‌صورت Objectهای مستقل ترکیب کند.

این معماری تست و جایگزینی Componentها را ساده می‌کند.

Generic Programming در Numerical Code

گاهی Compile-time Polymorphism و Template برای Scientific Library مناسب‌تر از Inheritance است.

انتخاب بین OOP و Template باید با نیاز Interface و Performance هماهنگ باشد.

Exception Handling

File Error، Allocation Failure و Invalid Parameter باید مدیریت شوند. در Loop عددی داخلی Exception زیاد ممکن است Cost ایجاد کند، بنابراین Boundary طراحی اهمیت دارد.

Assertions

Assertion برای بررسی Invariantهای توسعه مناسب است؛ مثلاً Dimension سازگار Matrixها.

اما Input User باید با Validation واقعی مدیریت شود.

Testing Numerical Software

Output Approximate است و Testing باید Tolerance داشته باشد. Equality دقیق Floating-Point معمولاً مناسب نیست.

Caseهایی با Solution تحلیلی شناخته‌شده برای Verification بسیار ارزشمندند.

Unit Tests

Operationهای Vector، Matrix و Solverهای کوچک باید مستقل تست شوند. Edge Caseهای Zero Size، Singular Matrix و Parameter نامعتبر مهم‌اند.

Regression Tests

وقتی Bug عددی رفع شد، Test باید اضافه شود تا در Refactor بعدی بازنگردد.

Verification و Validation

Verification می‌پرسد آیا Equation را درست حل کرده‌ایم؛ Validation می‌پرسد آیا Equation اصلاً Model مناسبی برای Reality است.

این دو در Scientific Computing متفاوت‌اند.

Benchmarking

Performance باید روی Problem نماینده اندازه‌گیری شود. Microbenchmark کوچک ممکن است Memory Behavior واقعی را نشان ندهد.

Profiling

قبل از Optimization باید Bottleneck واقعی پیدا شود. ممکن است Algorithm، Memory Access یا I/O عامل اصلی باشد.

Cache Locality

CPU مدرن به Layout داده حساس است. Traversal پیوسته Memory معمولاً سریع‌تر از Access تصادفی است.

Complexity

بعضی Numerical Algorithmها O(n³) هستند و با بزرگ شدن Matrix سریعاً گران می‌شوند. Structure خاص مانند Sparse یا Banded می‌تواند Complexity را تغییر دهد.

Parallelism

Scientific Computing ظرفیت Parallelization دارد، اما Dependency داده و Synchronization باید بررسی شوند.

Thread بیشتر همیشه Performance بیشتر ایجاد نمی‌کند.

Reproducibility

Input، Parameter، Compiler، Library Version و Random Seed باید ثبت شوند.

نتیجه علمی بدون Reproducibility ارزش کمتری دارد.

File I/O

Simulationها ممکن است Dataset بزرگ بخوانند یا Output حجیم بنویسند. Format، Precision و Error Handling در I/O اهمیت دارند.

Serialization

ذخیره State Object می‌تواند Resume Simulation را ممکن کند. Versioning Format باید در پروژه بلندمدت در نظر گرفته شود.

Visualization

نمودار و Visualization برای بررسی Result علمی ضروری‌اند، اما تصویر زیبا جای Error Analysis را نمی‌گیرد.

Documentation

Function عددی باید Assumption، Unit، Input Domain و Error Behavior را توضیح دهد.

بدون Documentation استفاده مجدد از Scientific Code پرخطر است.

Units

مخلوط کردن Unitها می‌تواند Error بزرگی ایجاد کند. Naming یا Type Design باید Unit را تا حد امکان روشن نگه دارد.

Dimensional Analysis

بررسی Dimension فیزیکی Formula راه ساده‌ای برای پیدا کردن بعضی خطاهاست.

Modern C++ و محدودیت تاریخی کتاب

این اثر مربوط به دوره قدیمی‌تر C++ است. قابلیت‌هایی مانند smart pointerهای استاندارد، move semantics، rangeها و بسیاری از Libraryهای مدرن در زمان نگارش آن وجود نداشتند.

بنابراین Conceptهای Numerical و OOP ارزشمندند، اما Syntax و Resource Management بهتر است با C++ مدرن تطبیق داده شوند.

Smart Pointers

در Code امروز Ownership دینامیک بهتر است با RAII و Smart Pointerهای مناسب مدیریت شود، نه new/delete پراکنده.

Standard Library

Container و Algorithm استاندارد می‌توانند بخش زیادی از Infrastructure را قابل اعتمادتر کنند. بازسازی دستی Structure فقط زمانی توجیه دارد که Requirement خاص وجود داشته باشد.

External Numerical Libraries

در پروژه Production معمولاً بهتر است برای عملیات استاندارد از Libraryهای معتبر و تست‌شده استفاده شود.

مطالعه کتاب کمک می‌کند بفهمیم پشت این Libraryها چه Conceptهایی قرار دارد.

روش مطالعه پیشنهادی

هر Algorithm را ابتدا روی Problem کوچک با Solution معلوم پیاده کنید. Error را اندازه بگیرید و اثر Step Size یا Precision را ببینید.

سپس Code را به Class و Componentهای قابل استفاده مجدد تبدیل کنید و تست بنویسید.

این کتاب برای چه کسانی مناسب است؟

  • دانشجویان مهندسی و علوم.
  • برنامه‌نویسان C++ علاقه‌مند به Scientific Computing.
  • افرادی که Numerical Methods را می‌دانند و می‌خواهند Software Design بهتری داشته باشند.
  • پژوهشگران Simulation و محاسبات علمی.
  • دانشجویانی که می‌خواهند OOP را در یک Domain فنی واقعی ببینند.

جمع‌بندی

C++ and Object-Oriented Numeric Computing for Scientists and Engineers اثر Daoqi Yang دو حوزه مهم را به هم متصل می‌کند: روش‌های عددی و طراحی نرم‌افزار. Vector، Matrix، Linear Systems، Approximation، Differential Equations، Error Analysis و Scientific Algorithms در کنار Class، Encapsulation، Generic Programming و Reusability معنا پیدا می‌کنند.

مهم‌ترین درس کتاب این است که Scientific Code نیز نرم‌افزار واقعی است و باید علاوه بر جواب عددی، از نظر Structure، Error Handling، Testing و Maintainability قابل اعتماد باشد. با تطبیق مثال‌های تاریخی آن با C++ مدرن، این اثر می‌تواند پایه خوبی برای توسعه نرم‌افزارهای محاسباتی و مهندسی باشد.

نظرات (0)

نقد و بررسی‌ها

هنوز بررسی‌ای ثبت نشده است.

اولین کسی باشید که دیدگاهی می نویسد “کتاب محاسبات عددی با سی‌پلاس‌پلاس اثر دائوچی یانگ نسخه PDF انگلیسی”

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Shipping & Delivery