Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
krav.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3.45 Mб
Скачать

8.7. Сравнение методов

Мы рассмотрели два основных метода решения систем линейных алгебраических уравнений — метод исключения и итерационный метод Гаусса — Зейделя. Естественно, возникает вопрос, какой из этих методов предпочтительнее. Метод исключения имеет то преимущество, что он ко­нечен и теоретически с его помощью можно решить любую невырожденную систему уравнений. Итерационный метод Гаусса — Зейделя сходится только для специальных си­стем уравнений. Для некоторых систем метод исключения является единственно возможным^).

^ В действительности для любой невырожденной системы урав­нений существуют итерационные методы решения, но обычно они неудобны для практических вычислений. См., например, книгу Milne W. Е., Numerical solution of differential equations, Wiley, 1953.

Однако, когда итерационные методы сходятся, они обыч­но предпочтительнее.

1. Время вычислений пропорционально n^2 на итера­цию, в то время как для метода исключения время вычис­лений пропорционально n^3 если для решения системы требуется менее n итераций, то общие затраты машинного времени будут меньше.

2. Как правило, ошибки округления при итерационном методе меньше; иногда это соображение может оказаться достаточно важным и оправдывает дополнительные затраты машинного времени.

Многие системы уравнений, возникающие на практике, имеют среди коэффициентов большой процент нулей. В этих случаях итерационные методы — если они сходятся — в высшей степени предпочтительны, так как при использо­вании метода исключения получается треугольная система уравнений, которая обычно уже не имеет нулей в качестве коэффициентов^). При решении системы уравнений на ЭЦВМ система с большим количеством нулей предпочти­тельна потому, что можно проверять коэффициенты и не производить умножения, если они равны нулю. Уравнения, получаемые при решении уравнений в частных производ­ных, относятся именно к этому классу.

Наконец, некоторые системы уравнений настолько ве­лики, что их не только нельзя точно решить методом исклю­чения, но даже нельзя поместить целиком в оперативную память ЭЦВМ.

Если коэффициенты этих уравнений вы­числяются самой ЭЦВМ с помощью некоторой программы, то такое затруднение можно обойти при использовании итерационного метода, вычисляя коэффициенты каждого уравнения тогда, когда в них возникает необходимость. Системы, возникающие при решении уравнений в частных производных, опять-таки относятся к этому классу.

8.8. Практический пример 10: проведение кривой методом наименьших квадратов

Очень часто возникает необходимость выразить в виде функциональной зависимости связь между величинами, которые заданы в виде набора точек с координатами (х, y).

^) В некоторых случаях в треугольной системе после исключе­ния все же остаются нулевые коэффициенты .

Предположим, например, что в результате некоторого эксперимента получены точки, отложенные на графике рис. 8.1. Если необходимо использовать эти данные для вычисления на ЭЦВМ, то сразу появляются следующие проблемы:

1. В значениях y наверняка имеются погрешности эксперимента. Было бы желательно каким-либо образом «сгладить» те отклонения, которые обусловлены ошибками эксперимента.

2. Может оказаться желательным знать значения y, соответствующие промежуточным значениям x.

3.Может оказаться, что необходимо экстраполировать функциональную зависимость, т. е. найти значение y,

,

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

Рис. 8.13. Пример экспериментальных результатов, для которых ищется приближенная функциональная зависимость (практический пример 10).

соответствующее значению x, лежащему вне области экс­перимента (иногда это является главной целью экспери­мента и вычислений). В особенности это относится к эконо­мической информации.

Все эти соображения приводят нас к выводу, что же­лательно было бы установить некоторую функциональную зависимость между x и y в виде по возможности простой формулы. Вопрос состоит в том, как найти кривую, которая приближенно соответствует исходной информации с достаточной точностью. Таким образом, нужно выработать критерий, согласно которому та или иная кривая является достаточно «хорошим» приближением к исходной информа­ции.

