Определение допускаемой изгибающей нагрузки воспринимаемой резьбовым соединением с резьбой Эдисона круглой

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    518,26 Кб
  • Опубликовано:
    2013-11-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Определение допускаемой изгибающей нагрузки воспринимаемой резьбовым соединением с резьбой Эдисона круглой














РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

Определение допускаемой изгибающей нагрузки воспринимаемой резьбовым соединением с резьбой Эдисона круглой

Введение

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

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

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

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

Множество аналитических теорий позволяют решать большое количество технических задач, связанных с исследованием напряженно-деформированного состояния твердых тел. Однако задачи со сложной геометрией не могут быть решены аналитически, поэтому для их решения используются численные методы, такие как МКР, МКЭ, ГКЭ [1]. Они основаны на построении конечно-разносных сеток или разбиение конструкции на конечные элементы и получили распространение в различных областях: расчёты на прочность сложных инженерных сооружений, исследование теплопроводности различных материалов. Однако их использование является достаточно трудоёмким и сложным, поэтому распространение эти методы получили лишь с созданием и развитием ЭВМ, что позволило создавать автоматизированные систем.

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

1. Основные подходы к математическому моделированию физических систем

.1 Математическое моделирование

Математическая модель (ММ) представляет собой своеобразный «эквивалент» объекта, отражающий в математической форме важнейшие его свойства - законы которым он подчиняется, связи, присущие составляющим его частям [2].

Математическое моделирование - это процесс установления соответствия данному реальному объекту некоторого математического объекта, называемого математической моделью, и исследование этой модели, которое позволяет получать характеристики рассматриваемого реального объекта. Вид математической модели зависит от природы соответствующего реального объекта, требуемой достоверности и точности решения.[2].

Моделирование технических объектов возможно выполнить, в зависимости от степени детализации рассматриваемых процессов происходящих с объектом, на трёх уровнях: микро-, макро- и метауровень. Рассмотрим более подробно микроуровень.

Математическая модель технического объекта на микроуровне представляет собой систему дифференциальных уравнений в частных производных или сокращённо ДУЧП, которая предоставляет описание процессов в сплошной среде вместе с совокупностью начальных и граничных условий (краевым условиям). Как правило, сама система уравнений известна, однако зачастую краевые условия не заданы в полной мере и в некоторых случаях могут являться конечной целью проекта.

В связи с тем, что ДУЧП, в большинстве случаев, не поддаются аналитическому решению, при моделировании используются численные методы решения. На нынешний момент наиболее часто используются методы конечных разностей (МКР), конечных элементов (МКЭ) и граничных элементов (МГЭ). Все эти методы основаны на дискретизации (замена непрерывных переменных конечным множеством их значений в заданных для исследования пространственном и временном интервалах) и алгебраизации (замена производных алгебраическими соотношениями) задачи моделирования.

На практике при решении ДУЧП применяют различные способы дискретизации и алгебраизации переменных.

.2 Методика получения математических моделей элементов

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

1.      В первую очередь необходимо определить круг физических свойств объекта, которые подлежат рассмотрению при моделировании. Этот выбор зависит от предполагаемого предполагаемых воздействий при использование конечного продукта и степени универсальности математической модели.

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

.        Синтез структуры ММ.

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

Синтез структуры - является наиболее ответственной, поддающейся с наибольшим трудом формализации операцией.

4.      Вычисление числовых значений параметров ММ. Данная задача выставляется как задача минимизации погрешностей модели заданной структуры.

5.      Оценка точности и адекватности ММ.

.3 Численные методы расчета

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

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

Одним из простейших видов дискретизации является переход к использованию метода конечных разностей (МКР). Он заключается в разбиение области решения конечно-элементной сеткой и замене непрерывного множества точек дискретное (Пример разбиения предоставлен на рисунке 1.3.1 (а)). С целью упрощения решения задачи можно использовать сетку с постоянным шагом.

При построении сетки рекомендовано использовать алгоритм содержит следующие этапы:

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

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

. Решение полученной системы алгебраических уравнений с помощью выбранных численных методов.

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

Одним из наиболее широко применяемых видов дискретизации является метод конечных элементов (МКЭ). Данный метод уже широко распространён и применяется в различных областях. Разбиение предоставлено на рисунке 1.3.1 (б).

Решение задач по МКЭ содержит следующие этапы:

. Разбиение заданной области на конечные элементы. Нумерация узлов и элементов.

. Построение матриц жесткости конечных элементов.

. Сведение нагрузок и воздействий, приложенных к конечным элементам, к узловым силам.

. Формирование общей системы уравнений; учет в ней граничных и начальных условий. Решение полученной системы уравнений.

. Определение напряжений и деформаций в конечных элементах.

Преимуществами метода конечных элементов являются:

. Свойства материалов смежных элементов не должны быть обязательно одинаковыми. Это позволяет применять метод к телам, составленным из нескольких материалов.

. Криволинейная область может быть аппроксимирована с помощью прямолинейных элементов или описана точно с помощью криволинейных элементов.

. Размеры элементов могут быть переменными. Это позволяет укрупнить или измельчить сеть разбиения области на элементы, если в этом есть необходимость.

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

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

Также можно использовать ещё один численный метод - метод граничных элементов (МГЭ). Его работа заключатся в рассмотрении системы уравнений включающей в себя только значения в узлах находящихся на границах области. Таким образом, схема дискретизации требует разбиения лишь поверхности тела, она делится на ряд элементов и считается, что нужно найти приближённое решение, которое аппроксимирует исходную краевую задачу. Полученные элементы получили название граничных элементов. При использовании данного метода дискретизация повлечёт к решению меньшей системы уравнений. Однако он имеет и свой недостаток. А именно то, что вывод граничных интегральных уравнений и их решение может оказаться более сложными в математической части, по сравнению с остальными численные методами. Это обусловлено тем что, методы граничных интегральных уравнений развивались только математиками, но с течением времени их развитие стало более обширно. Теперь также доступны методы граничных элементов, по сути развившихся на основе идей интегральных уравнений. Они достаточно широко применимы без использования доказательств существования и единственности для каждого отдельного решения. В настоящее время эти методы становятся всё более и более популярными и особенно часто реализуются в алгоритмах для быстродействующих компьютерных систем.

Рисунок 1.3.1 - Разбиение тел неправильной формы сеткой конечных разностей (а) и сеткой конечных элементов (б)

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

1.4 Общее понятие о методе конечных элементов

Метод конечных элементов заключается в разбиении математической модели конструкции некоторые конечные элементы. Они могут быть одномерными, двумерными и многомерными (Пример конечных элементов предоставлен на рисунке 1.4.1). Выбираемый тип элемента зависит от исходных данных и требуемой точности расчётов. Таким образом, получаем множество элементов, разбивающих конструкцию на своеобразную сетку, которую принято называть - конечно-элементной.

При работе с МКЭ можно выделить в общем случае несколько общих этапов:

. Разбиение области на конечные элементы:

