Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Исследование равновесия твердого тела

Кривошеин Денис

ТБ-21

Вариант – 1

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

Дано: Плита, закрепленная на шести стержнях, находится в равновесии под действием двух активных сил: составляющей угол с осью x и лежащей в плоскости параллельной плоскости (z,x) и силы тяжести Известны размеры Сила F приложена в точке A.

Определить: усилия в стержнях

Выполнить проверку.

Рис. 1 Схема заданных сил и закрепления плиты

 

Составим систему уравнения равновесия в осях (x,y,z):

Перенесем активные силы в правую часть уравнений, меняя при этом знак.

 

Представим систему уравнений равновесия в матричной форме

Обозначим матрицу в левой части системы

 

 

;

 

вектор-столбец в правой части системы

 

;

и вектор-столбец неизвестных

 

Тогда система уравнений запишется в компактной форме

Решение системы сводится к отысканию вектор-столбца неизвестных реакций стержней Для определения реакций стержней воспользуемся методом Гаусса решения систем линейных уравнений методом исключения. Существуют стандартные программы решения системы линейных алгебраических уравнений методом Гаусса без нахождения обратной матрицы к матрице жесткости (SIMQ “Fortrun”). Используем аналогичную подпрограмму на языке C#. Текст кода, размещенного в отдельном классе, добавленном в проект, выглядит так:

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Равновесие_системы_сил

{

class ClassSIMQ

{

double[] A, B;

 

public void SIMQ(double[,] K, ref double[] P, int N, ref int KS)

{

 

A = new double[N * N + 1];

B = new double[N + 1];

int sd = 0;

for (int i = 0; i < N; i++)

{

B[i + 1] = P[i];

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

{

sd++;

A[sd] = K[j, i];

}

}

int JY, IT, J, IJ, IMAX = 0, I, I1, k, I2, IQS, IX, JX, IXJX, JJX, IXJ, NY, IB, IA, IC;

double TOL = 0, BIGA = 0, SAVE;

KS = 0;

int JJ = -N;

for (J = 1; J <= N; J++)

{

JY = J + 1;

JJ = JJ + N + 1;

BIGA = 0.0;

IT = JJ - J;

for (I = J; I <= N; I++)

{

IJ = IT + I;

if (Math.Abs(BIGA) - Math.Abs(A[IJ]) < 0)

{

BIGA = A[IJ];

IMAX = I;

}

}//30

if (Math.Abs(BIGA) - TOL <= 0)

{

KS = 1;

return;

}

I1 = J + N * (J - 2);

IT = IMAX - J;

for (k = J; k <= N; k++)

{

I1 = I1 + N;

I2 = I1 + IT;

SAVE = A[I1];

A[I1] = A[I2];

A[I2] = SAVE;

A[I1] = A[I1] / BIGA;

}//50

SAVE = B[IMAX];

B[IMAX] = B[J];

B[J] = SAVE / BIGA;

if ((J - N) == 0)

{

break;

}

IQS = N * (J - 1);

for (IX = JY; IX <= N; IX++)

{

IXJ = IQS + IX;

IT = J - IX;

for (JX = JY; JX <= N; JX++)

{

IXJX = N * (JX - 1) + IX;

JJX = IXJX + IT;

A[IXJX] = A[IXJX] - A[IXJ] * A[JJX];

}

B[IX] = B[IX] - B[J] * A[IXJ];

}

}//65

NY = N - 1;

IT = N * N;

for (J = 1; J <= NY; J++)

{

IA = IT - J;

IB = N - J;

IC = N;

for (k = 1; k <= J; k++)

{

B[IB] = B[IB] - A[IA] * B[IC];

IA = IA - N;

IC = IC - 1;

}

}//80

 

for (int i = 0; i < N; i++)

{

P[i] = B[i + 1];

}

 

}

 

}

}

 

При запуске проекта на выполнение и подстановке исходных данных результат расчетов появляется в нижней таблице:

Рис. 2 Форма проекта при запуске программы

Клиентский код формы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

 

namespace Кривошеин_задание_2