Рассуждение станет проще, если мы введем новое поня­тие. Назовем отклонением экспериментальной точки раз­ность между экспериментальной ординатой у и той, кото­рая вычислена из функциональной зависимости. Вопрос о том, является ли кривая достаточно «хорошим» прибли­жением к экспериментальным данным, можно поставить в следующем виде: какое условие необходимо наложить на отклонение точек от кривой, чтобы эта кривая представляла экспериментальные данные с достаточной точностью?

Казалось бы, что наиболее простое и логичное условие состоит в том, чтобы сумма отклонений точек от кривой была наименьшей. Если обозначить через y' значение y, вычис­ленное из функциональной зависимости, то это условие можно записать так: требуется, чтобы

N

  • (yi - y’i)

i=1

было минимальным, причем в этом выражении N означает количество точек исходной информации. Но привлекатель­ность этого простого критерия сразу становится сомни­тельной, стоит только рассмотреть простую задачу о про­ведении линии через две точки, как это показано на рис. 8.14. Мы видим, что пунктирная линия удовлетворяет нашему критерию, но прямую линию, изображенную на этом рисунке, никак нельзя признать удовлетворитель­ным приближением к экспериментальным данным. Можно попытаться обойти это затруднение, используя в критерии сумму абсолютных значений отклонений, т. е. требуя, чтобы

N

  • I yi - y’i I

i=1

стало минимальным. Но в этом случае для нахождения минимума нельзя воспользоваться производной, так как абсолютное значение не имеет производной в точке ми­нимума. Можно было бы наложить условие, согласно ко- торому максимальное отклонение должно стать наименьшим (приближение Чебышева), но для определения функцио­нальной зависимости на основе этого критерия приходится использовать длинную и сложную итерационную процедуру.

Поэтому в данном случае мы воспользуемся критерием наименьших квадратов, т. е. будем искать такую функ­циональную зависимость, при которой

N

 (yi - y’i)^2

i=1

обращается в минимум. Это выражение, как мы увидим ниже, можно продифференцировать для нахождения мини-

Р и с. 8.14. Пример, показывающий, что сумма отклонений не может служить критерием для подбора функциональной зависимости (практический пример 10).

мума. Такой критерий во многих практических случаях приводит к линейным уравнениям, которые легко решить, по крайней мере в принципе.

Наконец, можно статистически обосновать, что крите­рий наименьших квадратов дает достаточно хорошее приб­лижение функциональной зависимости к эксперименталь­ным данным, даже если отвлечься от вопроса о практике вычислений.

Рассмотрим теперь вопрос о том, как при использо­вании критерия наименьших квадратов получается си­стема уравнений для определения функциональной зави­симости y от x. Сначала мы произведем вычисления для очень простой зависимости, а именно квадратичной, а затем рассмотрим, что получается, если выбирать другие типы функций ^). Напишем

y’1 = v1 +v2xi + v3xi^2 .

Наша задача состоит в том, чтобы определить значе­ния v1, v2 и v3, при которых сумма

N N

S =  (yi - y’i)^2=  (yi - v1 - v2xi - v3xi^2)^2

i=1 i=1

становится минимальной.

Известно, что в минимуме функции ее производная равна нулю. Рассматривая S как функцию v1, мы приравниваем

^ Предполагается, естественно, что вид функциональной зави­симости задан заранее. С помощью метода наименьших квадратов невозможно установить, например, что экспонента была бы хорошим приближением, если не попытаться фактически ее испробовать. Короче говоря, при использовании этого метода можно находить наилучшее приближение заданного типа', вообще никакой метод не способен определить тип функциональной зависимости, который лучше всего подошел бы к данному набору экспериментальных точек.

нулю частную производную от S по v1. При этом полу­чается

dS/dv1=(-2) (yi - v1 - v2xi - v3xi^2).

Приравнивая нулю и преобразовывая, получаем

Nv1+ ( xi )v2 + (xi^2)v3 =  yi .

Аналогичным образом, дифференцируя S по v2 и по vз и приравнивая нулю соответствующие выражения, полу­чаем еще два уравнения для определения неизвестных v1, v2 и v3. Эти уравнения называются нормальными урав­нениями для выбора наилучшего приближения к экспе­риментальным точкам в виде квадратичной параболы (под­черкиваем еще раз, что вид функциональной зависимости задан заранее)