С целью получения наиболее точной аппроксимации формы границ, с них обычно и начинают разбиение области на элементы. После чего переходят к разбиению внутренних областей. Зачастую данный процесс удобно производить в несколько этапов. Сначала производят деление области на крупные подобласти, границы между которыми проходят там, где изменяются свойства материалов, геометрия, приложенная нагрузка. После чего каждая из них разбивается на элементы в зависимости от особенностей и требуемой точности. Затем осуществляется нумерация узлов конечных элементов. Этот процесс являлся бы тривиальной задачей, если бы не влиял на эффективность последующих вычислений. Если рассмотреть полученную в результате систему линейных уравнений, то можно выделить своеобразную полосу прокрутки. Она представляет собой некоторую область, заключающую ненулевые элементы в матрице коэффициентов между двумя линиями, расстояние между ними называется шириной полосы матрицы (Пример ширины полосы предоставлен на рисунке 1.4.2). Так как чем больше ширина полосы прокрутки, тем больше число итераций необходимых для получения результата, нумерация узлов является очень важным процессом и может минимизировать в дальнейшем вычислительных процесс.

. Определение аппроксимирующей функции для каждого элемента:

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

. Объединение конечных элементов.

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

Рисунок 1.4.1 - Некоторые конечные элементы

. Решение полученной системы алгебраических уравнений.

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

Рисунок 1.4.2 Ширина полосы системы уравнений

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

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


2. Программная реализация задачи

.1 Общая постановка задачи

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

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

Рисунок 2.1.1 − Общий вид диаграммы напряжений (деформаций)
малоуглеродистой стали

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

.2 Математическая постановка задачи

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

Деталь разбивается на треугольные конечные элементы с узлами i, j, k представленные на рисунке 2.2.2

Перемещения каждого узла имеют две компоненты, формула (2.1):

,        (2.1)

шесть компонент перемещений узлов элемента образуют вектор перемещений {д}:

.              (2.2)

Рисунок 2.1.1 − Сечение болта как тело вращения

Перемещение любой точки внутри конечного элемента определяется соотношениями (2.3) и (2.4):

,                       (2.3)

.                      (2.4)

При объединении (2.3) и (2.4) в одно уравнение получается следующее соотношение:

.        (2.5)

Деформации и перемещения связаны между собой следующим образом:

.              (2.6)

Рисунок 2.2.2 - Треугольный конечный элемент

При подстановке (2.5) в (2.6) получается соотношение (2.7):

.       (2.7)

Соотношение (2.7) можно представить в виде:

,                                           (2.8)

где [В] - градиентная матрица вида (2.9):

, (2.9)

где b-разница координат OY, c-разница координат OX.

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

При плоском деформированном состоянии в изотропном материале матрица упругих постоянных [D] определяется по формуле (2.10):

,              (2.10)

где Е - модуль упругости, n - коэффициент Пуассона.

Локальная матрица жесткости конечного элемента имеет вид:

                    (2.11)

Так как интегрирование производится по площади треугольника и ни одна из матриц не содержит значений x или y, то имеют решения имеет простое выражение:

                           (2.12)

где  - площадь элемента.

В нашем случае площадь для большей достоверности треугольника находилась через определитель координат вершин по следующей формуле:

                                   (2.13)

Уравнение равновесия i -ого узла имеет вид:

                                     (2.14)

Для учета условий закрепления существует следующий метод. Пусть имеется некоторая система N уравнений (2.15):

.     (2.15)

В случае, когда одна из опор неподвижна, т.е. Ui=0, рассмотрим на примере, когда U2=0:

,        (2.16)

то есть соответствующие строка и столбец задаются нулевыми, а диагональный элемент - единичным. Соответственно, приравнивается нулю и F2.

Для решения полученной системы выбираем метод Гаусса.

.3 Программная постановка задачи, реализованная на языке высокого уровня

Для написания программы был выбран объектно-ориентированный язык C#. Все задачи и алгоритм работы программы предоставлен на рисунке 2.3.1

Для решения конкретной задачи необходимо для начала задать начальные условия. Затем выбрать количество витков текущее, угол разбиения. Данный угол влияет на количество элементов, на которые будет разбито соединение. Чем больше он, тем меньше точность результатов, но быстродействие программы увеличится. При уменьшении угла аппроксимация на границах резьбы будет максимально точна, а, следовательно, результаты будут более точны, но быстродействие понизится из-за большего количества конечных элементов, на которые разбиты детали соединения. В результате программа покажет визуально деформацию и выведет максимальное смещение, в результате этого, можно будет сделать вывод о том, выдержала ли резьба приложенную силу. Как правило, резьба считается поврежденной, если смещение будет больше 10-15% от размера зуба резьбы, но в приложении можно самостоятельно задать критическое смещение.

Рисунок 2.3.1 Алгоритм работы программы

Структура приложения, написанного с помощью объектно-ориентированного языка, представлена в таблице 2.3.1.

Таблица 2.3.1 - Структура разработанного приложения

Метод

Тип принимаемых значений

Возвращаемое значение

Описание

Global_Web()

-

-

Основной алгоритм построения конечно-элементной сетки

Setka()

Координаты точек, материал номер элемента

-

Метод разбиения

formMatrixQ()

-

-

Формирование матрицы Q

formMatrixE();

-

-

Формирование матрицы E

formMatrixA()

Координаты точек

-

Формирование матрицы А

setGU()

-

int[]

Возвращает в элементе глобальные номера узлов

Mat()

-

Int

Возвращает материал элемента

X()

-

double[]

Возвращает массив координат X

Y()

-

double[]

Возвращает массив координат Y

Transposition()

Матрица

double[]

Транспонирует матрицу

Summation()

Две матрицы

double[,]

Суммирует две матрицы

Multiplication()

Две матрицы

double[,]

Умножает две матрицы

setGU()

-

int[]

Возвращает в элементе глобальные номера узлов

Mat()

-

Int

Возвращает материал элемента

X()

-

double[]

Возвращает массив координат X

Y()

-

double[]

Возвращает массив координат Y



3. Верификация и проведение вычислительного эксперимента

 

.1 Реализация модели конструкции в пакете ANSYS

математический программный моделирование численный

С целью проверки получаемых в ходе работы приложения результатов на достоверность была проведена верификация данных с помощью пакета ANSYS. Для этого было проведено моделирование резьбового соединения E21 ГОСТ 6042-83.

Исходные данные представлены в таблице 3.1.1.

Таблица 3.1.1 - Исходные данные программы

Материал

Модуль упругости, 1010Н/м2

Коэффициент Пуассона

Значение дейст-вующей силы, Н

Коли-чество витков

Болт

Гайка

Болт

Гайка

Болт

Гайка



Свинец

Серебро

1,6

7,6

0,44

0,37

1*108

11

Серебро

Серебро

7,6

0,37

3*108

11

Латунь

Сталь

9,8

21

0,35

0.25

5*108

11


На первом шаге моделирования построим исследуемую резьбу:

.        Создание точек:

Main Menu → Preprocessor → Modeling → Keypoints → In Active CS...

Рисунок 3.1.1 - Ввод модуля Юнга и коэффициента Пуассона