{

public partial class Form1: Form

{

double[,] MatrA;

double[] MatrB;

 

int i, j;

int m = 6;

string st;

List<string> list_st = new List<string>();

string[] St;

 

public Form1()

{

InitializeComponent();

}

 

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

Close();

}

 

private void сохранитьВФайлToolStripMenuItem_Click(object sender, EventArgs e)

{

// Сохранение в файл исходной матрицы

 

 

MatrA = new double[m, m];

 

for (i = 0; i < m; i++)

{

for (j = 0; j < m; j++)

MatrA[i, j] = Convert.ToDouble(dataGridView3.Rows[i].Cells[j].Value);

 

}

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

{

FileStream FS = saveFileDialog1.OpenFile() as FileStream;

StreamWriter SR = new StreamWriter(FS);

 

for (i = 0; i < m; i++)

{

st = null;

for (j = 0; j < m; j++)

{

st = st + MatrA[i, j].ToString() + " ";

}

SR.WriteLine(st);

}

SR.Close();

FS.Close();

}

 

}

 

private void считатьИзФайлаToolStripMenuItem_Click(object sender, EventArgs e)

{

// Считывание из файла исходной матрицы

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

FileStream FS = openFileDialog1.OpenFile() as FileStream;

StreamReader SR = new StreamReader(FS);

 

dataGridView3.Rows.Clear();

 

list_st.Clear();

while (SR.Peek() > 0)

{

list_st.Add(SR.ReadLine());

//dataGridView1

dataGridView3.Rows.Add();

}

St = list_st.ToArray();

 

MatrA = new double[m, m];

 

 

for (i = 0; i < m; i++)

{

 

St[i] = St[i].Replace(".", ",");;

//Разбиение строки St на подстроки aa

string[] aa = St[i].Split(" \t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

 

 

for (j = 0; j < m; j++)

{

//Заполнение матрицы и таблицы

MatrA[i, j] = Convert.ToDouble(aa[j]);

dataGridView3.Rows[i].Cells[j].Value = MatrA[i, j];

}

}

 

SR.Close();

FS.Close();

}

 

}

 

private void считатьИзФайлаToolStripMenuItem1_Click(object sender, EventArgs e)

{

// Считывание из файла вектор-столбца

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

FileStream FS = openFileDialog1.OpenFile() as FileStream;

StreamReader SR = new StreamReader(FS);

 

dataGridView2.Rows.Clear();

 

list_st.Clear();

while (SR.Peek() > 0)

{

list_st.Add(SR.ReadLine());

//dataGridView1

dataGridView2.Rows.Add();

}

St = list_st.ToArray();

 

MatrB = new double[m];

 

 

for (i = 0; i < m; i++)

{

 

St[i] = St[i].Replace(".", ",");;

 

//Заполнение матрицы и таблицы

MatrB[i] = Convert.ToDouble(St[i]);

dataGridView2.Rows[i].Cells[0].Value = MatrB[i];

}

SR.Close();

FS.Close();

}

 

}

 

private void сохранитьВФайлToolStripMenuItem1_Click(object sender, EventArgs e)

{

// Сохранение в файл вектор-столбца

 

 

MatrB = new double[m];

 

for (i = 0; i < m; i++)

{

 

MatrB[i] = Convert.ToDouble(dataGridView2.Rows[i].Cells[0].Value);

 

}

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

{

FileStream FS = saveFileDialog1.OpenFile() as FileStream;

StreamWriter SR = new StreamWriter(FS);

 

for (i = 0; i < m; i++)

{

st = null;

 

st = MatrB[i].ToString() + " ";

 

SR.WriteLine(st);

}

SR.Close();

FS.Close();

}

 

}

 

private void вычислениеНеизвестныхToolStripMenuItem_Click(object sender, EventArgs e)

{

int KS = 0;

double[] MB = new double[6];

for (i = 0; i < m; i++)

{

 

MB[i] = MatrB[i];

 

}

ClassSIMQ S = new ClassSIMQ();

S.SIMQ(MatrA, ref MB, m, ref KS);

label1.Text = "Код ошибки равен " + KS.ToString();

for (i = 0; i < m; i++)

{

 

//Заполнение таблицы S

 

dataGridView1.Rows[0].Cells[i].Value = MB[i];

}

 

}

}

}

Для проверки правильности решения задачи перенесем систему координат в нижний ярус конструкции и составим новую систему уравнений в осях :

 

Перенесем активные силы в правую часть уравнений, меняя при этом знак.

Представим систему уравнений равновесия в матричной форме

 

 

 

Обозначим матрицу в левой части системы

 

 

;

 

вектор-столбец в правой части системы

 

;

Результат вычислений представлен на форме:

Рис. 3 Форма проекта с проверкой

Есть отклонения в результатах расчетных усилий , , которые менее 0,2 % от усредненных значений искомых сил.

 

 


<== предыдущая | следующая ==>
Творожные розочки | Как девушке накачать пресс

Date: 2015-10-19; view: 656; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию