Задачи

 

версия для печати

1.8. Программирование: логика, циклы, процедуры

Задача 8.5. Расчет ряда Фурье

Напишите цикл для расчета ряда Фурье

.

Вне цикла задайте значение θ и продолжайте цикл до тех пор, пока величина добавляемых членов не уменьшится до величины 1 · 10–4. Поскольку синус никогда не может быть больше 1, это означает, что надо применить проверку while только к (полностью проверять член с синусом – плохая идея, поскольку сам синус может случайно оказаться достаточно маленьким и цикл прервется раньше, чем надо).

Задача 8.6. Напишите цикл для решения уравнения

Напишите цикл для решения уравнения x путем последовательной подстановки. Ответ должен быть точен до восьми значащих цифр. Как построить цикл с последовательной подстановкой – см. выше.

Задача 8.10. Процедура для расчета ряда Фурье

Процедуру можно использовать для выполнения заданий, в которых изменяется какой-то параметр однотипной задачи. Напишите процедуру, входными параметрами которой являются Nterms и угол θ, а возвращаемой величиной – значение ряда Фурье f(θ), заданного в задаче 8.5. Используйте команду Maple sum внутри процедуры и сохраняйте количество членов разложения n = Nterms. Затем сделайте три графика f(θ) в зависимости от θ при Nterms = 10, Nterms = 100, Nterms = 400. Это покажет, как улучшается представление Фурье при увеличении числа членов ряда. Поскольку в процедуре больше одной входной переменной, придется использовать команду plot(f(Nterms,theta),theta=0..Pi).

Задача 8.12. Процедура для расчета присоединенной функции Лежандра

Напишите процедуру, которая изменяет присоединенную функцию Лежандра Pnm(x) в задаче 3.4 на реальную функцию, которая возвращает число при любом надлежащем выборе n и m, выключая m = 0. Это означает, что надо решить задачу о «дифференцировании нулевое число раз», обсуждавшуюся в главе 3, в теме о присоединенных функциях Лежандра. Проверяйте процедуру столько раз, сколько нужно, чтобы убедиться, что она правильно работает.

(a) Вначале напишите процедуру так, чтобы она возвращала выражение от x, затем

(b) измените ее так, чтобы она возвращала число с плавающей точкой.

Задача 8.14. Процедура для решения неявного уравнения

(a) Напишите процедуру, возвращающую функцию t(x), определенную как решение неявного уравнения .

Для получения решения в процедуре используйте команду Maple fsolve, а после построения процедуры plot t(x) примените ее для диапазона x = 0..10.

(b) Сделайте то же, что в части (a), но без использования процедуры.

Для того чтобы определить t(x), примените представление в виде функции, т. е. t:=x->fsolve(...). Эквивалентны ли эти два способа решения?

(c) Напишите функцию или процедуру, которая даст вам производную неявно определенной функции, т. е. получите Maple'овскую функцию или процедуру для .

Предупреждение: не берите просто производную по x от уравнения, рассматривая t как константу. В действительности t есть t(x) в обеих частях уравнения. Поэтому перепишите уравнение по t, заменив его на t(x), а затем вызовите diff для дифференцирования всего уравнения по x. Затем дайте Maple решить для и вычислите конечное выражение, изменив процедуру для t(x).

Обнаружится, что процедура для идентична той, что была для t(x), за исключением одной последней строки.

После построения процедуры примените ее для построения графика в диапазоне 0..10 и проверьте, что все это выглядит как производная функции, которую вы построили в части (a).

Затем проверьте ее дополнительно с помощью приближения центральных разностей для производной (вспомните численные методы!) при x = 2 и сравните этот результат с полученным в этом пункте задания.