Соединение точек линиями: → Modeling → Create → Lines → Lines → Straight Line...

2.      Создание плоскости:→ Modeling → Create → Areas → Arbitrary → By Lines

3.      Объединение:

Preprocessor → Modeling → Operate → Booleans → Add → Areas

4.      Задание характеристик материала (рисунок 3.1.1):→ Material props → Materials Modes… → Structural → Linear → Elastic → Isotropic.

.        Построение конечно-элементной сетки с треугольными элементами (рисунок 3.1.2):

Preprocessor → Meshing → MeshTool

Рисунок 3.1.2 - Конечно-элементная сетка

6.      закрепляем и нагружаем деталь в соответствии с заданием (рисунок 3.1.3):

Sulution → Define Loads → Apply → Structural → Displacement → On Lines→ Define Loads → Apply → Structural → Force/Moment → On Nodes

Рисунок 3.1.3 - Нагрузка и закрепление детали

.        Расчет детали:

Sulution → Solve → Current LS

8.      вывод результатов (приложение Г):Postproc → Plot Results → Deformed ShapePostproc → Plot Results → Contour Plot → Nodal Solu → DOF Solution…Postproc → List Results → Nodal Solution → DOF Solution…

Результат выполнения работы в ANSYS см. в приложении В.

.2 Исследование полученных результатов

В результате проделанной работы разработано приложение, которое позволяет исследовать заданную деталь. Внешний вид программы приведен в приложении Г (рисунок Г.1). Cсравним результаты с решением аналогичной задачи в ANSYS. Процент расходимости результатов разработанной программы и ANSYS составил до 10%.

В таблице 3.2.1 приведены сравнительные данные.

Таблица 3.2.1 - Результаты выполнения программы

Значение действующей силы, Н

Максимальное перемещение, м


Решение в Ansys

Решение в С#

расхождение с решением, Ansys%


X

Y

X

Y


1*108

0.15770E-02

0.12269E-01

0.14823E-02

0.1153E-01

6

3*108

0.66400E-05

0.98894E-06

0.62391E-05

0.92994E-06

6

1*108

0.18487E-02

0.16232E-03

0.17993E-02

0.15429E-03

6


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

Из приведенных выше результатов видно, что погрешность действительно составляет до 10%. Из графического анализа результатов (приложения В,Г) видно, что погрешности соизмеримы во всех узлах.

Заключение

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

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

Таким образом, данную программу можно применять при расчётах допустимых изгибающих нагрузок в деталях использующих резьбу Эдисона.

Список использованных источников

1. Зенкевич О. Метод конечных элементов в технике. -М.: Мир, 1975. - 318 с.

2.      Зенкевич О., Чанг И. Метод конечных элементов теории сооружений и в механике сплошных сред. - М.: Недра, 1974. - 240 с.

.        Сегерлинд Л. Применение метода конечных элементов. - М.:Мир, 1979. -392 с.

.        Википедия, свободная энциклопедия. Автор: Д. Уэйлс и Л. Сэнгер. http://ru.wikipedia.org

.        Самарский А.А.: Введение в численные методы. - М.:Мир, 1982. -269 с

Приложение

Исходный код программы на языке C#

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Drawing.Drawing2D;

KursachKSKER