Nv1 + ( xi )v2 + (xi^2)v3 =  yi ,

( xi )v1 + ( xi^2 )v2 + (xi^3)v3 =  (xiyi) ,

( xi ^2)v1 + ( xi^3 )v2 + (xi^4)v3 =  (xi^2yi) .

Теперь для определения коэффициентов v1, v2 и vз доста­точно вычислить суммы и решить систему из трех урав­нений.

Тот же метод можно использовать при выводе нормаль­ных уравнений для многочлена любой степени, к которым желательно приблизить экспериментальную зависимость. (В дальнейшем, однако, мы увидим, что использование мно­гочленов очень больших степеней невозможно из-за оши­бок округления.)

Нормальные уравнения для нахождения коэффициентов многочлена степени M можно написать в следующем виде:

Nv1 + xiv2 + ... + xi^mvm+1 =  yi ,

xiv1 + xi^2v2 + ... +xi^m+1vm+1 =  (xiyi) ,

.........................................................................................

xi^mv1 + xi^m+1v2 + ... +xi^2mvm+1 =  (xi^myi) .

Для многочлена степени M получается система из M + 1 уравнений относительно M + 1 коэффициентов. Количе­ство сумм, которое необходимо вычислить, равно 3M + 1.

Напомним, что индексы в ФОРТРАНе должны быть положительными. В приведенной ниже программе коэф­фициенты vi образуют одномерный массив и поэтому ну­меруются во всех формулах с 1.

Перед тем, как переходить к рассмотрению программы по вычислению требуемых сумм и решению нормальных урав­нений, отметим, что метод наименьших квадратов можно применить и к другим функциональным зависимостям, а не только к многочленам. Предположим, например, что мы ищем зависимость в виде показательной функции

y = ax^c .

Непосредственное использование метода наименьших квадратов приведет к нелинейным нормальным уравнениям, но это затруднение можно обойти, используя вместо экспе­риментальных значений их логарифмы

logy = loga + c1ogx.

Теперь мы стараемся сделать минимальной сумму квад­ратов разностей между логарифмами экспериментальных значений yi и логарифмами ординат функции y = ах^c . При этом получаем

S = (log yi - log a - c1og x)^2.

Дифференцируя по a и по 6, придем к системе нор­мальных уравнений

N log a +  (log хi)c =  log yi,

 (log хi) log a +  (log xi^2)c =  (log xi log yi).

Неизвестными в этой системе являются log а и Ь. После их определения а находится по величине логарифма.

В принципе метод наименьших квадратов можно приме­нить для любой функциональной зависимости, хотя нор­мальные уравнения часто получаются нелинейными. Не­которые типы функциональных зависимостей рассмотрены в упражнениях.

Вернемся теперь к обобщенной программе для нахождения полиномиальных приближений к экспериментальным данным методом наименьших квадратов. С помощью этой программы можно будет работать с многочленами любой степени до 10-й включительно, причем необходимую степень можно будет прочитать с перфокарты. В программе будет предусмотрен ввод экспериментальных данных, вычисление необходимых сумм, решение нормальных уравнений и печать результатов.

Программа, с помощью которой можно произвести эти вычисления, приведена на фиг. 8.15. Чтобы легче было проследить работу программы, мы приведем список основ­ных переменных и их значений в программе:

NUMBER -- количество экспериментальных точек, не более 200,

М -- степень полинома, не выше 10,

N -- количество уравнений (= M + 1),

X,Y -- массивы экспериментальных координат,

A -- массив сумм, которые впоследствии ста­новятся коэффициентами нормальных уравнений,

B -- массив постоянных членов нормальных уравнений,

С -- массив неизвестных, которые впоследст­вии становятся коэффициентами много­члена,

Р -- массив степеней xi от 1 до 2M .

