Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Решение задачи в среде Turbo Pascal↑ ⇐ ПредыдущаяСтр 2 из 2 Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Вычислим приближённые функции методом наименьших квадратов в среде программирования Turbo Pascal. Сформируем систему линейных алгебраических уравнений, и решим методом Гаусса. Алгоритм программы Turbo Pascal для вычисления коэффициентов линейной функции, приближённой к экспериментальным данным:
Блок-схема 1
Алгоритм программы Turbo Pascal для вычисления коэффициентов квадратичной функции, приближённой к экспериментальным данным:
Блок-схема 2 Для составления СЛАУ необходимо вычислить суммы, являющиеся элементами матрицы коэффициентов. Напишем программу, вычисляющую суммы. Описание программы Рассмотрим наиболее важные функции и процедуры, используемые для вычисления сумм (элементов матрицы коэффициентов) квадратичной функции: Процедура ASSIGN используется для связывания файловой переменной с именем файла. В общем виде записывается следующим образом: ASSIGN (<файловая переменная>, <имя файла или логическое устройство>); Конкретно в курсовой работе процедура ASSIGN представлена в следующем виде: assign(fw,'gaus.txt'); assign(fm,kursovik.txt'); На языке Turbo Pascal имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программ. В данной программе используется счётный оператор цикла FOR., который используется для вычисления сумм всех чисел от 1 до n. В общем виде записывается следующим образом: FOR <параметр_цикла>:= <начальное_значение> ТО <конечное_значение> DO <оператор> FOR, TO, DO - зарезервированные слова (для, до, выполнить). Конкретно в курсовой работе цикл FOR используется для проведения циклического процесса вычисления сумм, являющихся элементами исходной матрицы коэффициентов: FOR i:=1 TO 25 DO Begin a1:=a1+X1[i]; {для x(i)} b1:=b1+Y1[i]; {для y(i)} c1:=c1+sqr(X1[i]); {для x(i)2} d1:=d1+X1[i]*Y1[i]; {для x(i)y(i)} e1:=e1+X1[i]*X1[i]*X1[i]; {для x(i)3} f1:=f1+X1[i]*X1[i]*X1[i]*X1[i]; {для x(i)4} g1:=g1+X1[i]*X1[i]*Y1[i]; {для x(i)2y(i)} end; Решение СЛАУ методом Гаусса Метод Гаусса – один из точных методов решения систем. Он состоит из прямого и обратного ходов. При прямом ходе матрица, составленная из коэффициентов уравнений системы, приводится к треугольному виду так, чтобы ниже ее главной диагонали оказались нули. Рассмотрим метод подробнее для системы: (11) Предположим, что не равно нулю. Введем (n-i) множителей (12) и вычтем из каждого i -го уравнения первое, помноженное на . Обозначая (13) легко убедится, что для всех уравнений, начиная со второго, . (14) Преобразованная система уравнений запишется в следующем виде: (15) Аналогичным образом исключим х2 из последних (n-2) уравнений, получив новые коэффициенты. Эту операцию будем проводить пока система не примет вид: (16) Обратный ход. Он состоит в нахождении значений системы по формулам: из последнего уравнения вычисляем , далее находим и из 1-го уравнения системы вычисляем: Вывод В курсовой работе рассмотрено два варианта теоретической зависимости момента нагрузки M [кг·м] исполнительного органа угольного комбайна от толщины среза h [см] в MathCad и на языке программирования Turbo Pascal 7.0. Вычисления независимых расчётов сходятся, следовательно, – расчёты верны. В результате получились следующие формулы: , . Давая качественную оценку коэффициентам детерминированности, опираясь на шкалу Чеддока, можно утверждать, что при линейной и квадратичной аппроксимациях наблюдается «весьма высокая» теснота связи между независимой переменной и предикатом (0,9–0,99), а это еще раз свидетельствует о правильности выбора функций для аппроксимации. При сравнении этих коэффициентов можно сказать, что уравнение линейной зависимости () удовлетворительно отображает экспериментальные данные. Но все же коэффициент детерминированности уравнения квадратичной зависимости ближе к единице () и достаточно хорошо отображает экспериментальные данные. На этом основании можно сделать вывод, что квадратичная зависимость наилучшим образом отображает взаимосвязь между M и h. Библиографический список
Приложение 1
Приложение 2 Приложение 3 PROGRAM lineynaya; {подключение модуля, необходимого для процедур очистки экрана и задержки} USES CRT; {Задание массива} TYPE MAT=ARRAY [1..10,1..11] OF REAL; VEK=ARRAY [1..25] OF REAL; {Описание переменных} VAR i,j,n:INTEGER; A:MAT; X,B,X1,Y1:VEK; fr,fm:text; a1,b1,c1,d1:real; {Процедура Гаусса} PROCEDURE GAU(VAR A:MAT; VAR B,X:VEK; m:INTEGER); VAR k,i,j,t,L:INTEGER; D:REAL; fw:TEXT; BEGIN {Задание всех переменных} L:=m+1; FOR i:=1 TO m DO A[i,L]:=B[i]; {имя файла данных на диске} ASSIGN(fw,'gaus.txt'); REWRITE(fw); {запись данных в файл} WRITELN(fw,' CUCTEMA YPABHEHIY: '); {начальный вывод данных} FOR i:=1 TO m DO BEGIN FOR j:=1 TO m DO WRITE(fw,A[i,j]:14:6,' X[',j,'] '); WRITELN(fw,' = ', B[i]:14:6); END; {прямой ход решения СЛАУ по методу Гаусса} {формирование треугольной матрицы коэффициентов} FOR i:=1 TO m DO BEGIN D:=A[i,i]; t:=i; {ищем max в столбце} FOR j:=i TO m DO IF abs(A[j,i]) > abs(D) THEN BEGIN D:=A[j,i]; t:=j;END; {обмен строк} IF i<>t THEN BEGIN FOR j:=i TO L DO BEGIN D:=A[i,j]; A[i,j]:=A[t,j]; A[t,j]:=D;END; END; {формирование строки} FOR j:=L DOWNTO i DO A[i,j]:=A[i,j]/A[i,i]; {зануление столбцов и пересчет А} FOR k:=i+1 TO m DO FOR j:=L DOWNTO i DO A[k,j]:=A[k,j]-A[i,j]*A[k,i]; END; {обратный ход} X[m]:=A[m,L]; FOR i:=m-1 DOWNTO 1 DO BEGIN D:=0; FOR j:=m DOWNTO i+1 DO D:=D+A[i,j]*X[j]; X[i]:=A[i,L]-D; END; WRITELN(fw,' VEKTOR X: '); FOR i:=1 TO m DO WRITE(fw, X[i]:10:6); WRITELN(fw); CLOSE(fw) END; {вычисление сумм} BEGIN clrscr; {имя файла данных на диске} assign(fm,'kursovik.txt'); reset(fm); {чтение данных c файла} FOR i:=1 TO 25 DO read(fm,X1[i]); FOR i:=1 TO 25 DO read(fm,Y1[i]); FOR i:=1 TO 25 DO {формулы вычисления для сумм} begin a1:=a1+X1[i]; {для x(i)} b1:=b1+Y1[i]; {для y(i)} c1:=c1+sqr(X1[i]); {для x(i)2} d1:=d1+X1[i]*Y1[i]; {для x(i)y(i)} end; {имя файла данных на диске} assign(fr,'dan.txt');REWRITE(fr); {запись данных в файл} {Формирование матрицы А} write(fr,25,' '); writeln(fr,a1:4:4,' '); write(fr,a1:4:4,' '); writeln(fr,c1:4:4,' '); write(fr,b1:4:4,' '); writeln(fr,d1:4:4,' '); close(fr);
WRITELN(' РЕШЕНИЕ СЛАУ МЕТОДОМ ГАУССА. КОЛ-ВО УРАВН. НЕ БОЛЕЕ 10'); WRITELN; WRITE(' ВВОДИ ЧИСЛО УРАВНЕНИЙ: '); READLN(n); {имя файла данных на диске} assign(fr,'dan.txt'); reset(fr); {чтение данных с файла} FOR i:=1 TO n DO FOR j:=1 TO n DO READ(fr,A[i,j]); FOR i:=1 TO n DO READ(fr,B[i]); for i:=1 to n do begin for j:=1 to n do write(a[i,j]:14:6); writeln(B[i]:14:1); end; GAU(A,B,X,n); {вывод результатов} WRITELN('VEKTOR X:'); FOR i:=1 TO n DO WRITE(X[i]:12:6,' '); WRITELN; readln; END.
Результат работы программы CUCTEMA YPABHEHIY: 25.000000 X[1] 40.400000 X[2] = 34039.000000 40.400000 X[1] 86.316800 X[2] = 64484.880000 VEKTOR X: 633.272700 450.674072
Приложение 4 PROGRAM kvadratichnaya; {подключение модуля, необходимого для процедур очистки экрана и задержки} USES CRT; {Задание массива} TYPE MAT=ARRAY [1..10,1..11] OF REAL; VEK=ARRAY [1..25] OF REAL; {Описание переменных} VAR i,j,n:INTEGER; A:MAT; X,B,X1,Y1:VEK; fr,fm:text; a1,b1,c1,d1,e1,f1,g1:real; {Процедура Гаусса} PROCEDURE GAU(VAR A:MAT; VAR B,X:VEK; m:INTEGER); VAR k,i,j,t,L:INTEGER; D:REAL; fw:TEXT; BEGIN {Задание всех переменных} L:=m+1; FOR i:=1 TO m DO A[i,L]:=B[i]; {имя файла данных на диске} ASSIGN(fw,'gaus.txt'); REWRITE(fw); {запись данных в файл} WRITELN(fw,' CUCTEMA YPABHEHIY: '); {начальный вывод данных} FOR i:=1 TO m DO BEGIN FOR j:=1 TO m DO WRITE(fw,A[i,j]:14:6,' X[',j,'] '); WRITELN(fw,' = ', B[i]:14:6); END; {прямой ход решения СЛАУ по методу Гаусса} {формирование треугольной матрицы коэффициентов} FOR i:=1 TO m DO BEGIN D:=A[i,i]; t:=i; {ищем max в столбце} FOR j:=i TO m DO IF abs(A[j,i]) > abs(D) THEN BEGIN D:=A[j,i]; t:=j;END; {обмен строк} IF i<>t THEN BEGIN FOR j:=i TO L DO BEGIN D:=A[i,j]; A[i,j]:=A[t,j]; A[t,j]:=D;END; END; {формирование строки} FOR j:=L DOWNTO i DO A[i,j]:=A[i,j]/A[i,i]; {зануление столбцов и пересчет А} FOR k:=i+1 TO m DO FOR j:=L DOWNTO i DO A[k,j]:=A[k,j]-A[i,j]*A[k,i]; END; {обратный ход} X[m]:=A[m,L]; FOR i:=m-1 DOWNTO 1 DO BEGIN D:=0; FOR j:=m DOWNTO i+1 DO D:=D+A[i,j]*X[j]; X[i]:=A[i,L]-D; END; WRITELN(fw,' VEKTOR X: '); FOR i:=1 TO m DO WRITE(fw, X[i]:10:6); WRITELN(fw); CLOSE(fw) END; {вычисление сумм} BEGIN clrscr; {имя файла данных на диске} assign(fm,'kursovik.txt'); reset(fm); {чтение данных c файла} FOR i:=1 TO 25 DO read(fm,X1[i]); FOR i:=1 TO 25 DO read(fm,Y1[i]); FOR i:=1 TO 25 DO {формулы вычисления для сумм} begin a1:=a1+X1[i]; {для x(i)} b1:=b1+Y1[i]; {для y(i)} c1:=c1+sqr(X1[i]); {для x(i)2} d1:=d1+X1[i]*Y1[i]; {для x(i)y(i)} e1:=e1+X1[i]*X1[i]*X1[i]; {для x(i)3} f1:=f1+X1[i]*X1[i]*X1[i]*X1[i]; {для x(i)4} g1:=g1+X1[i]*X1[i]*Y1[i]; {для x(i)2y(i)} end; {имя файла данных на диске} assign(fr,'dan.txt');REWRITE(fr); {запись данных в файл} {Формирование матрицы А} write(fr,25,' ',a1:4:4,' '); writeln(fr,c1:4:4,' '); write(fr,a1:4:4,' ',c1:4:4,' '); writeln(fr,e1:4:4,' '); write(fr,c1:4:4,' ',e1:4:4,' '); writeln(fr,f1:4:4,' '); write(fr,b1:4:4,' ',d1:4:4,' '); writeln(fr,g1:4:4,' '); close(fr); WRITELN(' РЕШЕНИЕ СЛАУ МЕТОДОМ ГАУССА. КОЛ-ВО УРАВН. НЕ БОЛЕЕ 10'); WRITELN; WRITE(' ВВОДИ ЧИСЛО УРАВНЕНИЙ: '); READLN(n); {имя файла данных на диске} assign(fr,'dan.txt'); reset(fr); {чтение данных с файла} FOR i:=1 TO n DO FOR j:=1 TO n DO READ(fr,A[i,j]); FOR i:=1 TO n DO READ(fr,B[i]); for i:=1 to n do begin for j:=1 to n do write(a[i,j]:14:6); writeln(B[i]:14:1); end; GAU(A,B,X,n); {вывод результатов} WRITELN('VEKTOR X:'); FOR i:=1 TO n DO WRITE(X[i]:12:6,' '); WRITELN; readln; END.
Результат работы программы CUCTEMA YPABHEHIY: 25.000000 X[1] 40.400000 X[2] 86.316800 X[3] = 34039.000000 40.400000 X[1] 86.318600 X[2] 207.988022 X[3] = 64484.880000 86.318600 X[1] 207.988022 X[2] 535.163222 X[3] = 146684.350400 VEKTOR X: 412.112901 848.450296 -122.122397
Приложение 5
Приложение 6
|
||||||||||
Последнее изменение этой страницы: 2016-04-07; просмотров: 546; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.106.23 (0.009 с.) |