Программирование и основы алгоритмизации: Задания на...

10
Министерство образования РФ СЕВЕРО-ЗАПАДНЫЙ ЗАОЧНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра процессов управления и информационных систем ПОДЛЕЖИТ ВОЗВРАТУ В БИБЛИОТЕКУ Программирование и основы алгоритмизации Задания на курсовую работу Методические указания к выполнению курсовой работы Ф а к у л ь т е т информатики и систем управления Специальность 210100 «Управление и информатика в технических системах» Санкт-Петербург 2001

Transcript of Программирование и основы алгоритмизации: Задания на...

Page 1: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

Министерство образования РФ

СЕВЕРО-ЗАПАДНЫЙ ЗАОЧНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра процессов управления и информационных систем

ПОДЛЕЖИТ ВОЗВРАТУ В БИБЛИОТЕКУ

Программирование и основы алгоритмизации

Задания на курсовую работу Методические указания к выполнению курсовой работы

Ф а к у л ь т е т информатики и систем управления

Специальность 210100 «Управление и информатика в технических системах»

Санкт-Петербург 2001

Page 2: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

2

К У Р С О В А Я Р А Б О Т А В процессе изучения курса студенты должны выполнить курсовую работу, задание на которую составлено в 10 вариантах. Свой вари- ант студент выбирает по последней цифре шифра. З А Д А Н И Е В таблице 1 приведены варианты градуировочной таблицы термо- пар ,снятые в условиях помех. В ней приняты следующие обозначения: Y - измеряемая величина, X - выход термопары, Emax - максимально-допустимая ошибка аппроксимации. В соответствии с вариантом задания необходимо: 1. Составить алгоритм аппроксимации табличной функции степенным регрессионным полиномом M-ного порядка,используя метод наименьших квадратов. 2. На базе заданных функций перемножения и обращения мат- риц(umat() и omat()) разработать программу, реализующую предложенный алгоритм на языке C++. 3. С помощью программы определить порядок и коэффициенты рег- рессионного полинома, аппроксимирующего градуировочную таблицу 1 с заданной степенью точности. 4. Используя алгоритм схемы Горнера, разработать программу вы- числения полученного степенного полинома. 5. Пояснительную записку к курсовой работе оформить с помощью текстового редактора типа "Word".

Page 3: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

3 МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ Задание на курсовую работу связано с аналитической градуи- ровкой датчиков, сопряженных с управляющей вычислительной машиной (УВМ). Функциональная зависимость между измеряемой величиной Y и выходным сигналом датчика X в общем случае определяется зависимостью: X = F(Y). Для задач контроля и управления необходимо знать истинное значение измеряемой величины Y. При известном значении X, Y может быть найден как: Y =(F)-1(X)=f(X) Если датчик имеет линейную характеристику X = a y + b, то определить y легко: X - b Y = ─────── a В случае же нелинейной зависимости функция f(X) может быть выражена (аппроксимирована) нелинейными функциями или задаваться в табличном виде. При табличном способе, значения измеряемой величины задаются с постоянным шагом ∆Y, называемым шагом таблицы: ∆Y =Y2-Y1 = Y3-Y2 =……= Yn - Yn-1. ┌────┬───────┬──────┬─────┬─────┬─────┬─────┐ │ X │ X1 │ X2 │.... │ Xi │ ... │ Xn │ ├────┼───────┼──────┼─────┼─────┼─────┼─────┤ │ Y │ Y1 │ Y2 │.... │ Yi │ ... │ Yn │ └────┴───────┴──────┴─────┴─────┴─────┴─────┘ Пусть Xu - очередное измерение, причем Xi 0 < Xu < Xi+1 , тогда: Xu - Xi Y =Yi +∆Y ────────────── . Xi+1 - Xi Недостатком табличной записи является необходимость занесе-

Page 4: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

4ния всей таблицы в память ЭВМ и существенная зависимость точности вычислений от шага таблицы ∆Y. Одним из наиболее рациональных ме- тодов определения Y является аппроксимация функции f(X) степенны- ми полиномами, причем в условиях помех для этих целей используют- ся регрессионные полиномы. Полином P(X) задается в виде: P(X) = a0 +a1 X + a2 X2 +…….+ am Xm (1) где a0 , a1 ,..., am - неизвестные коэффициенты, X - выходной сигнал датчика, m - показатель степени. Для i-го эксперимента равенство (1) запишется в виде: P(X ) = a0 + a1 Xi + a2 Xi2 + ... + am Xim , (2) а для N- экспериментов, получим систему уравнений типа (2), которую целесообразно представить в векторной форме: P(X1) 1 X1 X12 .... X1m a0 P(X2) 1 X2 X22 .... X2m a1 . . ............................ . . = (3) P(Xi) 1 Xi Xi2 .... Xim aj . . ............................ . . P(XN) 1 XN XN2 .... XNm am i = 1,2,3,...,N, j = 1,2,...., m + 1 или в более компактном виде : P = X A (4) Для выражений типа (4) нахождение вектора неизвестных коэф- фициентов А основано на принципе наименьших квадратов, который сводится к выбору вектора А из условия минимума суммы квадрантов ошибок , характеризующих расхождение между экспериментальными точками и аппроксимирующим полиномом, т.е. min { E2 = (Y - X A)2 } (5) Для получения минимума необходимо взять частную производную

Page 5: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

