Литмир - Электронная Библиотека
A
A

• Отличная веб-страница для всех, кто любит математику или просто хочет ее применять.

• Отличная веб-страница для всех, кто хочет увидеть гуманитарный аспект математики; например, кто из крупных математиков выиграл Олимпийские игры?

 • Знаменитые математики: биографии, достижения.

 • Курьезы.

• Знаменитые кривые.

• Известные задачи.

• Математические темы.

 • Алгебра.

 • Анализ.

 • Теория чисел.

 • Геометрия и топология.

 • Математическая физика.

 • Математическая астрономия.

 • История математики.

 • Многое другое

Freeman, T. L., and Chris Phillips. Parallel Numerical Algorithms. Prentice Hall, 1992.

Gullberg, Jan. Mathematics — From the Birth of Numbers. W. W. Norton, 1996. ISBN 039304002X. Одна из наиболее интересных книг об основах и пользе математики, которую можно читать одновременно и с пользой (например, о матрицах), и с удовольствием.

Knuth, Donald E. The Art of Computer Programming, Volume 2: Seminumerical Algorithms, Third Edition. Addison-Wesley, 1998. ISBN: 0202496842.

Stewart, G. W. Matrix Algorithms, Volume I: Basic Decompositions. SIAM, 1998. ISBN 0898714141.

Wood, Alistair. Introduction to Numerical Analysis. Addison-Wesley, 1999. ISBN 020194291X.

Задание

1. Выведите на экран размеры типов

char
,
short
,
int
,
long
,
float
,
double
,
int*
и
double*
(используйте оператор
sizeof
, а не заголовок
<limits>
).

2. Используя оператор

sizeof
, выведите на экран размеры объектов
Matrix <int> a(10)
,
Matrix<int> b(10)
,
Matrix<double> c(10)
,
Matrix<int,2> d(10,10)
,
Matrix<int,3> e(10, 10,10)
.

3. Выведите на печать количество элементов в каждом из объектов, перечисленных в упр. 2.

4. Напишите программу, вводящую числа типа

int
из потока
cin
и результат применения функции
sqrt()
к каждому из этих чисел
int
. Если функцию
sqrt(x)
нельзя применять к некоторым значениям
x
, выведите на экран сообщение “корень квадратный не существует” (т.е. проверяйте значения, возвращаемые функцией
sqrt()
).

5. Считайте десять чисел с плавающей точкой из потока ввода и запишите их в объект типа

Matrix<double>
. Класс
Matrix
не имеет функции
push_back()
, поэтому будьте осторожны и предусмотрите реакцию на попытку ввести неверное количество чисел типа
double
. Выведите этот объект класса
Matrix
на экран.

6. Вычислите таблицу умножения

[0,n]*[0,m]
и представьте ее в виде двумерного объекта класса
Matrix
. Введите числа
n
и
m
из потока
cin
и аккуратно выведите на экран полученную таблицу (предполагается, что число m достаточно мало, чтобы результаты поместились в одной строке).

7. Введите из потока

cin
десять объектов класса
complex<double>
(да, класс
cin
поддерживает оператор
>>
для типа
complex
) и поместите его в объект класса
Matrix
. Вычислите и выведите на экран сумму десяти комплексных матриц.

8. Запишите шесть чисел типа

int
в объект класса
Matrix<int,2> m(2,3)
и выведите их на экран.

Контрольные вопросы

1. Кто выполняет числовые расчеты?

2. Что такое точность?

3. Что такое переполнение?

4. Каковы обычные размеры типов

double
и
int
?

5. Как обнаружить переполнение?

6. Как определить пределы изменения чисел, например наибольшее число типа

int
?

7. Что такое массив, строка и столбец?

8. Что такое многомерный массив в стиле языка C?

9. Какими свойствами должен обладать язык программирования (например, должна существовать библиотека) для матричных вычислений?

10. Что такое размерность матрицы?

11. Сколько размерностей может иметь матрица?

12. Что такое срезка?

13. Что такое пересылка? Приведите пример.

14. В чем заключается разница между индексированием в стиле языков Fortran и C?

15. Как применить операцию к каждому элементу матрицы? Приведите примеры.

16. Что такое объединенное умножение и сложение (fused operation)?

17. Дайте определение скалярного произведения.

18. Что такое линейная алгебра?

19. Опишите метод исключения Гаусса.

20. Что такое опорный элемент (в линейной алгебре и реальной жизни)?

21. Что делает число случайным?

22. Что такое равномерное распределение?

23. Где найти стандартные математические функции? Для каких типов аргументов они определены?

24. Что такое мнимая часть комплексного числа?

25. Чему равен корень квадратный из –1?

Термины

Программирование. Принципы и практика использования C++ Исправленное издание - _302.png

Упражнения

1. Аргументы функции

f
в выражениях
a.apply(f)
и
apply(f,a)
являются разными. Напишите функцию
triple()
для каждого варианта и примените их для удвоения элементов массива
{ 1 2 3 4 5 }
. Определите отдельную функцию
triple()
, которую можно было бы использовать как в выражении
a.apply(triple)
, так и в выражении
apply(triple,a)
. Объясните, почему нецелесообразно писать все функции именно так для использования в качестве аргумента функции
apply()
.

2. Повторите упр. 1, используя не функции, а объекты-функции. Подсказка: примеры можно найти в заголовке

Matrix.h
.

3. Только для экспертов (средствами, описанными в книге эту задачу решить невозможно). Напишите функцию

apply(f,a)
, принимающую в качестве аргумента функции
void (T&)
,
T (const T&)
, а также эквивалентные им объекты-функции. Подсказка:
Boost::bind
.

343
{"b":"847443","o":1}