StreamWriter Fil;
long finish = DateTime.Now.Ticks;//finishTime.Second;
MessageBox.Show("время = " + ((double)(finish - start) / 10000000 + "\n" + "Расчёт завершён \n").ToString());
/*вывод ответов*/
Fil = new StreamWriter("resultat.xml");
Fil.WriteLine(heder);
Fil.WriteLine("<Table ss:ExpandedColumnCount=\"{0}\" ss:ExpandedRowCount=\"{1}\" x:FullColumns=\"1\" \nx:FullRows=\"1\" ss:DefaultRowHeight=\"15\">", T.GetLength(1),T.GetLength(0));
for (int i = 0; i < T.GetLength(0); i++)
{
Fil.WriteLine( "<Row ss:AutoFitHeight=\"0\">\n");
for (int j = 0; j < T.GetLength(1); j++)
{
Fil.Write("<Cell><Data ss:Type=\"Number\">");
string ss = string.Format("{0,9:f14}", T[i,j]);
ss=ss.Replace(',','.');
Fil.Write(ss);
Fil.WriteLine("</Data></Cell>");
}
Fil.WriteLine("</Row>\n");
}
Fil.WriteLine(footor);
Fil.Close();
}
//////////////////////////////////////////
public void reshSLAU(double[,] A,double[] B, int ti)
{
for (int i = 0; i < A.GetLength(0); i++) //выполнение прямого хода Метода Гауса
{
/*получение треугольной матрицы*/
for (int j = i + 1; j < A.GetLength(0); j++)
{
double lokKaf = A[j, i] / A[i, i]; //определение коэффициента домножения
for (int k = 0; k < A.GetLength(0); k++) //отнимание строк
{
A[j, k] = A[j, k] - A[i, k] * lokKaf;
}
B[j] = B[j] - B[i] * lokKaf;
}
}
/*-------обратный ход метода Гауса---------*/
int ln = A.GetLength(0); //размерность матрицы
//T[] = new double[ln]; //инициализация массива ответов
for (int i = ln - 1; i >= 0; i--)
{
double hh = B[i];// hh присваиваем ответ из массива сил
for (int j = 0; j < ln; j++)
hh = hh - T[ti,j] * A[i, j]; //вычетание элементов строки матрицы
T[ti,i] = hh / A[i, i];//hh делим на коэффициент при иксу
}
}
Form2 f2;
Graphics gr;
private void button1_Click(object sender, EventArgs e)
{
f2 = new Form2();
gr = f2.panel1.CreateGraphics();
f2.Show();
DrawGraph(lel, int.Parse(TB_RD.Text), 1);
}
public void DrawGraph(double len, int ti, int sm)
{
double frid = len;
double stepX = (f2.panel1.Width-1) / frid;
double step = frid / T.GetLength(1);
double min = T[ti,0];
double max = T[ti, 0];
int i = 0;
while (i < T.GetLength(1))
{
//xx[i]=x0+i*step;
//yy[i]=Sin(x[i]);
if (T[ti,i] < min)
min = T[ti, i];
if (T[ti, i] > max)
max = T[ti, i];
i++;
}
double hg;
if (max - min >= 0.01)
hg = (f2.panel1.Height) / (max - min);
else
hg = 1;
f2.maxt.Text = max.ToString();
f2.mint.Text = min.ToString();
f2.minx.Text = "0";
f2.maxx.Text = len.ToString();
Pen p = new Pen(Brushes.SteelBlue);
//int x= Convert.ToInt32(Math.Ceiling(xx[0]*stepX));
//int y = Convert.ToInt32(Math.Ceiling(140 + yy[0] * hg));
int x = 0, y = 0;
double xx = 0;
//Image1.Canvas.MoveTo(xx,yy);
Point[] poi = new Point[T.GetLength(1)];
for (int j = 0; j < T.GetLength(1); j++)
{
x = Convert.ToInt32(Math.Ceiling(xx * stepX + sm));
y = Convert.ToInt32(Math.Ceiling(f2.panel1.Height - sm - (T[ti,j] - min) * hg)); //f2.panel1.Height+50poi[j] = new Point(x, y);
xx += len / (T.GetLength(1) - 1);
//gr.DrawLine(p,
//Image1.Canvas.LineTo(xx, yy);
}
gr.DrawLines(p, poi);
}
private void button2_Click(object sender, EventArgs e)
{
f2 = new Form2();
gr = f2.panel1.CreateGraphics();
f2.Show();
for(int i=1;i<int.Parse(TB_Tl.Text);i++)
DrawGraph(lel, i, 1);
}
}
}
Вывод: Изучили основы моделирования физических и технических систем. В результате сравнения метода конечных разностей и конечных элементов, метод конечных элементов более точный и быстрый.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.