5от выражения (5) по вектору А и приравнять ее нулю: dE ──── = - 2 XT Y+2 XT X A = 0, (6) dA откуда: XT X A = XT Y . (7) Для определения вектора А необходимо обе части выражения (7)умножить на обратную матрицу (XT X)-1 . В результате , получим: A = ( XT X )-1 XTY. (8) Выражение (8) определяет алгоритм вычисления коэффициентов степенного регрессионного полинома, который обеспечивает минимальное значение среднеквадратичной ошибки аппроксимации функции, заданной дискретными значениями переменных X и Y в таблице 1. Рассмотрим работу этого алгоритма на простейшем примере. Пусть дискретные значения переменных X и Y определяются зна чениями: Y │ X ─────┼────── 0 │ 0,5 │ 0,5 │ 2,5 │ 1 │ 6 Аппроксимируем заданную табличную функцию простейшим поли- номом вида: P(X) = a0 + a1X и выделим основные этапы расчета: 1. В соответствии с выражением (2) формируем матрицу X , размерности 3 х 2: │ 1 0,5 │ X = │ 1 2,5 │ │ 1 6 │. 2. Получаем транспонированную матрицу:

Page 6: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

6 1 1 1 XT = 0,5 2,5 6,0 . 3. Вычисляем произведения XTX и XTY : 1 1 1 1 0,5 3 9 XTX = * 1 2,5 = 0,5 2,5 6 1 6 9 42,25 1 1 1 0 1 ,5 XTY = * 0,5 = 0,5 2,5 6 1 7,25 . 4. Вычисляем обратную матрицу: 3 9 -1 0,934 -0,196 (XTX)-1 = = 9 42,25 -0,196 0,065 . 5. Вычисляем вектор коэффициентов: 0,934 -0,196 1,5 - 0,02 A=(XTX)-1 XTY = * = -0,196 0,065 7,25 0,17725 . Таким образом, аппроксимирующий полином будет иметь вид: P (X) = -0,02 + 0,17725 X. Для оценки ошибки аппроксимации воспользуемся выражением: N E = ∑ ei2 /(N+1), (9) i=1 где ei2 - квадратичная ошибка i-го измерения, вычисляемая как: m+1 ei2 = ( Yi - ∑ Xij-1 *aj-1 )2 , i = 1,2,...,N j=1 или в векторной форме: Е2 = (Y - X A)2 .

Page 7: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

7 Если рассчитанная по (9) ошибка аппроксимации окажется больше допустимой ошибки Emax , то следует увеличить степень полинома до выполнения неравенства Emax <= E При этом следует иметь ввиду, что повышать степень полинома можно только до тех пор пока m+1 <= N. Вычисление степенных полиномов на ЭВМ обычно осуществляется по формуле Горнера ,которая для полинома m-го порядка записывается в виде: y = P(X) = (...((a1X + a2)X + a3)X+...+ am)X+ am+1 . (10) Алгоритм вычисления, построенный по выражению (10) сокращает время вычисления, т.к. возведение переменной X в любую степень заменяется расчетом по рекуррентной формуле: Y = akX + ak+1 , где k = 1, 2,..., m. Коэффициенты полинома сводятся в массив, включающий (m+1) элемент. Начальное значение переменной Y, задаваемое перед циклом , должно быть равно коэффициенту a1 при X в старшей степени, а параметр цикла должен изменяться от 2 до m+1. Следует отметить, что при использовании алгоритма (10), степенной полином (1) следует переписать в виде: P(X) = a1Xm + a2Xm-1 + a3Xm-2 + ... + amX + am+1, (11)

Page 8: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

8 Функция обращения матрицы

void omat(float A[10][10],int N) t s,r; int i,j,k; for(i=0;i<N;i++) { for(j=N;j<2*N;j++) { A[i][j]=0; } A[i][i+N]=1; } for(k=0;k<N;k++) { s=A[k][k];j=k; for(i=k;i<N;i++) { r=A[i][k]; if (abs(r)>abs(s)) { s=r;j=i; } } if(j!=k) { for (i=k-1;i<2*N;i++) { r=A[k][i]; A[k][i]=A[j][i];A[j][i]=r; } } for(j=k+1;j<N*2;j++) { A[k][j]=A[k][j]/s; } for(i=k+1;i<N;i++) { r=A[i][k]; for(j=k+1;j<N*2;j++) { A[i][j]=A[i][j]-A[k][j]*r; } } } for(j=N;j<N*2;j++) { cout<<"\n"; for(i=N-2;i>=0;i--) {

Page 9: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

9 s=A[i][j]; for(k=i+1;k<N;k++) { s=s-A[k][j]*A[i][k]; } A[i][j]=s; } } } Функция перемножения матриц void umat(float z[10][10], float y[10][10], float g[10][10],int n3,int m3,int l) { int i,j,k; float S; for (k=0; k<n3;k++) for ( j=0; j <l; j++) { g[k][j]=0; for(i=0;i<m3;i++) g[k][j]+= z[k][i]*y[i][j]; } }

Page 10: Программирование и основы алгоритмизации: Задания на курсовую работу, методические указания к выполнению

Таблица1

В А Р И А Н Т Ы Х N п\п

Y

0 1 2 3 4 5 6 7 8 9

1 0 0 0 0 0 0 0 0 0 0 0 2 100 10.15 9.05 8.15 6.95 6.05 6.19 4.55 3.99 3.55 3.05 3 400 34.95 34.05 33.65 31.49 33.05 32.49 31.55 30.05 29.25 28.255 4 500 43.75 43.00 42.65 40.16 42.00 41.75 41.00 39.55 38.95 37.75 5 600 50.10 48.55 48.00 49.05 47.65 46.25 45.95 44.60 43.35 43.05 Emax Допустимая

среднеквадратичная ошибка аппроксимации

3

4

2

1

4

1

0.5

0.5

4

2