Два оператора DIMENSION использованы в программе только из-за недостаточной ширины страниц в этой книге. Чтение исходной информации производится с помощью оператора DO, так что по окончании процесса ввода ин­декс DO определяет количество пар введенных значений. Окончание процесса ввода определяется по пробной пер­фокарте, на которой пробито значение Х = 0. (Если Х = 0 может встретиться в экспериментальных данных, то необходимо использовать какую-либо иную пробную пер­фокарту, и это изменение нетрудно ввести в программу.) Нормальный выход из цикла DO может произойти только тогда, когда количество точек исходной информации боль­ше 200; если же оно меньше или равно 200, то управление с помощью оператора IF передается оператору 12. После выхода из цикла значение индекса 1 будет на 1 больше, нежели количество экспериментальных точек, так как пробная карта тоже была сосчитана.

Несколько операторов, стоящих в конце первой стра­ницы программы, позволяют вычислить степени xi и поместить их в массив Р. Эти величины используются сразу же при выводе нормальных уравнений.

При внимательном рассмотрении системы нормальных уравнений нетрудно заметить следующее: за исключением элемента, стоящего на пересечении первой строки и первого столбца степень x для всех остальных элементов равна сумме номера строки и номера столбца минус 2. Этот факт используется на второй странице программы для определения коэффициентов при неизвестных в нормаль­ных уравнениях. Вслед за коэффициентами вычисляются постоянные члены. В(1) необходимо вычислить отдельно, потому что в общем случае неизвестно, каков будет резуль­тат возведения числа в нулевую степень в программе на ФОРТРАНе.

Конечно, нельзя утверждать, что все вычисления про­изведены наиболее эффективным образом. В действитель­ности все эти операции можно было бы проделать гораздо быстрее, хотя при этом пришлось бы использовать боль­ший объем памяти. В данном случае мы сочли такое услож­нение неоправданным, так как основной интерес пред­ставляет не скорость работы программы, а сам способ наименьших квадратов.

Третья страница программы содержит операторы, с по­мощью которых решаются нормальные уравнения. Реше­ние производится по методу исключения, и на третьей стра­нице помещены операторы, производящие поиск наиболь­шего коэффициента и перестановку уравнений. Программа довольно точно соответствует блок-схеме, изображенной на фиг. 8.8, с одним исключением. Последний оператор, присваивающий I значение К + 1, не присутствует в явном виде, так как значение, равное К+1, присваивается пе­ременной I в начале следующей страницы с помощью опе­ратора DO.

На последней странице программы приведены операто­ры, завершающие процесс исключения переменных и вы­числяющие значения неизвестных путем обратной подста­новки. Процесс исключения начинается с оператора 500 и кончается оператором 300. Нужно помнить, что опера­тор 300 заканчивает область действия двух операторов DO: оператора DO в начале третьей страницы (с индексом К) и оператора 500 (с индексом I).

Первый из этих операторов необходим для перебора всех уравнений с 1-го по (N - 1)-е; второй —для исклю­чения К-го неизвестного из уравнений, начиная с (К + 1)-го и кончая N-ì.

Обратная подстановка начинается после оператора 300. Программа весьма точно соответствует блок-схеме рис. 8.6 с некоторыми очевидными изменениями, которые позволя­ют сделать ее более компактной.

Для проверки программы воспользуемся следующим приемом: зададим в качестве исходной информации несколь­ко точек параболы с известными коэффициентами и по­смотрим, получатся ли в результате вычислений те же коэффициенты. Возьмем в качестве исходного уравнения

y = 2+ 4х + x^2

и вычислим координаты нескольких точек на этой кривой

X Y

1 7

2 14

3 23

4 34

5 47

Примем в программе М = 2, и поскольку задано пять пар значений x и y, то в результате вычислений мы должны получить v1 = 2, v2= 4 и v3 = 1. Вычисленные значения довольно точно совпадают с исходными

v1 = 1.9999947

v2 = 4.0000044

v3 = 0.9999993

Интересно, что получится, если попытаться провести через эти же точки кубическую параболу; первые три, коэффициента должны остаться неизменными, а четвертый должен равняться нулю. В действительности получается

v1 = 2.0001345

v2 = 3.9998111

v3 = 1.0000721

v4 = - 0.0000080

Вариация результатов оказалась немного больше того, что можно было ожидать. Попробуем сделать вычисления для многочлена четвертой степени

v1 = 1.9959750

