Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Исследование равновесия твердого тела
Кривошеин Денис ТБ-21 Вариант – 1 Определить реакции опор твердого тела под действием заданных активных сил. При нахождении неизвестных сил сотавить уравнения равновесия и представить их в матричной форме. Решить систему линейных уравнений с помощью алгоритмической программы. Выполнить проверку путем составления и решения системы уравнений для новой системы координат. Дано: Плита, закрепленная на шести стержнях, находится в равновесии под действием двух активных сил: Определить: усилия в стержнях Выполнить проверку.
Рис. 1 Схема заданных сил и закрепления плиты
Составим систему уравнения равновесия в осях (x,y,z):
Перенесем активные силы в правую часть уравнений, меняя при этом знак.
Представим систему уравнений равновесия в матричной форме
Обозначим матрицу в левой части системы
вектор-столбец в правой части системы
и вектор-столбец неизвестных
Тогда система уравнений запишется в компактной форме
Решение системы сводится к отысканию вектор-столбца неизвестных реакций стержней
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 Форма проекта с проверкой Есть отклонения в результатах расчетных усилий
Date: 2015-10-19; view: 748; Нарушение авторских прав |