отчет по практике Определение реакций связей составной конструкции и Кинематика плоского механизма с одной степенью свободы. Решение задачи на эвм 7 7 7 7 7 7 7 7 827 7 14. 026 7 809 7 406 7 18. 049 7
![]()
|
Заключение В ходе выполнения практики были получены первичные навыки научно исследовательской работы; были освоены следующие элементы: работа с динамическими массивами с использованием контейнера vector библиотеки STL; форматированный вывод числовых данных на экран и в текстовый файл; алгоритм численного решения системы линейных алгебраических уравнений методом Гаусса; алгоритм численного решения системы обыкновенных дифференциальных уравнений методом Эйлера I-го порядка; работа в программной среде Microsoft Visual Studio в режиме отладки; набор математических формул во встроенном в MS Word редакторе формул; построение рисунков во встроенном в MS Word графическом редакторе; форматирование таблиц, рисунков, списков и общее форматирование документа в MS Word. Из результатов решения заданий сделаны следующие выводы: Решение задач с помощью ЭВМ приводит к наиболее точным расчетам и малым погрешностям вычислений. Такой способ решения наиболее верный. Результаты вычислений, выраженные в графиках и таблицах, отображают всю полноту вычислений и зависимость ответа от тех или иных данных. Приложения Приложение 1 #include #include #include using namespace std; void Gauss(const vector { int n, i, j, k; double mom, mom1; vector n = A.size(); //размер исходной матрицы коэффицентов S.resize(n); //задаём размер матрицы S через размер м-цы А for (i = 0; i < n; i++) S[i].resize(n + 1); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) S[i][j] = A[i][j]; //заполняем матрицу S элементами матрицы А S[i][n] = b[i]; //последний столбец м-цы S=столбец свободных сленов } for (k = 0; k < n; k++) { mom = S[k][k]; //диагональные элементы м-цы S i = k; for (j = k + 1; j < n; j++) if (abs(mom) < abs(S[j][k])) //сравнение модуля k-диагонального эл-та и j-элемента в k столбце (j>k) { mom = S[j][k]; //если усл. вып-ся заменяем диаг. эл-т на j-элемент в k столбце (j>k) i = j; } mom1 = S[i][k]; //i-элемент в k-столбце for (j = k; j <= n; j++) { mom = S[i][j]; //i-эл-т в j-столбце S[i][j] = S[k][j]; //i-эл-т в j-столбце заменяется на k-элемент в j-столбце S[k][j] = mom / mom1; //умножение k-строки на число } for (i = k + 1; i < n; i++) { mom = S[i][k]; for (j = k + 1; j <= n; j++) S[i][j] = S[i][j] - S[k][j] * mom; //вычитание k-строки из i-строки S[i][k] = 0.0; //обнуляем k-эл-т в i-строке (приведение к треуг. виду) } } for (k = n - 1; k > 0; k--) for (i = k - 1; i >= 0; i--) { S[i][n] = S[i][n] - S[k][n] * S[i][k]; //для столбца св. сл-нов S[i][k] = 0.0; } answer.resize(n); //заполняем столбец-ответ n элементами for (i = 0; i < n; i++) answer[i] = S[i][n]; //заполняем столбец-ответ for (i = 0; i < n; i++) S[i].clear(); //очищаем i-эл-т вспом.(расшир.) м-цы S.clear(); //очищаем вспом.(расшир.) м-цу } int main() { setlocale(LC_ALL, "Russian"); double F, G1, G2, sin1, sin2, sin3, sin4; double Ft, Gt1, Gt2, sin1t, sin2t, sin3t, sin4t; double n, N; n = 5; N = 5; Ft = 10; Gt1 = 20; Gt2 = 10; sin1t = 0.35; sin2t = 0.4; sin3t = 0.6; sin4t = 0.94; F = Ft + 0.1 * n; G1 = Gt1 + 0.1 * N; G2 = Gt2 + 0.1 * N; sin1 = sin1t + 0.001 * n; sin2 = sin2t - 0.001 * N; sin3 = sin3t - 0.001 * N; sin4 = sin4t - 0.001 * N; cout << "F=" << F << endl; cout << "G1=" << G1 << endl; cout << "G2=" << G2 << endl; cout << "sin1=" << sin1 << endl; cout << "sin2=" << sin2 << endl; cout << "sin3=" << sin3 << endl; cout << "sin4=" << sin4 << endl; double cos1, cos2, cos3, cos4; cos1 = sqrt(1 - sin1 * sin1); cos2 = sqrt(1 - sin2 * sin2); cos3 = sqrt(1 - sin3 * sin3); cos4 = sqrt(1 - sin4 * sin4); double tgb = 0.577; cout << "cos1=" << cos1 << endl; cout << "cos2=" << cos2 << endl; cout << "cos3=" << cos3 << endl; cout << "cos4=" << cos4 << endl; vector vector int i; M.resize(6); for (i = 0; i < 6; i++) M[i].resize(6); b.resize(6); //первое уравнение M[0][0] = 1; M[0][1] = 0; M[0][2] = 0.355; M[0][3] = -0.796; M[0][4] = -0.405; M[0][5] = 0; b[0] = -10.5; //второе уравнение M[1][0] = 0; M[1][1] = 1; M[1][2] = 0.935; M[1][3] = 0.605; M[1][4] = 0.914; M[1][5] = 0; b[1] = 20.5; //третье уравнение M[2][0] = 0; M[2][1] = -2; M[2][2] = -1.515; M[2][3] = 0; M[2][4] = -0.405; M[2][5] = 0; b[2] = -20.5; //четвёртое уравнение M[3][0] = 1; M[3][1] = 0; M[3][2] = 0; M[3][3] = 0.796; M[3][4] = 0; M[3][5] = -0.327; b[3] = 0; //пятое уравнение M[4][0] = 0; M[4][1] = 1; M[4][2] = 0; M[4][3] = -0.605; M[4][4] = 0; M[4][5] = -0.945; b[4] = 20.5; //шестое уравнение M[5][0] = 0; M[5][1] = 0; M[5][2] = 0; M[5][3] = -1.064; M[5][4] = 0; M[5][5] = -1.513; b[5] = 10.5; Gauss(M, b, answer); for (int i = 0; i < answer.size(); i++) { cout << "x" << i + 1 << "=" << answer[i] << endl; } //поиск макс по модулю корня double max = 0; for (int i = 0; i < answer.size(); i++) { if ((fabs(answer[i])) > max) max = fabs(answer[i]); } cout << "Максимальный по модулю корень " << max; } Приложение 2 #define _CRT_SECURE_NO_WARNINGS //предупреждение ошибок компиляции #include #include #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); const double Pi = acos(-1.0); double n1, N1; cout << "Введите n и N" << endl; cin >> n1 >> N1; double t = 0, dt, f1 = 0.0, f2 = 0.7 + 0.01 * N1, f3 = 1.6 + 0.01 * N1, f4 = 0.5 + 0.01 * N1, Om2, Om3, Om4, Yee, Xdd, Ycc, MAX1 = 0.0, MAX2 = 0.0, MAX3 = 0.0, tau = 0.24 * N1, R1 = 0.2 + 0.01 * n1, R2 = 0.8 + 0.01 * N1, R3 = 1.6 + 0.01 * N1, R4 = 1.0 + 0.01 * N1, Ye = R1 * sin(f1) + R2 * sin(f2)-0.5*R3*sin(f3),//координата точки E на оси Y в нулевой момент времени Xd = -R1 * cos(f1) - R2 * cos(f2) - 0.5*R3 * cos(f3),//координата точки D на оси X в нулевой момент времени Yc = R1 * sin(f1) + R2 * sin(f2) + 0.5*R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в нулевой момент времени double Om1 = ((2 * Pi) / tau); int N; //Разбиение на 10 N = 10; dt = tau / N; FILE* pFile1; pFile1 = fopen("10steps.txt", "w"); //создание файла для вывода промежуточных значений for (int i = 1; i <= N + 1; i++) { Om2 = -(Om1 * R1 * (cos(f1)*sin(f2-f3)+cos(f3)*sin(f1-f2))) / (R2 * cos(f2)*sin(f2-f3));//угловая скорость звена AB Om3 = (2*Om1 * R1 * sin(f1-f2)) /(R3*sin(f2-f3));//угловая скорость звена DE Om4 = -(Om1*R1*(sin(f2-f3)*sin(f1-f2)+sin(f1-f2)*sin(f3-f2))) / (R4 * sin(f4) * cos(f2)*sin(f2-f3));//угловая скорость звена DC //Vc = Om1 * R1*sin(f1) + Om2 * R2*sin(f2) + 0.5*Om3*R3*sin(f3)+Om4*R4*sin(f4);//скорость точки C Yee = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в момент времени t Xdd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в момент времени t Ycc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в момент времени t if (MAX1 < abs(Yee - Ye))//находим максимальные смещения точек MAX1 = abs(Yee - Ye); if (MAX2 < abs(Xdd - Xd)) MAX2 = abs(Xdd - Xd); if (MAX3 < abs(Ycc - Yc)) MAX3 = abs(Ycc - Yc); fprintf(pFile1, "%6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f\n", t, Om2, Om3, Om4, f1, f2, f3, f4, abs(Yee - Ye), abs(Xdd - Xd), abs(Ycc - Yc)); //%6.3f - точность 3 знака после запятой f1 = f1 + Om1 * dt, f2 = f2 + Om2 * dt, f3 = f3 + Om3 * dt, f4 = f4 + Om4 * dt;//метод Эйлера t = t + dt; } fprintf(pFile1, "Det1(max)=%6.3f Det2(max)=%6.3f Det3(max)=%6.3f\n", MAX1, MAX2, MAX3);//выводим максимальные смещения точек fclose(pFile1); t = 0; f1 = 0.0; f2 = 0.7 + 0.01 * N1; f3 = 1.6 + 0.01 * N1; f4 = 0.5 + 0.01 * N1; MAX1 = 0.0; MAX2 = 0.0; MAX3 = 0.0; tau = 0.24 * N1; R1 = 0.2 + 0.01 * n1, R2 = 0.8 + 0.01 * N1, R3 = 1.6 + 0.01 * N1, R4 = 1.0 + 0.01 * N1; Ye = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в нулевой момент времени Xd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в нулевой момент времени Yc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в нулевой момент времени //Разбиение на 100 N = 100; dt = tau / N; FILE* pFile2; pFile2 = fopen("100steps.txt", "w"); for (int i = 1; i <= N + 1; i++) { Om2 = -(Om1 * R1 * (cos(f1) * sin(f2 - f3) + cos(f3) * sin(f1 - f2))) / (R2 * cos(f2) * sin(f2 - f3));//угловая скорость звена AB Om3 = (2 * Om1 * R1 * sin(f1 - f2)) / (R3 * sin(f2 - f3));//угловая скорость звена DE Om4 = -(Om1 * R1 * (sin(f2 - f3) * sin(f1 - f2) + sin(f1 - f2) * sin(f3 - f2))) / (R4 * sin(f4) * cos(f2) * sin(f2 - f3));//угловая скорость звена DC //Vc = Om1 * R1*sin(f1) + Om2 * R2*sin(f2) + 0.5*Om3*R3*sin(f3)+Om4*R4*sin(f4);//скорость точки C Yee = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в момент времени t Xdd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в момент времени t Ycc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в момент времени t if (MAX1 < abs(Yee - Ye))//находим максимальные смещения точек MAX1 = abs(Yee - Ye); if (MAX2 < abs(Xdd - Xd)) MAX2 = abs(Xdd - Xd); if (MAX3 < abs(Ycc - Yc)) MAX3 = abs(Ycc - Yc); fprintf(pFile1, "%6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f\n", t, Om2, Om3, Om4, f1, f2, f3, f4, abs(Yee - Ye), abs(Xdd - Xd), abs(Ycc - Yc)); f1 = f1 + Om1 * dt, f2 = f2 + Om2 * dt, f3 = f3 + Om3 * dt, f4 = f4 + Om4 * dt;//метод Эйлера t = t + dt; } fprintf(pFile2, "Det1(max)=%6.3f Det2(max)=%6.3f Det3(max)=%6.3f\n", MAX1, MAX2, MAX3);//выводим максимальные смещения точек fclose(pFile2); t = 0; f1 = 0.0; f2 = 0.7 + 0.01 * N1; f3 = 1.6 + 0.01 * N1; f4 = 0.5 + 0.01 * N1; MAX1 = 0.0; MAX2 = 0.0; MAX3 = 0.0; tau = 0.24 * N1; R1 = 0.2 + 0.01 * n1, R2 = 0.8 + 0.01 * N1, R3 = 1.6 + 0.01 * N1, R4 = 1.0 + 0.01 * N1; Ye = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в нулевой момент времени Xd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в нулевой момент времени Yc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в нулевой момент времени //Разбиение на 1000 N = 1000; dt = tau / N; FILE* pFile3; pFile3 = fopen("1000steps.txt", "w"); for (int i = 1; i <= N + 1; i++) { Om2 = -(Om1 * R1 * (cos(f1) * sin(f2 - f3) + cos(f3) * sin(f1 - f2))) / (R2 * cos(f2) * sin(f2 - f3));//угловая скорость звена AB Om3 = (2 * Om1 * R1 * sin(f1 - f2)) / (R3 * sin(f2 - f3));//угловая скорость звена DE Om4 = -(Om1 * R1 * (sin(f2 - f3) * sin(f1 - f2) + sin(f1 - f2) * sin(f3 - f2))) / (R4 * sin(f4) * cos(f2) * sin(f2 - f3));//угловая скорость звена DC //Vc = Om1 * R1*sin(f1) + Om2 * R2*sin(f2) + 0.5*Om3*R3*sin(f3)+Om4*R4*sin(f4);//скорость точки C Yee = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в момент времени t Xdd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в момент времени t Ycc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в момент времени t if (MAX1 < abs(Yee - Ye))//находим максимальные смещения точек MAX1 = abs(Yee - Ye); if (MAX2 < abs(Xdd - Xd)) MAX2 = abs(Xdd - Xd); if (MAX3 < abs(Ycc - Yc)) MAX3 = abs(Ycc - Yc); fprintf(pFile1, "%6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f\n", t, Om2, Om3, Om4, f1, f2, f3, f4, abs(Yee - Ye), abs(Xdd - Xd), abs(Ycc - Yc)); f1 = f1 + Om1 * dt, f2 = f2 + Om2 * dt, f3 = f3 + Om3 * dt, f4 = f4 + Om4 * dt;//метод Эйлера t = t + dt; } fprintf(pFile3, "Det1(max)=%6.3f Det2(max)=%6.3f Det3(max)=%6.3f\n", MAX1, MAX2, MAX3);//выводим максимальные смещения точек fclose(pFile3); return 0; } Список литературы Новожилов, И.В. Типовые расчеты по теоретической механике на базе ЭВМ: Учеб пособие для втузов/ И.В. Новожилов, М.Ф. Зацепин. - М.: Высш. шк., 1986. - 136 с. Бухгольц, Н.Н. Основной курс теоретической механики. В 2-х чч. Ч. 1. Кинематика, статика, динамика материальной точки: учебное пособие / Н.Н. Бухгольц. – С.Пб.: Лань, 2009. – 480 с. Авхадиев Ф. Г. Численные методы алгебры и анализа / Ф. Г. Авхадиев. — Казань: Изд-во Казан. ун-та, 2019. – 200 с. Даутов Р. З. Д21 Основы численных методов линейной алгебры: учеб. пособие. / Р. З. Даутов, М. М. Карчевский. – Казань: Изд-во Казан. ун-та, 2018. – 136 с. Мышенков В. И. Численные методы. Ч. 2. Численное решение обыкновенных дифференциальных уравнений: Учебное пособие для студентов специальности. / Е. В. Мышенков – М.: МГУЛ, 2005. – 109 с. Хакимзянов Г. С. Методы вычислений: В 4 ч.: Учеб. пособие / С. Г.Черный – Новосиб. гос. ун-т. Новосибирск, 2003. – 160 с. Шигабутдинов Ф. Г. Краткий курс теоретической механики. Ч.2. Кинематика: учеб. пособие.\ Ф. Г. Шигабутдинов, А. Ф. Шигабутдинов. – Казань: Изд.-во Казанск. гос. архитект.-строит. ун-та, 2012. – 175 с Шилдт Г. Самоучитель C++: Пер. с англ. – 3-е изд. – СПб.: БХВ-Петербург, 2003. – 688 с. Яблонский А. А. Курс теоретической механики: Учебник. – Ч.1. / В. А. Никифорова – М.: Высшая школа, 1977.- 368 с. Бать М.И. Теоретическая механика в примерах и задачах: Учебное пособие. – В 2-х томах. / Г. Ю. Джанелидзе, А. С. Кельзон – М.: Наука, 1990. – Т.1 – 672 с.; Т.2 – 640 с. |