Раздел: Документация
0 ... 118 119 120 121 122 123 124 ... 365 Рис. 7.1. Семейство кривых Напишите файл-программу для вычисления суммы 10 1 Алгоритм вычисления суммы использует накопление результата, т. е. сначала сумма равна нулю, затем в переменную k заносится единица, вычисляется l/kl (т. е. 1/1!), добавляется к S и результат снова заносится в S. Далее к увеличивается на единицу, и процесс продолжается, пока последним слагаемым не станет 1/10!. Файл-программа FORdem2, приведенная в листинге 7.2, вычисляет искомую сумму. Примечание Если шаг цикла равен 1, то его можно не указывать. Листинг 7.2. Файл-программа FORdem2 для вычисления суммы -.......-......................................................—................................................................. —...... % ФАЙЛ-ПРОГРАММА ДЛЯ ВЫЧИСЛЕНИЯ СУММЫ % 1/1! + 1/2! + ... + 1/10! % обнуление S для накопления суммы % накопление суммы в цикле с шагом 1 for к = 1:10 S = S + 1/factorial(к); end % вывод результата в командное окно S Наберите файл-программу в редакторе М-файлов, сохраните в текущем каталоге в файле FORdem2.m и выполните се. Результат отображается в командном окне. т. к. в последней строке файл-программы содержится s без точки с запятой для отображения значения переменной s в командное окно s = 1.7183 Обратите внимание, что остальные строки файл-программы, которые могли бы повлечь вывод промежуточных значений, завершаются точкой с запятой для подавления вывода в командное окно. Первые две строки с комментариями не случайно отделены пустой строкой от остального текста программы. Именно они выводятся на экран, когда пользователь при помощи команды help из командной строки получает информацию о назначении файл-программы FORdem2 » help FORdem2 ФАЙЛ-ПРОГРАММА ДЛЯ ВЫЧИСЛЕНИЯ СУММЫ 1/1! + 1/2! + ... + 1/10! При написании файл-программ и файл-функций не пренебрегайте комментариями, особенно если вы планируете продолжить работу с ними! Важно понять, что все переменные, использующиеся в файл-программе, становятся доступными в рабочей среде (см. окно Workspace). Они являются так называемыми глобальными переменными. Например, для получения значения к после выполнения FORdem2 следует просто набрать к в командной строке и нажать <Enler>. Результат очевиден, т. к. последний раз цикл for выполнялся как раз для к, равного десяти. С другой стороны, в файл-программе могут использоваться все переменные, введенные в рабочей среде, т. е. переменные всех файл-программ и рабочей среды являются общими. Это может послужить источником ошибок, поскольку файл-программа изменяет содержимое одноименных переменных рабочей среды, которые могли быть инициализированы из командной строки или в другой файл-программе. Поставим задачу вычислить сумму, похожую на предыдущую, но зависящую еще от переменной х: Для вычисления данной суммы в файл-программе FORdem2, приведенной в листинге 7.2, требуется изменить строку внутри цикла for на S = S + х."к/factorial(к); Перед запуском программы следует определить переменную х в командной строке. Вычисление, например, 5(1.5), производится из командной строки при помощи следующих команд: » х = 1.5; » FORdem2 S = 3.4817 В качестве х может быть вектор или матрица, поскольку в файл-программе FORdem2 при накоплении суммы использованы поэлементные операции. Перед запуском F0Rdem2 нужно обязательно присвоить переменной х некоторое значение, а для вычисления суммы, например из пятнадцати слагаемых, придется внести изменения в текст файл-программы. Гораздо лучше написать универсальную файл-функцию, у которой в качестве входных аргументов будут значение х и верхний предел суммы, а выходным — значение суммы S(jc). Использование конструкций языка программирования, в частности, циклов, в файл-функциях производится так же, как и в файл-программах. Создавая файл-функцию, внесите некоторое усовершенствование в алгоритм. При вычислении к-го слагаемого ak -xk jk\ требуется возвести х в степень к и вычислить факториал к . Для небольшого числа слагаемых эти действия выполняются практически мгновенно, но при увеличении числа слагаемых и большом наборе значений х время счета может оказаться весьма большим. В нашем примере несложно заметить связь между двумя соседними слагаемыми. Предположим, что уже вычислено а5 =х5/5\, тогда очевидно, что а$ =а4 -х/6, а для произвольного к справедливо рекуррентное соотношение: ак =a/t 1 xfk , связывающее текущее и предыдущее слагаемые, в котором формально Oq = 1. Достаточно часто такой подход позволяет эффективно вычислять суммы, возникающие в практических 0 ... 118 119 120 121 122 123 124 ... 365
|