v2 = 4.0075371

v3 = 0.9954456

v4 = 0.0010951

v5 = - 0.0000907

Этот результат не внушает уже никакого доверия. Ведь задача состоит в том, чтобы провести многочлен чет­вертого порядка через пять точек, а теоретически пять точек точно определяют его коэффициенты.

Попытаемся теперь провести многочлен пятого порядка через эти же точки. Здесь мы вообще не должны были бы получить никакого решения, так как для точного опреде­ления многочлена пятого порядка нужны шесть точек. Через пять точек можно провести бесконечно много мно­гочленов пятого порядка; следует ожидать, что если мы попытаемся произвести такого рода вычисления с помощью нашей программы, то получится система нормальных урав­нений с бесконечным множеством решений.

При решении такой системы уравнений методом исклю­чения должна появиться строка из одних нулей, а при обратной подстановке попытка деления на нуль должна остановить работу ЭЦВМ. (В упражнении 36 эта ситуация демонстрируется для случая, когда квадратичная пара­бола проводится через две произвольные точки.) Все же попробуем сделать вычисления для многочлена пятой сте­пени

v1 = 2.0754113

v2 = 3.8280203

v3 = 1.1410277

v4 = - 0.0532048

v5 = 0.0093776

v6 = - 0.0006245

В данном случае ошибки округления привели к тому , что все вычисления были произведены, хотя теоретически должно было бы получиться переполнение разрядной ceтки ЭЦВМ (при делении на нуль) и остановка вычислений ! Возникают серьезные сомнения в том, что такой способ нахождения коэффициентов многочлена способен давать точные результаты. Чтобы убедиться, насколько ошибочным может быть результат, рассмотрим еще один пример. Возьмем уравнение

y = 40 + 10x + 5x^2 + 3x^3 + 2x^4 + x^5 + x^6

и вычислим значения y для x = 1, 2, 3, ...,50. После этого попробуем для этих 50 пар значений найти уравнение многочлена 6-го порядка с помощью нашей программы. Первый коэффициент был напечатан в виде 1018375. 289062; в действительности он мог бы оказаться еще больше ( так как некоторые цифры с левой стороны могли оказаться отброшенными (вспомним, что спецификация поля в операторе FORMAT была написана в виде F15.7). Совершенно ясно, что этот, да и все другие коэффициенты вычисленные машиной, не имеют никакого смысла.

Что-то в нашей программе совершенно разладилось. Может быть, неприятности связаны с суммированием? Или с решением системы нормальных уравнений? Или порочен сам метод наименьших квадратов? Попытаемся произвести некоторые контрольные вычисления, чтобы определить источник Затруднений.

Возьмем то же самое уравнение, но вычислим у дли значений x = 1.0, 1.1, 1.2, ..., 5.0. Так же, как и в пре­дыдущем случае, будем находить для этих 50 пар значений коэффициенты многочлена 6-го порядка. На этот раз получаем следующие результаты:

v1 = 41.3747716

v2 = 1.4650151

v3 = 19.4771159

v4 = - 7.3396831

v5 = 5.5579804

v6 = 0.4154199

v7 = 1.0368103

Эти значения явно не внушают большого доверия, но по крайней мере порядки величин правильные. По-видимо­му, одной из причин затруднений в предыдущем примере были сильно отличающиеся друг от друга порядки чисел, стоящих в качестве коэффициентов в нормальных уравне­ниях. В самом деле, значение a11 равно 50, а значение a77 порядка 10^21. При столь различных числах неизбежны трудности того же рода, как возникавшие в свое время при вычислении синуса из ряда Тейлора .

Ошибки возникают как при подсчете сумм, так и при решении системы уравнений методом исключения. Напри­мер, при возведении 49 в двенадцатую степень некоторые цифры в правой части числа неизбежно теряются, причем безвозвратно; они не восстанавливаются при исключении неизвестных, в результате которого из этих больших зна­чений должны были бы появиться меньшие числа. Впро­чем, даже если бы сумму и удалось вычислить точно, все равно ошибки округления при решении системы методом исключения не позволили бы получить точный результат.

Можно убедиться в том, что все неприятности происхо­дят только от ошибок округления, производя вычисления с удвоенной точностью. При этом каждое число занимает две ячейки памяти и имеет примерно 16 десятичных зна­чащих цифр. Произведя вычисление для исходного набора значений x = 1, 2, 3, ... ,50, получаем следующий ре­зультат:

v1 = 39.9945393

v2 = 10.0036631

v3 = 4.9993401

v4 = 3.0000494

v5 = 1.9999982

v6 = 1.0000000

v7 = 1.0000000

Эти коэффициенты уже достаточно близки к исходным. Обратите внимание, насколько сильно искажают ре­зультат ошибки округления и какие крайние меры прихо­дится принимать для обеспечения хотя бы невысокой точ­ности: ведь в данном случае довольно простая теория предсказывает некоторые вполне точные значения, а вместе с тем для получения четырех достоверных цифр в ответе приходится производить вычисления с 16 значащими циф­рами.

Читателям, желающим познакомиться более основа­тельно с причинами неприятностей, можно порекомендовать превосходную книгу Ардена^).