{partial class Form1: Form

{G, //модуль Юнга; //коэффициент ПуассонаmaxX = 0;maxY = 0;KolUsel;[,] E;[,] AA;[,] BB;[,] Q;usel=43;key = false;[,] K = {

{1,1,1,1,1,1},

{1,1,1,1,1,1},

{1,1,1,1,1,1},

{1,1,1,1,1,1},

{1,1,1,1,1,1},

{1,1,1,1,1,1}

};[,] gK;void formMatrixQ()

{= new double[3, 6];[0, 1] = 1;[1, 5] = 1;[2, 2] = 1;[2, 4] = 1;

}void formMatrixA(double x0, double y0, double x1, double y1, double x2, double y2)

{= new double[6, 6];[0, 0] = 1; AA[0, 1] = x0; AA[0, 2] = y0;[1, 3] = 1; AA[1, 4] = x0; AA[1, 5] = y0;[2, 0] = 1; AA[2, 1] = x1; AA[2, 2] = y1;[3, 3] = 1; AA[3, 4] = x1; AA[3, 5] = y1;[4, 0] = 1; AA[4, 1] = x2; AA[4, 2] = y2;[5, 3] = 1; AA[5, 4] = x2; AA[5, 5] = y2;

}

void formMatrixE()

{kaf = G / (1 - my * my);= new double[3, 3];[0, 0] = kaf * 1;[0, 1] = kaf * my;[0, 2] = 0;[1, 0] = kaf * my;[1, 1] = kaf * 1;[1, 2] = 0;[2, 0] = 0;[2, 1] = 0;[2, 2] = kaf * (1 - my) / 2;

}

double GetLenAB(double x0, double y0, double x1, double y1)

{Math.Sqrt(Math.Pow(x1 - x0, 2) + Math.Pow(y1 - y0, 2));

}

t = 0;pole;[] KG;ugol;A = 0, B = 0, R = 0;

double d, d1;//диаметрыN;//кол-во витков

int pix;[] niz_numers1;[] niz_numers2;nom = 0;[] bok_numers1;[] bok_numers2;[] bok_numers3;[] bok_numers4;[] bok_numers5;

[] bok_numers1L;[] bok_numers3L;[] bok_numers4L; nomer_treug = 0;koord=1;koordX = 350;Form1()

{();.MouseWheel += new MouseEventHandler(wheel);= panel1.CreateGraphics();

}void wheel(object sender, MouseEventArgs e)

{

{(key)

{.Value += e.Delta / 20;_Click(sender, new EventArgs());

}

{.Stop();= koord + e.Delta / 20;.Start();

}

}(Exception) { }

}void button1_Click(object sender, EventArgs e)

{= double.Parse(textBox9.Text.ToString());= double.Parse(textBox10.Text.ToString());= (double)numericUpDown3.Value*2;= (int)numericUpDown4.Value;= Convert.ToDouble(textBox1.Text);= d+d1*2;= (d - d1)/4;= N * R;_Web();= 1;.Refresh();

}

void Global_Web()

{kol = (int)(360 / ugol);

_numers1 = new int[kol / 4 + 1];_numers2 = new int[kol / 4 + 1];

_numers1 = new int[kol / 4 + 1];_numers2 = new int[kol / 4 + 1];_numers3 = new int[kol / 4 + 1];_numers4 = new int[kol / 4 + 1];_numers5 = new int[kol / 4 + 1];

_numers4L = new int[kol / 4 + 1];_numers3L = new int[kol / 4 + 1];_numers1L = new int[kol / 4 + 1];

//c_rig_numers = new int[5];

dl = kol / 4 + 1;

nomerUzla = 0;_treug = 0;= new KElement[50000];Rx=R, Ry=R;dr = d1 + d - R;

(Rx, d1 + Ry, 1, ref nomerUzla, ref nomer_treug, 1);.Reverse(bok_numers1);.Reverse(niz_numers1);

.Copy(bok_numers4, bok_numers4L, dl);.Copy(bok_numers3, bok_numers3L, dl);.Copy(bok_numers1, bok_numers1L, dl);(Rx, dr, 3, ref nomerUzla, ref nomer_treug, 2);.Reverse(bok_numers2);= Rx + R * 2;m = 2;n=1;(int i = 1; i < N; i++)

{(Rx, d1 + Ry, 2, ref nomerUzla, ref nomer_treug, m);

.Reverse(niz_numers1);.Copy(bok_numers2, bok_numers1L, dl);.Copy(bok_numers5, bok_numers4L, dl);

.Reverse(bok_numers1);//верх.Copy(bok_numers4, bok_numers4L, dl);.Copy(bok_numers3, bok_numers3L, dl);.Copy(bok_numers1, bok_numers1L, dl);

(i% 2 == 0)

{ m = 2; n = 1; }

{ m = 1; n = 2; }

= Rx + R * 2;

}= nomerUzla;

}

void setka(double x0, double y0, int zona, ref int n, ref int nomer_treug,int material)

{n_spec = 0;nx_xspec = 0;doopX = 0, doopY = 0;Num_nach = n+1;n0 = n;++;r = R;cr = x0;r1 = R/2;kol = (int)(360 / ugol);

foorMid = 0;ii1 = 0; int ii2 = 0;jj1 = 0; int jj2 = 0;li = 0;ni = 0;

bok1 = 0;bok2 = 0;bok3 = 0;bok4 = 0;bok5 = 0;niz1 = 0;bok4L = 0;bok1L = 0;bok3L = 0;nomer1 = Num_nach + kol * 3;nomer2 = nomer1 + 20;

(double fi = 315; fi < 675; fi = fi + ugol)

{x1, y1, x2, y2, x3, y3, x4, y4;

tfi = fi + ugol;tr = r1 + R/2;

= r1 * Cos(fi) +x0;= r1 * Sin(fi) + y0;

= r1 * Cos(tfi) + x0;= r1 * Sin(tfi) + y0;

= tr * Cos(fi) + x0;= tr * Sin(fi) + y0;

= tr * Cos(tfi) + x0;= tr * Sin(tfi) + y0;

[] Numer0 = new int[3];[] Numer = new int[3];[] Numer1 = new int[3];

x5=0, x6=0, y5=0, y6=0;

(fi < 495 && fi >= 405)

{++;= y5 = r;Ntrad = Math.Abs(y5 / Sin(fi));= Math.Abs(Ntrad * Cos(fi) + x0);= Math.Abs(y6 / Sin(tfi));= Ntrad * Cos(tfi) + x0;= y6 = y5 + y0;

nn = n;

(x3!= x5 && y3!= y5)

{= n + 2;

}= n + 1;

n1 = n + 5;

nn1 = n1;

(x4!= x6 && y4!= y6)

{= n1 + 2;

}++;

(x6 == x0 - R && (zona == 2 || zona == 4))

{= n1 - 1;

}

[0] = n0; Numer0[1] = nn1; Numer0[2] = nn;

[0] = nn; Numer[1] = nn1; Numer[2] = nn1 + 1;

[0] = nn; Numer1[1] = nn1 + 1; Numer1[2] = nn + 1;

[nomer_treug] = new KElement(cr, y0, x2, y2, x1, y1, Numer0,material);_treug++;

[nomer_treug] = new KElement(x1, y1, x2, y2, x4, y4, Numer,material);_treug++;[nomer_treug] = new KElement(x1, y1, x4, y4, x3, y3, Numer1,material);_treug++;

m = 0;(zona == 1 || zona == 2)= 1;= 2;

(x4!= x6 && y4!= y6)

{[0] = nn + 1; Numer[1] = nn1 + 1; Numer[2] = nn1 + 2;(x6 == x0 - R && (zona == 2 || zona == 4))

{[2] = bok_numers4L[0];

}[nomer_treug] = new KElement(x3, y3, x4, y4, x6, y6, Numer,m);_treug++;

}

(x3!= x5 && y3!= y5)

{[0] = nn + 1; Numer1[1] = n1; Numer1[2] = nn + 2;(x6 == x0 - R && (zona == 2 || zona == 4))

{[1] = bok_numers4L[0];

}[nomer_treug] = new KElement(x3, y3, x6, y6, x5, y5, Numer1,m);_treug++;

}

xx, yy;= x6;

h = d1 / 4;kol_poY = 4;= kol_poY;t = 0;

(double tyy = 1; tyy < 5; tyy = tyy + 1)

{= y5 + h;

[0] = n; Numer[1] = n1; Numer[2] = n1 + 1;[0] = n; Numer1[1] = n1 + 1; Numer1[2] = n + 1;(x6 == x0 - R && (zona == 2 || zona == 4))

{[0] = n; Numer[1] = bok_numers4L[bok4L]; Numer[2] = bok_numers4L[bok4L + 1];[0] = n; Numer1[1] = Numer[2]; Numer1[2] = n + 1;L++;

}

((zona == 1 || zona == 2) && foorMid == 1)

{(bok4 == 0)

{_numers4[bok4] = Numer[0];++;

}_numers4[bok4] = Numer1[2];++;

}

//низ((zona == 3 || zona == 4) && foorMid == 1)

{(bok5 == 0)

{_numers5[bok5] = Numer[0];++;

}_numers5[bok5] = Numer1[2];++;

}

if (t == 3 && (zona == 1 || zona == 2))

{(niz1 == 0)

{_numers1[niz1] = Numer1[2];++;

}_numers1[niz1] = Numer1[1];++;

}

mat = 0;(zona == 1 || zona == 2)= 1;= 2;

[] gu = new int[3];[nomer_treug] = new KElement(x5, y5, x6, y6, xx, yy, Numer,mat);

(t == 3&&(zona==3||zona==4))

{[0] = 0; gu[1] = 0; gu[2] = 1;[nomer_treug].setGU(gu);

}_treug++;

[nomer_treug] = new KElement(x5, y5, xx, yy, x5, yy, Numer1,mat);(t == 3 && (zona == 3 || zona == 4))

{[0] = 0; gu[1] = 1; gu[2] = 1;[nomer_treug].setGU(gu);

}_treug++;

= y6 = yy;

++;++;++;

}

}

(fi < 405 && fi >= 315)

{= x6 = r;Ntrad = Math.Abs(x5 / Cos(fi));= Math.Abs(Ntrad * Sin(fi) + y0);= Math.Abs(x6 / Cos(tfi));= Math.Abs(Ntrad * Sin(tfi) + y0);= x6 = x5 + x0;

nn = 0;n1 = 0;

= n;

(x3!= x5 && y3!= y5)

{= n + 2;;

}= n + 1;

((2 * d1 + 2 * R == y5) && (zona == 3 || zona == 4))

{-;

}

= n + 1;

(x4!= x6 && y4!= y6)

{= n1 + 2;

}++;

[0] = n0; Numer0[1] = n + 1; Numer0[2] = nn;

[0] = nn; Numer[1] = n + 1; Numer[2] = n + 2;

[0] = nn; Numer1[1] = n + 2; Numer1[2] = nn + 1;

[nomer_treug] = new KElement(cr, y0, x2, y2, x1, y1, Numer0,material);_treug++;[nomer_treug] = new KElement(x1, y1, x2, y2, x4, y4, Numer,material);_treug++;[nomer_treug] = new KElement(x1, y1, x4, y4, x3, y3, Numer1,material);_treug++;

m = 0;(zona == 1 || zona == 2)

{(y6 > y0)

{= 1;

}=2;

}(zona == 3 || zona == 4)

{(y6 > y0)

{= 2;

}= 1;

}

(x4!= x6 && y4!= y6)

{[0] = nn + 1; Numer[1] = n + 2; Numer[2] = n + 3;[nomer_treug] = new KElement(x3, y3, x4, y4, x6, y6, Numer,m);_treug++;

}

(x3!= x5 && y3!= y5)

{[0] = nn + 1; Numer1[1] = n1; Numer1[2] = n;((2 * d1 + 2 * R == y5) && (zona == 3 || zona == 4))

{[2] = niz_numers1[niz_numers1.Length - 1];

}[nomer_treug] = new KElement(x3, y3, x6, y6, x5, y5, Numer1,m);_treug++;

}(bok2 == 0 || bok1 == 0)

{(zona == 3 || zona == 4)

{_numers2[bok2] = Numer1[2];

}(zona == 1 || zona == 2)

{_numers1[bok1] = Numer1[2];

}

++; bok2++;

}

(x3 == x5 && y3 == y5)

{[1] = Numer[2];

}

(zona == 3||zona==4)

{_numers2[bok2] = Numer1[1];

}(zona == 1||zona==2)

{_numers1[bok1] = Numer1[1];

}++; bok2++;

}

(fi < 585 && fi >= 495)

{= x6 = r;

Ntrad = Math.Abs(x5 / Cos(fi));= Math.Abs(Ntrad * Sin(fi) + y0);= Math.Abs(x6 / Cos(tfi));= Ntrad * Sin(tfi) + y0;= x6 = x0 - x5;

nn = n;

(x3!= x5 && y3!= y5)

{= n + 2;;

}= n + 1;

(y5 == d1 + 2 * R || y5 == 2 * d1 + 4 * R)

{= nn + 6;(zona == 2 || zona == 4)

{= nn + 2;

}

}

(zona == 2 || zona == 4)

{= n - 1;

}

n1 = n + 1;

(x4!= x6 && y4!= y6)

{= n1 + 2;

}++;

Numer0[0] = n0; Numer0[1] = n + 1; Numer0[2] = nn;[0] = nn; Numer[1] = n + 1; Numer[2] = n + 2;[0] = nn; Numer1[1] = n + 2; Numer1[2] = nn + 1;

(x4 == x6 && y4 == y6 && (zona == 2 || zona == 4))

{[0] = n0; Numer0[1] = n + 1; Numer0[2] = nn;[0] = nn; Numer[1] = n + 1; Numer[2] = bok_numers1L[bok1L + 1];[0] = nn; Numer1[1] = Numer[2]; Numer1[2] = nn + 1;

}(x3 == x5 && y3 == y5 && (zona == 2 || zona == 4))

{[0] = n0; Numer0[1] = n + 1; Numer0[2] = nn;[0] = nn; Numer[1] = n + 1; Numer[2] = n + 2;[0] = nn; Numer1[1] = Numer[2]; Numer1[2] = bok_numers1L[bok1L];

}

[nomer_treug] = new KElement(cr, y0, x2, y2, x1, y1, Numer0,material);_treug++;

[nomer_treug] = new KElement(x1, y1, x2, y2, x4, y4, Numer,material);_treug++;[nomer_treug] = new KElement(x1, y1, x4, y4, x3, y3, Numer1,material);_treug++;

m = 0;(zona == 1 || zona == 2)

{(y6 < y0)

{= 2;

}= 1;

}(zona == 3 || zona == 4)

{(y6 < y0)

{= 1;

}= 2;

}

(x4!= x6 && y4!= y6)

{[0] = nn + 1; Numer[1] = n + 2; Numer[2] = n + 3;(zona == 2 || zona == 4)

{

// Numer[1] = bok_numers1L[bok1L + 1];[2] = bok_numers1L[bok1L + 1];

}(x3 == x5 && y3 == y5&&(zona==2||zona==4))

{[0] = bok_numers1L[bok1L];

}(zona == 3 && y6 == (2 * d1 + 2 * R))[2] = niz_numers1[0];[nomer_treug] = new KElement(x3, y3, x4, y4, x6, y6, Numer,m);_treug++;

}(x3!= x5 && y3!= y5)

{nn1 = n;(y5 == d1 + 2 * R)= nn + 2;[0] = nn + 1; Numer1[1] = n1; Numer1[2] = nn1;(zona == 2 || zona == 4)

{[1] = bok_numers1L[bok1L + 1];[2] = bok_numers1L[bok1L];

}(zona == 3 && y5 == 2*d1 + 4 * R)

{[2] = nn + 2;

}(zona == 3 && y6 == (2 * d1 + 2 * R))[1] = niz_numers1[0];[nomer_treug] = new KElement(x3, y3, x6, y6, x5, y5, Numer1,m);_treug++;

}L++;

//MessageBox.Show(nx_xspec.ToString());

}

(fi < 675 && fi >= 585)

{= y6 = r;Ntrad = Math.Abs(y5 / Sin(fi));

= Math.Abs(Ntrad * Cos(fi) + x0);

= Math.Abs(y6 / Sin(tfi));

= Ntrad * Cos(tfi) + x0;(zona == 1 || zona == 2)= y6 = d1;= y6 = y0 - y5;

nn = n;

(x3!= x5 && y3!= y5)

{= n + 2;

}= n + 1;

(zona == 3 || zona == 4)-;

n1 = 0;

if (zona == 1 || zona == 2)= n + 5;n1 = n + 1;

nn1 = n1;

(x4!= x6 && y4!= y6)

{= n1 + 2;

}++;

(x5 == x0 - R && zona == 2)

{= nn+2;

}

(zona == 1 || zona == 2)

{[0] = n0; Numer0[1] = nn1; Numer0[2] = nn;[0] = nn; Numer[1] = nn1; Numer[2] = nn1 + 1;[0] = nn; Numer1[1] = nn1 + 1; Numer1[2] = nn + 1;

}

{[0] = n0; Numer0[1] = n + 1; Numer0[2] = nn;[0] = nn; Numer[1] = n + 1; Numer[2] = n + 2;[0] = nn; Numer1[1] = n + 2; Numer1[2] = nn + 1;

}(x4 == x6 && y4 == y6 && (zona == 3||zona==4))

{[0] = n0; Numer0[1] = n + 1; Numer0[2] = nn;[0] = nn; Numer[1] = n + 1; Numer[2] = niz_numers1[jj1 + 1];[0] = nn; Numer1[1] = Numer[2]; Numer1[2] = nn + 1;

}(x3 == x5 && y3 == y5 && (zona == 3 || zona == 4))

{[0] = n0; Numer0[1] = n + 1; Numer0[2] = nn;[0] = nn; Numer[1] = n + 1; Numer[2] = n + 2;[0] = nn; Numer1[1] = Numer[2]; Numer1[2] = niz_numers1[jj1];

}

(x6 == x0 + R)

{[0] = n0; Numer0[1] = n0 + 1; Numer0[2] = nn;[0] = nn; Numer[1] = n0 + 1; Numer[2] = n0 + 2;[0] = nn; Numer1[1] = n0 + 2; Numer1[2] = nn + 1;

}

[nomer_treug] = new KElement(cr, y0, x2, y2, x1, y1, Numer0,material);_treug++;

[nomer_treug] = new KElement(x1, y1, x2, y2, x4, y4, Numer,material);_treug++;[nomer_treug] = new KElement(x1, y1, x4, y4, x3, y3, Numer1,material);_treug++;

m = 0;(zona == 1 || zona == 2)

{= 2;

}m = 1;(x4!= x6 && y4!= y6)

{[0] = nn + 1; Numer[1] = nn1 + 1; Numer[2] = nn1 + 2;

(zona == 3 || zona == 4)

{[2] = niz_numers1[jj1 + 1];

}(x3 == x5 && y3 == y5&&(zona==3||zona==4))

{[0] = niz_numers1[jj1];

}(x6 == x0 + R && (zona == 1 || zona == 2))

{[0] = nn + 1; Numer[1] = n0 + 2; Numer[2] = n0 + 3;

}(x6 == x0 + R && (zona == 3 || zona == 4))

{[0] = nn + 1; Numer[1] = n0 + 2; Numer[2] = niz_numers1[niz_numers1.Length - 1];

}

[nomer_treug] = new KElement(x3, y3, x4, y4, x6, y6, Numer,m);_treug++;

}(x3!= x5 && y3!= y5)

{[0] = nn + 1; Numer1[1] = n1; Numer1[2] = nn + 2;(x5 == x0 - R && zona == 2)

{[1] = nn1 + 2;[2] = bok_numers3L[0];= nn + 1;= nn1 + 2;

}

(zona == 3 || zona == 4)

{[2] = niz_numers1[jj1];[1] = niz_numers1[jj1 + 1];

}(x6 == x0 + R && (zona == 1 || zona == 2))

{[0] = nn + 1; Numer1[1] = n0 + 3; Numer1[2] = nn + 2;= n + 5;

}(x6 == x0 + R && (zona == 3 || zona == 4))

{[0] = nn + 1; Numer1[1] = niz_numers1[niz_numers1.Length - 1];[2] = niz_numers1[niz_numers1.Length - 2];

}[nomer_treug] = new KElement(x3, y3, x6, y6, x5, y5, Numer1,m);_treug++;

}++;

(zona == 1 || zona == 2)

{xx, yy;= x6;h = d1 / 4;kol_poY = 4;

= kol_poY;t = 0;

/*(x5 == x0 - R && zona == 2)

{

//n1 = n + 3;

//MessageBox.Show(n1.ToString());

}*/(double tyy = 1; tyy < 5; tyy = tyy + 1)

{= y5 - h;[0] = n; Numer[1] = n1; Numer[2] = n1 + 1;[0] = n; Numer1[1] = n1 + 1; Numer1[2] = n + 1;

(x5 == x0 - R && zona == 2)

{[0] = bok_numers3L[bok3L]; Numer[1] = n1; Numer[2] = n1 + 1;[0] = bok_numers3L[bok3L]; Numer1[1] = Numer[2]; Numer1[2] = bok_numers3L[bok3L + 1];L++;

}((x6 == (x0 + R))&&t==0)

{[1] = n0 + 3;[2] = n1;[1] = n1;--;

}

((zona == 1 || zona == 2) && xx == x0 + R)

{(bok3 == 0)

{_numers3[bok3] = Numer[1];

++;

}_numers3[bok3] = Numer1[1];++;

}

[nomer_treug] = new KElement(x5, y5, x6, y6, xx, yy, Numer, 2);//гайка[] gu = new int[3];(t == 3)

{ gu[0] = 0; gu[1] = 0; gu[2] = 1; }[nomer_treug].setGU(gu);_treug++;

[nomer_treug] = new KElement(x5, y5, xx, yy, x5, yy, Numer1, 2);//гайка(t == 3)

{[0] = 0; gu[1] = 1; gu[2] = 1;

}[nomer_treug].setGU(gu);_treug++;= y6 = yy;= n + 1;= n1 + 1;++;

}(x6 == (x0 + R))

{=n1;

}(x5 == x0 - R && zona == 2)

{= nn1-1;

}

}

}++;

}

}

double Cos(double fi)

{Math.Round(Math.Cos(fi * (Math.PI / 180)), 2);

}double Sin(double fi)

{Math.Round(Math.Sin(fi * (Math.PI / 180)), 2);

}void paint(Graphics gr)

{g = new Bitmap(panel1.Width, panel1.Height);ob = Graphics.FromImage(g);(ControlStyles.OptimizedDoubleBuffer, true);brush = new SolidBrush(Color.Azure);pen = new Pen(Color.Black, 1);p1 = new Pen(Color.Black, 2);det = R * 1.5;

// MessageBox.Show(nomer_treug.ToString());(t == 1)

{(int i = 0; i < nomer_treug; i++)

{[] x = KG[i].X();[] y = KG[i].Y();

.DrawLine(pen, (float)x[0] * pix, (float)y[0] * pix, (float)x[1] * pix, (float)y[1] * pix);.DrawLine(pen, (float)x[1] * pix, (float)y[1] * pix, (float)x[2] * pix, (float)y[2] * pix);.DrawLine(pen, (float)x[2] * pix, (float)y[2] * pix, (float)x[0] * pix, (float)y[0] * pix);

}

}.DrawImage(g, 0, 0);

}void panel1_Paint(object sender, PaintEventArgs e)

{g = new Bitmap(5000, 5000);ob = Graphics.FromImage(g);(ControlStyles.OptimizedDoubleBuffer, true);

brush = new SolidBrush(Color.Azure);pen = new Pen(Color.Azure, 1);p1 = new Pen(Color.Black, 1);

det = R * 1.5;font = new Font("Times New Roman", 8, FontStyle.Regular);

// MessageBox.Show(nomer_treug.ToString());(t == 1)

{(int i = 0; i < nomer_treug; i++)

{[] x = KG[i].X();[] y = KG[i].Y();[] nom = KG[i].N();m = KG[i].Mat();(m == 1).Color = Color.Blue;.Color = Color.Red;

[] points = new PointF[3];(int j = 0; j < 3; j++)

{[j].X = (float)x[j] * pix;[j].Y = (float)y[j] * pix;

}.FillPolygon(brush, points);.DrawPolygon(pen, points);

//ob.DrawString(nom[2].ToString(), font, Brushes.Black, (float)x[2] * pix, (float)y[2] * pix);

// ob.DrawLine(pen, (float)x[0] * pix, (float)y[0] * pix, (float)x[1] * pix, (float)y[1] * pix);

//ob.DrawLine(pen, (float)x[1] * pix, (float)y[1] * pix, (float)x[2] * pix, (float)y[2] * pix);

//ob.DrawLine(pen, (float)x[2] * pix, (float)y[2] * pix, (float)x[0] * pix, (float)y[0] * pix);

}

}

(t == 2)

{(int i = 0; i < nomer_treug; i++)

{[] x = KG[i].X();[] y = KG[i].Y();[] nom = KG[i].N();m = KG[i].Mat();(m == 1).Color = Color.Blue;.Color = Color.Red;

[] points = new PointF[3];sum = 0;(int j = 0; j < 3; j++)

{[j].X = ((float)x[j] + (float)X[nom[j] * 2]) * pix;[j].Y = ((float)y[j] + (float)X[nom[j] * 2 + 1]) * pix;(nom[j] == usel)

{

}

}

}.Graphics.DrawImage(g, koordX, koord);

}void button2_Click(object sender, EventArgs e)

{= koord - (int)numericUpDown4.Value;.Refresh();

}[] X;void button3_Click(object sender, EventArgs e)

{();= new double[KolUsel * 2, KolUsel * 2];(int i = 0; i < nomer_treug; i++)

{[] x = new double[3];// KG[i].X();[] y = new double[3]; //KG[i].Y();.Copy(KG[i].X(), x, 3);.Copy(KG[i].Y(), y, 3);

(x[0], y[0], x[1], y[1], x[2], y[2]);= matrixOperation.inverseMatrix(AA);[,] md = new double[3, 3];[0, 0] = 1; md[1, 0] = 1; md[2, 0] = 1;[0, 1] = x[0]; md[1, 1] = x[1]; md[2, 1] = x[2];[0, 2] = y[0]; md[1, 2] = y[1];md[2,2]=y[2];sTrigl = 0.5 * Math.Abs(matrixOperation.det(md));//площадь

//MessageBox.Show(sTrigl.ToString());(KG[i].Mat() == 1)

{= double.Parse(textBox5.Text);//2e11= double.Parse(textBox4.Text);

}(KG[i].Mat() == 2)

{= double.Parse(textBox2.Text);//2e5= double.Parse(textBox3.Text);

}();= matrixOperation.multiplication(matrixOperation.transposition(BB), matrixOperation.transposition(Q));= matrixOperation.multiplication(K, E);= matrixOperation.multiplication(K, Q);= matrixOperation.multiplication(K, BB);= matrixOperation.multiplication(K, sTrigl);[] Numer = KG[i].N();(int si = 0; si < 3; si++)(int sj = 0; sj < 3; sj++)(int ki = 0; ki < 2; ki++)(int kj = 0; kj < 2; kj++)

{[Numer[si] * 2 + ki, Numer[sj] * 2 + kj] += K[si * 2 + ki, sj * 2 + kj];

}

}[] RR = new double[KolUsel * 2];(int j = 0; j < nomer_treug; j++)

{[] gu = KG[j].GetGU();index=0;[] nd;(int k = 0; k < 3; k++)

{(gu[k] == 1)

{= KG[j].N();= nd[k];(int i = 0; i < KolUsel * 2; i++)

{[index * 2, i] = 0;[index * 2 + 1, i] = 0;[i, index * 2] = 0;[i,index * 2 + 1] = 0;

}[index * 2, index * 2] = 1;[index * 2 + 1, index * 2 + 1] = 1;[index * 2] = 0;[index * 2 + 1] = 0;

}

}

}= Convert.ToInt32(textBox11.Text);Fx = double.Parse(textBox7.Text);Fy = double.Parse(textBox8.Text);[usel * 2] = Fx;[usel * 2 + 1] = Fy;maxInd = 0;= 0;= 0;=new double[KolUsel*2];= matrixOperation.gausSLAU(gK, RR);kk = 0;(int i = 0; i < X.GetLength(0); i=i+2)

{(Math.Abs(maxX) <= Math.Abs(X[i]))

{= X[i];

}

}(int i = 1; i < X.GetLength(0); i = i + 2)

{(Math.Abs(maxY) <= Math.Abs(X[i]))

{= X[i];

}

}.Show("Расчет завершен\n maxX = " + maxX.ToString() + "\n maxY = " + maxY.ToString());maxDxDy = 2 * R * double.Parse(textBox6.Text)/100;.Text = "max U="+Math.Round(maxX, 7).ToString();.Text = "max V="+Math.Round(maxY, 7).ToString();(maxX > maxDxDy || maxY > maxDxDy)

label18.Text = "Состояние: разрушение";.Text = "Состояние: ок";

t = 2;.Refresh();.Enabled = true;

}

{view = new result();

//view.dataGridView1.RowCount = nomer_treug*KolUsel*2;k=0;(int i = 0; i < nomer_treug; i++)

{

[] x = KG[i].X();[] y = KG[i].Y();[] N = KG[i].N();(int j = 0; j < 3; j++)

{.dataGridView1.RowCount = k + 1;.dataGridView1[0, k].Value = (i+1).ToString();.dataGridView1[1, k].Value = x[j].ToString();.dataGridView1[2, k].Value = y[j].ToString();.dataGridView1[3, k].Value = (N[j]+1).ToString();.dataGridView1[4, k].Value = X[N[j]*2].ToString();.dataGridView1[5, k].Value = X[N[j]*2+1].ToString();++;

}

}.label1.Text="Количество узлов: "+KolUsel.ToString();.label2.Text="Количество элементов: "+nomer_treug.ToString();

view.label3.Text = "Максимальное смещение по X: " + maxX.ToString();.label4.Text = "Максимальное смещение по Y: " + maxY.ToString();

view.Show();

}

void Form1_KeyDown(object sender, KeyEventArgs e)

{(e.Control)= true;

}

void Form1_KeyUp(object sender, KeyEventArgs e)

{= false;

}void hScrollBar1_Scroll(object sender, ScrollEventArgs e)

{.Stop();+= e.OldValue - e.NewValue;.Start();

}void timer1_Tick(object sender, EventArgs e)

{.Refresh();.Stop();

}

}class KElement

{type;[] x;[] y;[] Num;material;[] GU;KElement(double x1, double y1, double x2, double y2, double x3, double y3, int[] Nu,int mat)

{= new int[3];= new double[3];= new double[3];[0] = x1; x[1] = x2; x[2] = x3;[0] = y1; y[1] = y2; y[2] = y3;= new int[3];[0] = Nu[0]; Num[1] = Nu[1]; Num[2] = Nu[2];= mat;

}void setGU(int[] gu)

{[0]=gu[0];[1]=gu[1];[2]=gu[2];

}int[] GetGU()

{GU;

}double[] X()

{x;

}

double[] Y()

{y;

}int[] N()

{Num;

}void setN(int N, int j)

{[j] = N;

}int Mat()

{material;

}

}matrixOperation

{public double[,] transposition(double[,] matr)

{[,] tMatr = new double[matr.GetLength(1), matr.GetLength(0)];(int i = 0; i < matr.GetLength(0); i++)(int j = 0; j < matr.GetLength(1); j++)[j, i] = matr[i, j];tMatr;

}

public double[,] summation(double[,] matrA, double[,] matrB)

{[,] mulMatr = new double[matrA.GetLength(0), matrB.GetLength(1)];(int i = 0; i < matrA.GetLength(0); i++)(int j = 0; j < matrA.GetLength(1); j++)[i, j] = matrA[i, j] + matrB[i, j];mulMatr;

}

public double[,] multiplication(double[,] matrA, double[,] matrB)

{[,] mulMatr = new double[matrA.GetLength(0), matrB.GetLength(1)];

(int i = 0; i < matrA.GetLength(0); i++)(int j = 0; j < matrB.GetLength(1); j++)(int k = 0; k < matrB.GetLength(0); k++)[i, j] += matrA[i, k] * matrB[k, j];mulMatr;

}

public double[] multiplication(double[,] matrA, double[] vectorB)

{[] mulMatr = new double[matrA.GetLength(0)];

(int i = 0; i < matrA.GetLength(0); i++)(int k = 0; k < vectorB.GetLength(0); k++)[i] += matrA[i, k] * vectorB[k];mulMatr;

}

public double[,] multiplication(double[,] matrA, double Zn)

{[,] mulMatr = new double[matrA.GetLength(0), matrA.GetLength(1)];

(int i = 0; i < matrA.GetLength(0); i++)(int k = 0; k < matrA.GetLength(1); k++)[i, k] = matrA[i, k] * Zn;mulMatr;

}

public double[] gausSLAU(double[,] A, double[] B)

{[] X = new double[A.GetLength(0)];

ln = A.GetLength(0); (int i = 0; i < ln; i++) //выполнение прямого хода Метода Гауса

{(Math.Abs(A[i, i]) < 0.000000001) //проверка стоит ли на главной диогонали 0

{maxEl = 0; //максимальный найденый элемент ниже нулевогоind = 0; //индекс строки с которой нужно произвести перестановку(int j = i; j < ln; j++) //если был найден 0

{(Math.Abs(A[j, i]) > maxEl) //выполняем поиско подходящей строки

{= Math.Abs(A[j, i]);= j;

}

}(ind!= 0)

{tmp = 0;

for (int j = 0; j < ln; j++) //перестановка строк

{= A[i, j];[i, j] = A[ind, j];[ind, j] = tmp;

}= B[i];[i] = B[ind];[ind] = tmp;

}

}

/*получение треугольной матрицы*/(int j = i + 1; j < ln; j++)

{(Math.Abs(A[j, i]) > 0.0000000001)

{lokKaf = A[j, i] / A[i, i]; //определение коэффициента домножения(int k = 0; k < ln; k++) //отнимание строк

{[j, k] = A[j, k] - A[i, k] * lokKaf;

}[j] = B[j] - B[i] * lokKaf;

}

}

}

/*-------обратный ход метода Гауса---------*/

{

double det = 1;

/*for (int i = 0; i < n; i++)

{*= A[i, i];

}*/(Math.Abs(A[ln - 1, ln - 1]) < 0.000000001)

{(Math.Abs(B[ln - 1]) < 0.000000001)

{new Exception("Система имеет множество решений");

}(Math.Abs(det) < 0.000000001)

throw new Exception("Система не имеет решений, определитель равен 0");

}

= new double[ln]; //инициализация массива ответов

for (int i = ln - 1; i >= 0; i--)

{h = B[i];// h присваиваем ответ из массива сил

for (int j = 0; j < ln; j++)

h = h - X[j] * A[i, j]; //вычетание элементов строки матрицы[i] = h / A[i, i];//h делим на коэффициент при иксу

}

}(Exception ex) { MessageBox.Show(ex.Message); }

X;

}

public double[,] inverseMatrix(double[,] A)

{[,] B = new double[A.GetLength(0), A.GetLength(1)];(int i = 0; i < A.GetLength(0); i++)

B[i, i] = 1;

{(int i = 0; i < A.GetLength(0); i++) //выполнять цыкл пока не будет обработана вся матрица

{((Math.Abs(A[i, i]) < 0.00001)) //проверка стоит ли на главной диогонали 0

{maxEl = 0;ind = 0;(int j = i; j < A.GetLength(0); j++) //если был найден 0

{(Math.Abs(A[j, i]) > maxEl) //выполняем поиско подходящей строки

{= Math.Abs(A[j, i]);= j;

}

}(ind!= 0)

{(int j = 0; j < A.GetLength(0); j++) //перестановка строк

{tmp = 0;= A[i, j];[i, j] = A[ind, j];[ind, j] = tmp;= B[i, j];[i, j] = B[ind, j];

B[ind, j] = tmp;

}

}

}kaf = A[i, i]; //преобразование элемента стоящего на главной доогонали в 1(Math.Abs(kaf) < 0.0000000000000001)

{new Exception("Нельзя получить обратную матрицу");

}

(int j = 0; j < A.GetLength(0); j++)

{[i, j] = A[i, j] / kaf;[i, j] = B[i, j] / kaf;

}

/*получение единичной матрицы*/(int j = 0; j < A.GetLength(0); j++)

{(i!= j && Math.Abs(A[j, i]) > 0.000000001)

{lokKaf = A[j, i] / A[i, i];(int k = 0; k < A.GetLength(0); k++)

{[j, k] = A[j, k] - A[i, k] * lokKaf;[j, k] = B[j, k] - B[i, k] * lokKaf;

}

}

}

}

}(Exception ex) { MessageBox.Show(ex.Message); }B;

}public double det(double[,] A)

{ln = A.GetLength(0);(int i = 0; i < ln; i++) //выполнение прямого хода Метода Гауса

{

if (Math.Abs(A[i, i]) < 0.000000001) //проверка стоит ли на главной диогонали 0

{maxEl = 0; //максимальный найденый элемент ниже нулевогоind = 0; //индекс строки с которой нужно произвести перестановку(int j = i; j < ln; j++) //если был найден 0

{(Math.Abs(A[j, i]) > maxEl) //выполняем поиско подходящей строки

{= Math.Abs(A[j, i]);= j;

}

}(ind!= 0)

{tmp = 0;

for (int j = 0; j < ln; j++) //перестановка строк

{= A[i, j];[i, j] = A[ind, j];

A[ind, j] = tmp;

}

}

}

/*получение треугольной матрицы*/

for (int j = i + 1; j < ln; j++)

{(Math.Abs(A[j, i]) > 0.0000000001)

{lokKaf = A[j, i] / A[i, i]; //определение коэффициента домножения(int k = 0; k < ln; k++) //отнимание строк

{[j, k] = A[j, k] - A[i, k] * lokKaf;

}

}

}

}

X = 1;

(int i = 0; i < ln; i++)*= A[i, i];

X;

}

}

}

Похожие работы на - Определение допускаемой изгибающей нагрузки воспринимаемой резьбовым соединением с резьбой Эдисона круглой

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!