Главная страница
Навигация по странице:

  • Приложения Приложение 1

  • Приложение 2

  • Список литературы

  • отчет по практике Определение реакций связей составной конструкции и Кинематика плоского механизма с одной степенью свободы. Решение задачи на эвм 7 7 7 7 7 7 7 7 827 7 14. 026 7 809 7 406 7 18. 049 7


    Скачать 349.77 Kb.
    НазваниеРешение задачи на эвм 7 7 7 7 7 7 7 7 827 7 14. 026 7 809 7 406 7 18. 049 7
    Анкоротчет по практике Определение реакций связей составной конструкции и Кинематика плоского механизма с одной степенью свободы
    Дата10.12.2021
    Размер349.77 Kb.
    Формат файлаdocx
    Имя файлаotchet.docx
    ТипРешение
    #298835
    страница3 из 3
    1   2   3

    Заключение

    В ходе выполнения практики были получены первичные навыки научно исследовательской работы; были освоены следующие элементы: 

    1. работа с динамическими массивами с использованием контейнера vector библиотеки STL; 

    1. форматированный вывод числовых данных на экран и в текстовый файл; 

    1. алгоритм численного решения системы линейных алгебраических уравнений методом Гаусса; 

    1. алгоритм численного решения системы обыкновенных дифференциальных уравнений методом Эйлера I-го порядка; 

    1. работа в программной среде Microsoft Visual Studio в режиме отладки; 

    1. набор математических формул во встроенном в MS Word редакторе формул; 

    1. построение рисунков во встроенном в MS Word графическом редакторе; 

    1. форматирование таблиц, рисунков, списков и общее форматирование документа в MS Word. 

    Из результатов решения заданий сделаны следующие выводы: 

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

    Приложения

    Приложение 1

    1. #include

    2. #include

    3. #include



    4. using namespace std;

    5. void Gauss(const vector> A /*матрица коэффицентов*/, const vector b /*столбец сводных членов*/, vector& answer /*вектор-ответ*/) //прямой ход Гаусса

    6. {

    7. int n, i, j, k;

    8. double mom, mom1;

    9. vector> S; //создаём вспомогательную(расширенную) матрицу

    10. n = A.size(); //размер исходной матрицы коэффицентов

    11. S.resize(n); //задаём размер матрицы S через размер м-цы А

    12. for (i = 0; i < n; i++)

    13. S[i].resize(n + 1);

    14. for (i = 0; i < n; i++)

    15. {

    16. for (j = 0; j < n; j++)

    17. S[i][j] = A[i][j]; //заполняем матрицу S элементами матрицы А

    18. S[i][n] = b[i]; //последний столбец м-цы S=столбец свободных сленов

    19. }

    20. for (k = 0; k < n; k++)

    21. {

    22. mom = S[k][k]; //диагональные элементы м-цы S

    23. i = k;

    24. for (j = k + 1; j < n; j++)

    25. if (abs(mom) < abs(S[j][k])) //сравнение модуля k-диагонального эл-та и j-элемента в k столбце (j>k)

    26. {

    27. mom = S[j][k]; //если усл. вып-ся заменяем диаг. эл-т на j-элемент в k столбце (j>k)

    28. i = j;

    29. }

    30. mom1 = S[i][k]; //i-элемент в k-столбце

    31. for (j = k; j <= n; j++)

    32. {

    33. mom = S[i][j]; //i-эл-т в j-столбце

    34. S[i][j] = S[k][j]; //i-эл-т в j-столбце заменяется на k-элемент в j-столбце

    35. S[k][j] = mom / mom1; //умножение k-строки на число

    36. }

    37. for (i = k + 1; i < n; i++)

    38. {

    39. mom = S[i][k];

    40. for (j = k + 1; j <= n; j++)

    41. S[i][j] = S[i][j] - S[k][j] * mom; //вычитание k-строки из i-строки

    42. S[i][k] = 0.0; //обнуляем k-эл-т в i-строке (приведение к треуг. виду)

    43. }

    44. }

    45. for (k = n - 1; k > 0; k--)

    46. for (i = k - 1; i >= 0; i--)

    47. {

    48. S[i][n] = S[i][n] - S[k][n] * S[i][k]; //для столбца св. сл-нов

    49. S[i][k] = 0.0;

    50. }

    51. answer.resize(n); //заполняем столбец-ответ n элементами

    52. for (i = 0; i < n; i++)

    53. answer[i] = S[i][n]; //заполняем столбец-ответ

    54. for (i = 0; i < n; i++)

    55. S[i].clear(); //очищаем i-эл-т вспом.(расшир.) м-цы

    56. S.clear(); //очищаем вспом.(расшир.) м-цу

    57. }









    58. int main()

    59. {

    60. setlocale(LC_ALL, "Russian");

    61. double F, G1, G2, sin1, sin2, sin3, sin4;

    62. double Ft, Gt1, Gt2, sin1t, sin2t, sin3t, sin4t;

    63. double n, N;



    64. n = 5;

    65. N = 5;



    66. Ft = 10; Gt1 = 20; Gt2 = 10; sin1t = 0.35; sin2t = 0.4; sin3t = 0.6; sin4t = 0.94;



    67. F = Ft + 0.1 * n; G1 = Gt1 + 0.1 * N; G2 = Gt2 + 0.1 * N; sin1 = sin1t + 0.001 * n;

    68. sin2 = sin2t - 0.001 * N; sin3 = sin3t - 0.001 * N; sin4 = sin4t - 0.001 * N;

    69. cout << "F=" << F << endl;

    70. cout << "G1=" << G1 << endl;

    71. cout << "G2=" << G2 << endl;

    72. cout << "sin1=" << sin1 << endl;

    73. cout << "sin2=" << sin2 << endl;

    74. cout << "sin3=" << sin3 << endl;

    75. cout << "sin4=" << sin4 << endl;

    76. double cos1, cos2, cos3, cos4;

    77. cos1 = sqrt(1 - sin1 * sin1);

    78. cos2 = sqrt(1 - sin2 * sin2);

    79. cos3 = sqrt(1 - sin3 * sin3);

    80. cos4 = sqrt(1 - sin4 * sin4);

    81. double tgb = 0.577;

    82. cout << "cos1=" << cos1 << endl;

    83. cout << "cos2=" << cos2 << endl;

    84. cout << "cos3=" << cos3 << endl;

    85. cout << "cos4=" << cos4 << endl;



    86. vector> M;

    87. vector b, answer;

    88. int i;

    89. M.resize(6);

    90. for (i = 0; i < 6; i++)

    91. M[i].resize(6);

    92. b.resize(6);

    93. //первое уравнение

    94. M[0][0] = 1;

    95. M[0][1] = 0;

    96. M[0][2] = 0.355;

    97. M[0][3] = -0.796;

    98. M[0][4] = -0.405;

    99. M[0][5] = 0;

    100. b[0] = -10.5;

    101. //второе уравнение

    102. M[1][0] = 0;

    103. M[1][1] = 1;

    104. M[1][2] = 0.935;

    105. M[1][3] = 0.605;

    106. M[1][4] = 0.914;

    107. M[1][5] = 0;

    108. b[1] = 20.5;

    109. //третье уравнение

    110. M[2][0] = 0;

    111. M[2][1] = -2;

    112. M[2][2] = -1.515;

    113. M[2][3] = 0;

    114. M[2][4] = -0.405;

    115. M[2][5] = 0;

    116. b[2] = -20.5;

    117. //четвёртое уравнение

    118. M[3][0] = 1;

    119. M[3][1] = 0;

    120. M[3][2] = 0;

    121. M[3][3] = 0.796;

    122. M[3][4] = 0;

    123. M[3][5] = -0.327;

    124. b[3] = 0;

    125. //пятое уравнение

    126. M[4][0] = 0;

    127. M[4][1] = 1;

    128. M[4][2] = 0;

    129. M[4][3] = -0.605;

    130. M[4][4] = 0;

    131. M[4][5] = -0.945;

    132. b[4] = 20.5;

    133. //шестое уравнение

    134. M[5][0] = 0;

    135. M[5][1] = 0;

    136. M[5][2] = 0;

    137. M[5][3] = -1.064;

    138. M[5][4] = 0;

    139. M[5][5] = -1.513;

    140. b[5] = 10.5;



    141. Gauss(M, b, answer);

    142. for (int i = 0; i < answer.size(); i++) {

    143. cout << "x" << i + 1 << "=" << answer[i] << endl;

    144. }



    145. //поиск макс по модулю корня

    146. double max = 0;

    147. for (int i = 0; i < answer.size(); i++)

    148. {

    149. if ((fabs(answer[i])) > max)

    150. max = fabs(answer[i]);

    151. }

    152. cout << "Максимальный по модулю корень " << max;

    153. }


    Приложение 2

    1. #define _CRT_SECURE_NO_WARNINGS //предупреждение ошибок компиляции

    2. #include

    3. #include

    4. #include

    5. #include

    6. using namespace std;

    7. int main()

    8. {

    9. setlocale(LC_ALL, "Russian");

    10. const double Pi = acos(-1.0);

    11. double n1, N1;

    12. cout << "Введите n и N" << endl;

    13. cin >> n1 >> N1;

    14. 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,

    15. R1 = 0.2 + 0.01 * n1, R2 = 0.8 + 0.01 * N1, R3 = 1.6 + 0.01 * N1, R4 = 1.0 + 0.01 * N1,



    16. Ye = R1 * sin(f1) + R2 * sin(f2)-0.5*R3*sin(f3),//координата точки E на оси Y в нулевой момент времени

    17. Xd = -R1 * cos(f1) - R2 * cos(f2) - 0.5*R3 * cos(f3),//координата точки D на оси X в нулевой момент времени

    18. Yc = R1 * sin(f1) + R2 * sin(f2) + 0.5*R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в нулевой момент времени

    19. double Om1 = ((2 * Pi) / tau);

    20. int N;

    21. //Разбиение на 10

    22. N = 10;

    23. dt = tau / N;

    24. FILE* pFile1;

    25. pFile1 = fopen("10steps.txt", "w"); //создание файла для вывода промежуточных значений

    26. for (int i = 1; i <= N + 1; i++)

    27. {

    28. Om2 = -(Om1 * R1 * (cos(f1)*sin(f2-f3)+cos(f3)*sin(f1-f2))) / (R2 * cos(f2)*sin(f2-f3));//угловая скорость звена AB

    29. Om3 = (2*Om1 * R1 * sin(f1-f2)) /(R3*sin(f2-f3));//угловая скорость звена DE

    30. Om4 = -(Om1*R1*(sin(f2-f3)*sin(f1-f2)+sin(f1-f2)*sin(f3-f2))) / (R4 * sin(f4) * cos(f2)*sin(f2-f3));//угловая скорость звена DC



    31. //Vc = Om1 * R1*sin(f1) + Om2 * R2*sin(f2) + 0.5*Om3*R3*sin(f3)+Om4*R4*sin(f4);//скорость точки C

    32. Yee = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в момент времени t

    33. Xdd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в момент времени t

    34. Ycc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в момент времени t



    35. if (MAX1 < abs(Yee - Ye))//находим максимальные смещения точек

    36. MAX1 = abs(Yee - Ye);

    37. if (MAX2 < abs(Xdd - Xd))

    38. MAX2 = abs(Xdd - Xd);

    39. if (MAX3 < abs(Ycc - Yc))

    40. MAX3 = abs(Ycc - Yc);



    41. 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 знака после запятой

    42. f1 = f1 + Om1 * dt, f2 = f2 + Om2 * dt, f3 = f3 + Om3 * dt, f4 = f4 + Om4 * dt;//метод Эйлера

    43. t = t + dt;

    44. }

    45. fprintf(pFile1, "Det1(max)=%6.3f Det2(max)=%6.3f Det3(max)=%6.3f\n", MAX1, MAX2, MAX3);//выводим максимальные смещения точек

    46. fclose(pFile1);

    47. 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;

    48. R1 = 0.2 + 0.01 * n1, R2 = 0.8 + 0.01 * N1, R3 = 1.6 + 0.01 * N1, R4 = 1.0 + 0.01 * N1;

    49. Ye = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в нулевой момент времени

    50. Xd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в нулевой момент времени

    51. Yc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в нулевой момент времени

    52. //Разбиение на 100

    53. N = 100;

    54. dt = tau / N;

    55. FILE* pFile2;

    56. pFile2 = fopen("100steps.txt", "w");

    57. for (int i = 1; i <= N + 1; i++)

    58. {

    59. Om2 = -(Om1 * R1 * (cos(f1) * sin(f2 - f3) + cos(f3) * sin(f1 - f2))) / (R2 * cos(f2) * sin(f2 - f3));//угловая скорость звена AB

    60. Om3 = (2 * Om1 * R1 * sin(f1 - f2)) / (R3 * sin(f2 - f3));//угловая скорость звена DE

    61. Om4 = -(Om1 * R1 * (sin(f2 - f3) * sin(f1 - f2) + sin(f1 - f2) * sin(f3 - f2))) / (R4 * sin(f4) * cos(f2) * sin(f2 - f3));//угловая скорость звена DC



    62. //Vc = Om1 * R1*sin(f1) + Om2 * R2*sin(f2) + 0.5*Om3*R3*sin(f3)+Om4*R4*sin(f4);//скорость точки C

    63. Yee = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в момент времени t

    64. Xdd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в момент времени t

    65. Ycc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в момент времени t



    66. if (MAX1 < abs(Yee - Ye))//находим максимальные смещения точек

    67. MAX1 = abs(Yee - Ye);

    68. if (MAX2 < abs(Xdd - Xd))

    69. MAX2 = abs(Xdd - Xd);

    70. if (MAX3 < abs(Ycc - Yc))

    71. MAX3 = abs(Ycc - Yc);



    72. 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));

    73. f1 = f1 + Om1 * dt, f2 = f2 + Om2 * dt, f3 = f3 + Om3 * dt, f4 = f4 + Om4 * dt;//метод Эйлера

    74. t = t + dt;

    75. }

    76. fprintf(pFile2, "Det1(max)=%6.3f Det2(max)=%6.3f Det3(max)=%6.3f\n", MAX1, MAX2, MAX3);//выводим максимальные смещения точек

    77. fclose(pFile2);

    78. 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;

    79. R1 = 0.2 + 0.01 * n1, R2 = 0.8 + 0.01 * N1, R3 = 1.6 + 0.01 * N1, R4 = 1.0 + 0.01 * N1;

    80. Ye = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в нулевой момент времени

    81. Xd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в нулевой момент времени

    82. Yc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в нулевой момент времени

    83. //Разбиение на 1000

    84. N = 1000;

    85. dt = tau / N;

    86. FILE* pFile3;

    87. pFile3 = fopen("1000steps.txt", "w");

    88. for (int i = 1; i <= N + 1; i++)

    89. {

    90. Om2 = -(Om1 * R1 * (cos(f1) * sin(f2 - f3) + cos(f3) * sin(f1 - f2))) / (R2 * cos(f2) * sin(f2 - f3));//угловая скорость звена AB

    91. Om3 = (2 * Om1 * R1 * sin(f1 - f2)) / (R3 * sin(f2 - f3));//угловая скорость звена DE

    92. Om4 = -(Om1 * R1 * (sin(f2 - f3) * sin(f1 - f2) + sin(f1 - f2) * sin(f3 - f2))) / (R4 * sin(f4) * cos(f2) * sin(f2 - f3));//угловая скорость звена DC



    93. //Vc = Om1 * R1*sin(f1) + Om2 * R2*sin(f2) + 0.5*Om3*R3*sin(f3)+Om4*R4*sin(f4);//скорость точки C

    94. Yee = R1 * sin(f1) + R2 * sin(f2) - 0.5 * R3 * sin(f3),//координата точки E на оси Y в момент времени t

    95. Xdd = -R1 * cos(f1) - R2 * cos(f2) - 0.5 * R3 * cos(f3),//координата точки D на оси X в момент времени t

    96. Ycc = R1 * sin(f1) + R2 * sin(f2) + 0.5 * R3 * sin(f3) + R4 * sin(f4);//координата точки C на оси Y в момент времени t



    97. if (MAX1 < abs(Yee - Ye))//находим максимальные смещения точек

    98. MAX1 = abs(Yee - Ye);

    99. if (MAX2 < abs(Xdd - Xd))

    100. MAX2 = abs(Xdd - Xd);

    101. if (MAX3 < abs(Ycc - Yc))

    102. MAX3 = abs(Ycc - Yc);

    103. 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));

    104. f1 = f1 + Om1 * dt, f2 = f2 + Om2 * dt, f3 = f3 + Om3 * dt, f4 = f4 + Om4 * dt;//метод Эйлера

    105. t = t + dt;

    106. }

    107. fprintf(pFile3, "Det1(max)=%6.3f Det2(max)=%6.3f Det3(max)=%6.3f\n", MAX1, MAX2, MAX3);//выводим максимальные смещения точек

    108. fclose(pFile3);

    109. return 0;

    110. }



    Список литературы

    1. Новожилов, И.В. Типовые расчеты по теоретической механике на базе ЭВМ: Учеб пособие для втузов/ И.В. Новожилов, М.Ф. Зацепин. - М.: Высш. шк., 1986. - 136 с.



    1. Бухгольц, Н.Н. Основной курс теоретической механики. В 2-х чч. Ч. 1. Кинематика, статика, динамика материальной точки: учебное пособие / Н.Н. Бухгольц. – С.Пб.: Лань, 2009. – 480 с. 



    1. Авхадиев Ф. Г. Численные методы алгебры и анализа / Ф. Г. Авхадиев. — Казань: Изд-во Казан. ун-та, 2019. – 200 с.



    1. Даутов Р. З. Д21 Основы численных методов линейной алгебры: учеб. пособие. / Р. З. Даутов, М. М. Карчевский. – Казань: Изд-во Казан. ун-та, 2018. – 136 с.



    1. Мышенков В. И. Численные методы. Ч. 2. Численное решение обыкновенных дифференциальных уравнений: Учебное пособие для студентов специальности. / Е. В. Мышенков – М.: МГУЛ, 2005. – 109 с.



    1. Хакимзянов Г. С. Методы вычислений: В 4 ч.: Учеб. пособие / С. Г.Черный – Новосиб. гос. ун-т. Новосибирск, 2003. – 160 с.



    1. Шигабутдинов Ф. Г. Краткий курс теоретической механики. Ч.2. Кинематика: учеб. пособие.\ Ф. Г. Шигабутдинов, А. Ф. Шигабутдинов. – Казань: Изд.-во Казанск. гос. архитект.-строит. ун-та, 2012. – 175 с



    1. Шилдт Г. Самоучитель C++: Пер. с англ. – 3-е изд. – СПб.: БХВ-Петербург, 2003. – 688 с.



    1. Яблонский А. А. Курс теоретической механики: Учебник. Ч.1. / В. А. Никифорова М.: Высшая  школа, 1977.- 368 с.



    1. Бать М.И. Теоретическая механика в примерах и задачах: Учебное пособие. В 2-х томах. / Г. Ю. Джанелидзе, А. С. Кельзон М.: Наука, 1990. Т.1 – 672 с.; Т.2 – 640 с.
    1   2   3


    написать администратору сайта