Радикальным решением проблемы является использо­вание ортогональных полиномов. Например, в упражнении 3 гл. 3 было показано, что полиномы Чебышева орто­гональны на интервале -1 <= х <= 1 с некоторой весовой функцией. Если использовать Tn(x) для построения си­стемы нормальных уравнений, то недиагональные коэф­фициенты будут, вообще говоря, малы по сравнению с диа­гональными. Это обстоятельство позволяет получить более точные решения, иногда даже с помощью итерационного метода Гаусса — Зейделя.

В идеальном случае, конечно, недиагональные коэф­фициенты должны были бы вообще обратиться в нуль, и тогда решение стало бы тривиальным. Интересующиеся читатели могут найти некоторые сведения по этому вопросу в статье Форсайта^).

Примеры были подобраны с таким расчетом, чтобы об­ратить внимание читателей на печальные последствия, которыми грозит легкомысленное отношение к ошибкам ок­ругления. Однако мы не желали бы создать впечатление, что метод наименьших квадратов невозможно использовать из-за этих

трудностей. Поэтому в заключение главы при­ведем простой пример практического использования этого метода.

В книге Уортинга и Геффнера приведена таблица экспериментальных данных по зависимости теплоемкости воды от температуры, причем теплоемкость при 15°С при­нята за единицу.

T, °C

Cp

T, °Ñ

Cp

0

1.00762

55

0.99919

5

1.00392

60

0.99967

10

1.00153

65

1.00024

15

1.00000

70

1.00091

20

0.99907

75

1.00167

25

0.99852

80

1.00253

30

0.99826

85

1.00351

35

0.99818

90

1.00461

40

0.99828

95

1.00586

45

0.99849

100

1.00721

50

0.99878

Построив точки на графике, видим, что они довольно близки к квадратичной параболе и что, по-видимому,

Рис. 8.16. Экспериментальные значения теплоемкости воды (кружки) и многочлен третьего порядка, проведенный по методу наименьших квадратов (практический пример 10).

кубическая парабола будет вполне хорошим приближением. Использовав нашу программу для нахождения коэффициентов этой кубической параболы, получим

Cp = 1.006447 - 0.0004987884T + 0.000008459123T^2 - 0.0000000345331T^3

Ошибки округления в данном случае не доставляют никаких неприятностей. В этом можно убедиться, : делав вычисления с удвоенной точностью: коэффициенты изменяются очень ненамного, а сумма квадратов отклонений остается той же, что и при вычислениях с обычной точностью.

На рис. 8.16 изображены экспериментальные точки: кривая, вычисленная по методу наименьших квадратов . Мы видим, что отклонения положительного и отрицательного знака более или менее уравновешены, как и следовало ожидать. Сравнение вычисленной кривой с экспериментальными значениями показывает, что наибольшее отклонение имеет место при 0° С и равно 0.0012, все остальные отклонения существенно меньше.

Если ошибки такого порядка допустимы, то можно пользовать эту кубическую формулу при расчетах, требуется зависимость теплоемкости воды от температуры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]