|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Блок схемы для каждого метода решенияЦель работы
Исследование и реализация методов решения систем линейных алгебраических уравнений.
Задание (2.6) Решить каждым из изученных методов: а) по правилу Крамера; б) методом обратной матрицы; в) методом Гаусса; г) итерационным методом Гаусса-Зейделя (точность до 0,001) следующую систему уравнений: Если в методе Гаусса-Зейделя сходимость не достигается, то напечатать об этом сообщение. Краткая теория Методы решения систем линейных алгебраических уравнений разбиваются на две группы: — точные (прямые), позволяющие получить решение системы в точном виде за конечное число арифметических операций. В их числе: Правило Крамера, метод Гаусса, метод обратной матрицы. — приближенные (итерационные). В них задаются начальные значения и с помощью некоторого алгоритма проводится цикл уточняющих корни вычислений (итерация). Пример: Метод Гаусса – Зайделя.
Блок схемы для каждого метода решения Правило Крамера: Рисунок 1 – Правило Крамера. Метод обратной матрицы: Рисунок 2 – Метод обратной матрицы. Метод Гаусса: Рисунок 3 – Метод Гаусса. Итерационный метод Гаусса-Зейделя: Рисунок 4 – Метод Гаусса-Зейделя. Листинг программы:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading;
namespace nelin_ur { public partial class Form1: Form {
private double[][] A = { new double[] { 10, 1, 1 }, new double[] { 2, 10, 1 }, new double[] { 2, 2, 10 } }; private double[] B = { 12, 13, 14 }; private double[] X = new double[3]; private double[][] M = new double[3][]; private double[] MB = new double[3]; private double[] MX = new double[3]; private double D, D1, D2, D3; private double eps; private decimal iterations;
public Form1() { InitializeComponent(); }
private double getDeterminant(double[][] M) { double det = M[0][0] * (M[1][1] * M[2][2] - M[1][2] * M[2][1]) - M[0][1] * (M[1][0] * M[2][2] - M[1][2] * M[2][0]) + M[0][2] * (M[1][0] * M[2][1] - M[1][1] * M[2][0]); return det; } private void cloneMatrix(double[][] A, double[][] M) { A[0].CopyTo(M[0], 0); A[1].CopyTo(M[1], 0); A[2].CopyTo(M[2], 0); } private void makeReverse(double[][] M, double[][] A) { M[0][0] = A[1][1] * A[2][2] - A[1][2] * A[2][1]; M[1][0] = (A[1][0] * A[2][2] - A[1][2] * A[2][0]) * -1; M[2][0] = A[1][0] * A[2][1] - A[1][1] * A[2][0]; M[0][1] = (A[0][1] * A[2][2] - A[0][2] * A[2][1]) * -1; M[1][1] = A[0][0] * A[2][2] - A[0][2] * A[2][0]; M[2][1] = (A[0][0] * A[2][1] - A[0][1] * A[2][0]) * -1; M[0][2] = A[0][1] * A[1][2] - A[0][2] * A[1][1]; M[1][2] = (A[0][0] * A[1][2] - A[0][2] * A[1][0]) * -1; M[2][2] = A[0][0] * A[1][1] - A[0][1] * A[1][0]; }
private void Form1_Load(object sender, EventArgs e) {
}
private void button1_Click (object sender, EventArgs e) { System.Drawing.Pen myPen = System.Drawing.Pens.Black; System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(tabPage1.Handle); g.DrawEllipse(myPen, 250, 20, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 280, 22); g.DrawLine(myPen, 300, 40, 300, 50); g.DrawRectangle(myPen, 245, 50, 120, 20); g.DrawString("D = Determinant(A)", this.Font, Brushes.Black, 250, 52); g.DrawLine(myPen, 300, 70, 300, 80); g.DrawRectangle(myPen, 245, 80, 125, 55); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD1:=getDeterminant(M);", this.Font, Brushes.Black, 250, 82); g.DrawLine(myPen, 300, 135, 300, 145); g.DrawRectangle(myPen, 245, 145, 125, 55); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD2:=getDeterminant(M);", this.Font, Brushes.Black, 250, 147); g.DrawLine(myPen, 300, 200, 300, 210); g.DrawRectangle(myPen, 245, 210, 125, 55); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD3:=getDeterminant(M);", this.Font, Brushes.Black, 250, 212); g.DrawLine(myPen, 300, 265, 300, 275); g.DrawRectangle(myPen, 245, 275, 125, 40); g.DrawString("X[0]= D1/D; \nX[1]=D2/D;\nX[2]=D3/D;", this.Font, Brushes.Black, 270, 277); g.DrawLine(myPen, 300, 315, 300, 325); g.DrawRectangle(myPen, 245, 325, 125, 20); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 270, 327); g.DrawLine(myPen, 300, 345, 300, 355); g.DrawEllipse(myPen, 248, 355, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 280, 357); System.Drawing.Brush brush = System.Drawing.Brushes.Red; System.Drawing.Brush brush2 = System.Drawing.Brushes.White; int milSec = hScrollBar3.Maximum + 10 - hScrollBar3.Value; g.FillEllipse(brush, 251, 21, 99, 18); g.DrawString("начало", this.Font, Brushes.Black, 280, 22); Thread.Sleep(milSec); g.FillEllipse(brush2, 251, 21, 99, 18); g.DrawString("начало", this.Font, Brushes.Black, 280, 22); M[0] = new double[3]; M[1] = new double[3]; M[2] = new double[3];
g.FillRectangle(brush, 246, 51, 119, 19); g.DrawString("D = Determinant(A)", this.Font, Brushes.Black, 250, 52); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 51, 119, 19); g.DrawString("D = Determinant(A)", this.Font, Brushes.Black, 250, 52);
D = getDeterminant(A); cloneMatrix(A, M);
g.FillRectangle(brush, 246, 81, 124, 54); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD1:=getDeterminant(M);", this.Font, Brushes.Black, 250, 82); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 81, 124, 54); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD1:=getDeterminant(M);", this.Font, Brushes.Black, 250, 82);
M[0][0] = B[0]; M[1][0] = B[1]; M[2][0] = B[2]; D1 = getDeterminant(M); cloneMatrix(A, M);
g.FillRectangle(brush, 246, 146, 124, 54); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD2:=getDeterminant(M);", this.Font, Brushes.Black, 250, 147); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 146, 124, 54); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD2:=getDeterminant(M);", this.Font, Brushes.Black, 250, 147);
M[0][1] = B[0]; M[1][1] = B[1]; M[2][1] = B[2]; D2 = getDeterminant(M); cloneMatrix(A, M);
g.FillRectangle(brush, 246, 211, 124, 54); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD3:=getDeterminant(M);", this.Font, Brushes.Black, 250, 212); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 211, 124, 54); g.DrawString("M: = B[0],A[0][1],A[0][2] \n B[1],A[1][1],A[1][2], \n B[2],A[2][1],A[2][2]; \nD3:=getDeterminant(M);", this.Font, Brushes.Black, 250, 212);
M[0][2] = B[0]; M[1][2] = B[1]; M[2][2] = B[2]; D3 = getDeterminant(M);
g.FillRectangle(brush, 246, 276, 124, 39); g.DrawString("X[0]= D1/D; \nX[1]=D2/D;\nX[2]=D3/D;", this.Font, Brushes.Black, 270, 277); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 276, 124, 39); g.DrawString("X[0]= D1/D; \nX[1]=D2/D;\nX[2]=D3/D;", this.Font, Brushes.Black, 270, 277);
X[0] = D1 / D; X[1] = D2 / D; X[2] = D3 / D;
g.FillRectangle(brush, 246, 326, 124, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 270, 327); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 326, 124, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 270, 327); g.FillEllipse(brush, 249, 356, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 280, 357); Thread.Sleep(milSec); g.FillEllipse(brush2, 249, 356, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 280, 357); label4.Text = "x1 = " + X[0] + Environment.NewLine + "x2 = " + X[1] + Environment.NewLine + "x3 = " + X[2]; MessageBox.Show("Корни системы найдены.", "Решение системы", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void button2_Click (object sender, EventArgs e) { System.Drawing.Pen myPen = System.Drawing.Pens.Black; System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(tabPage2.Handle); g.DrawEllipse(myPen, 250, 20, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 280, 22); g.DrawLine(myPen, 300, 40, 300, 50); g.DrawRectangle(myPen, 245, 50, 120, 20); g.DrawString("D = getDeterminant(A)", this.Font, Brushes.Black, 250, 52); g.DrawLine(myPen, 300, 70, 300, 80); g.DrawRectangle(myPen, 245, 80, 125, 20); g.DrawString("D==0", this.Font, Brushes.Black, 285, 82); g.DrawLine(myPen, 245, 90, 230, 90); g.DrawLine(myPen, 230, 90, 230, 350); g.DrawLine(myPen, 230, 350, 390, 350); g.DrawLine(myPen, 370, 90, 380, 90); g.DrawLine(myPen, 380, 90, 380, 110); g.DrawRectangle(myPen, 320, 110, 250, 120); g.DrawString("M[0][0] = A[1][1] * A[2][2] - A[1][2] * A[2][1];\nM[1][0] = (A[1][0] * A[2][2] - A[1][2] * A[2][0]) * -1;\n M[2][0] = A[1][0] * A[2][1] - A[1][1] * A[2][0];\nM[0][1] = (A[0][1] * A[2][2] - A[0][2] * A[2][1]) * -1;\nM[1][1] = A[0][0] * A[2][2] - A[0][2] * A[2][0];\nM[2][1] = (A[0][0] * A[2][1] - A[0][1] * A[2][0]) * -1;\nM[0][2] = A[0][1] * A[1][2] - A[0][2] * A[1][1];\nM[1][2] = (A[0][0] * A[1][2] - A[0][2] * A[1][0]) * -1;\nM[2][2] = A[0][0] * A[1][1] - A[0][1] * A[1][0];", this.Font, Brushes.Black, 325, 112); g.DrawLine(myPen, 390, 230, 390, 240); g.DrawRectangle(myPen, 335, 240, 125, 20); g.DrawString("M= M/D;", this.Font, Brushes.Black, 355, 242); g.DrawLine(myPen, 390, 260, 390, 275); g.DrawRectangle(myPen, 335, 275, 125, 40); g.DrawString("X=M*B", this.Font, Brushes.Black, 365, 285); g.DrawLine(myPen, 390, 315, 390, 325); g.DrawRectangle(myPen, 335, 325, 125, 20); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 355, 327); g.DrawLine(myPen, 390, 345, 390, 355); g.DrawEllipse(myPen, 338, 355, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 370, 357); System.Drawing.Brush brush = System.Drawing.Brushes.Red; System.Drawing.Brush brush2 = System.Drawing.Brushes.White; int milSec = hScrollBar4.Maximum + 10 - hScrollBar4.Value;
M[0] = new double[3]; M[1] = new double[3]; M[2] = new double[3]; g.FillEllipse(brush, 251, 21, 99, 18); g.DrawString("начало", this.Font, Brushes.Black, 280, 22); Thread.Sleep(milSec); g.FillEllipse(brush2, 251, 21, 99, 18); g.DrawString("начало", this.Font, Brushes.Black, 280, 22);
D = getDeterminant(A);
g.FillRectangle(brush, 246, 51, 119, 19); g.DrawString("D = Determinant(A)", this.Font, Brushes.Black, 250, 52); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 51, 119, 19); g.DrawString("D = Determinant(A)", this.Font, Brushes.Black, 250, 52);
g.FillRectangle(brush, 246, 81, 124, 19); g.DrawString("D==0", this.Font, Brushes.Black, 285, 82); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 81, 124, 19); g.DrawString("D==0", this.Font, Brushes.Black, 285, 82); if (D == 0) { g.FillEllipse(brush, 339, 356, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 370, 357); Thread.Sleep(milSec); g.FillEllipse(brush2, 339, 356, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 370, 357); MessageBox.Show("Определитель матрицы равен нулю, поэтому метод не может быть использован.", "Решение системы", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { g.FillRectangle(brush, 321, 111, 249, 119); g.DrawString("M[0][0] = A[1][1] * A[2][2] - A[1][2] * A[2][1];\nM[1][0] = (A[1][0] * A[2][2] - A[1][2] * A[2][0]) * -1;\n M[2][0] = A[1][0] * A[2][1] - A[1][1] * A[2][0];\nM[0][1] = (A[0][1] * A[2][2] - A[0][2] * A[2][1]) * -1;\nM[1][1] = A[0][0] * A[2][2] - A[0][2] * A[2][0];\nM[2][1] = (A[0][0] * A[2][1] - A[0][1] * A[2][0]) * -1;\nM[0][2] = A[0][1] * A[1][2] - A[0][2] * A[1][1];\nM[1][2] = (A[0][0] * A[1][2] - A[0][2] * A[1][0]) * -1;\nM[2][2] = A[0][0] * A[1][1] - A[0][1] * A[1][0];", this.Font, Brushes.Black, 325, 112); Thread.Sleep(milSec); g.FillRectangle(brush2, 321, 111, 249, 119); g.DrawString("M[0][0] = A[1][1] * A[2][2] - A[1][2] * A[2][1];\nM[1][0] = (A[1][0] * A[2][2] - A[1][2] * A[2][0]) * -1;\n M[2][0] = A[1][0] * A[2][1] - A[1][1] * A[2][0];\nM[0][1] = (A[0][1] * A[2][2] - A[0][2] * A[2][1]) * -1;\nM[1][1] = A[0][0] * A[2][2] - A[0][2] * A[2][0];\nM[2][1] = (A[0][0] * A[2][1] - A[0][1] * A[2][0]) * -1;\nM[0][2] = A[0][1] * A[1][2] - A[0][2] * A[1][1];\nM[1][2] = (A[0][0] * A[1][2] - A[0][2] * A[1][0]) * -1;\nM[2][2] = A[0][0] * A[1][1] - A[0][1] * A[1][0];", this.Font, Brushes.Black, 325, 112); makeReverse(M, A); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) M[i][j] = M[i][j] / D; };
g.FillRectangle(brush, 336, 241, 124, 19); g.DrawString("M= M/D;", this.Font, Brushes.Black, 355, 242); Thread.Sleep(milSec); g.FillRectangle(brush2, 336, 241, 124, 19); g.DrawString("M= M/D;", this.Font, Brushes.Black, 355, 242);
X[0] = M[0][0] * B[0] + M[0][1] * B[1] + M[0][2] * B[2]; X[1] = M[1][0] * B[0] + M[1][1] * B[1] + M[1][2] * B[2]; X[2] = M[2][0] * B[0] + M[2][1] * B[1] + M[2][2] * B[2];
g.FillRectangle(brush, 336, 276, 124, 39); g.DrawString("X=M*B", this.Font, Brushes.Black, 365, 285); Thread.Sleep(milSec); g.FillRectangle(brush2, 336, 276, 124, 39); g.DrawString("X=M*B", this.Font, Brushes.Black, 365, 285);
g.FillRectangle(brush, 336, 326, 124, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 355, 327); Thread.Sleep(milSec); g.FillRectangle(brush2, 336, 326, 124, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 355, 327); g.FillEllipse(brush, 339, 356, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 370, 357); Thread.Sleep(milSec); g.FillEllipse(brush2, 339, 356, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 370, 357);
label5.Text = "x1 = " + X[0] + Environment.NewLine + "x2 = " + X[1] + Environment.NewLine + "x3 = " + X[2]; MessageBox.Show("Корни системы найдены.", "Решение системы", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
private void button3_Click (object sender, EventArgs e) { System.Drawing.Pen myPen = System.Drawing.Pens.Black; System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(tabPage3.Handle); g.DrawEllipse(myPen, 280, 20, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 310, 22); g.DrawLine(myPen, 330, 40, 330, 50); g.DrawRectangle(myPen, 245, 50, 200, 30); g.DrawString("MB[0] = B[0];\nMB[1] = B[0] * (-A[1][0] / A[0][0]) + B[1];", this.Font, Brushes.Black, 250, 52); g.DrawLine(myPen, 330, 80, 330, 90); g.DrawRectangle(myPen, 245, 90, 210, 30); g.DrawString("M[0][i] = A[0][i];\nM[1][i] = A[0][i] * (-A[1][0] / A[0][0]) + A[1][i];", this.Font, Brushes.Black, 250, 92); g.DrawLine(myPen, 330, 120, 330, 130); g.DrawRectangle(myPen, 245, 130, 210, 30); g.DrawString("MX[i] = A[0][i] * (-A[2][0] / A[0][0]) + A[2][i];\nMB[2] = B[0] * (-A[2][0] / A[0][0]) + B[2];", this.Font, Brushes.Black, 250, 132); g.DrawLine(myPen, 330, 160, 330, 170); g.DrawRectangle(myPen, 245, 170, 210, 30); g.DrawString("M[2][i] = M[1][i] * (-MX[1] / M[1][1]) + MX[i];\nMB[2] += MB[1] * (-MX[1] / M[1][1]);", this.Font, Brushes.Black, 250, 172); g.DrawLine(myPen, 330, 200, 330, 210); g.DrawRectangle(myPen, 245, 210, 260, 40); g.DrawString("X[2] = MB[2] / M[2][2];\nX[1] = (MB[1] - M[1][2] * X[2]) / M[1][1];\nX[0] = (MB[0] - M[0][1] * X[1] - M[0][2] * X[2]) / M[0][0];", this.Font, Brushes.Black, 250, 212); g.DrawLine(myPen, 330, 250, 330, 260); g.DrawRectangle(myPen, 245, 260, 200, 20); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 275, 262); g.DrawLine(myPen, 330, 280, 330, 290); g.DrawEllipse(myPen, 280, 290, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 310, 292); System.Drawing.Brush brush = System.Drawing.Brushes.Red; System.Drawing.Brush brush2 = System.Drawing.Brushes.White; int milSec = hScrollBar1.Maximum + 10 - hScrollBar1.Value; g.FillEllipse(brush, 281, 21, 99, 18); g.DrawString("начало", this.Font, Brushes.Black, 310, 22); Thread.Sleep(milSec); g.FillEllipse(brush2, 281, 21, 99, 18); g.DrawString("начало", this.Font, Brushes.Black, 310, 22); M[0] = new double[3]; M[1] = new double[3]; M[2] = new double[3];
MB[0] = B[0]; MB[1] = B[0] * (-A[1][0] / A[0][0]) + B[1];
g.FillRectangle(brush, 246, 51, 199, 29); g.DrawString("MB[0] = B[0];\nMB[1] = B[0] * (-A[1][0] / A[0][0]) + B[1];", this.Font, Brushes.Black, 250, 52); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 51, 199, 29); g.DrawString("MB[0] = B[0];\nMB[1] = B[0] * (-A[1][0] / A[0][0]) + B[1];", this.Font, Brushes.Black, 250, 52);
for (int i = 0; i < 3; i++) { M[0][i] = A[0][i]; M[1][i] = A[0][i] * (-A[1][0] / A[0][0]) + A[1][i]; }
g.FillRectangle(brush, 246, 91, 209, 29); g.DrawString("M[0][i] = A[0][i];\nM[1][i] = A[0][i] * (-A[1][0] / A[0][0]) + A[1][i];", this.Font, Brushes.Black, 250, 92); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 91, 209, 29); g.DrawString("M[0][i] = A[0][i];\nM[1][i] = A[0][i] * (-A[1][0] / A[0][0]) + A[1][i];", this.Font, Brushes.Black, 250, 92);
for (int i = 0; i < 3; i++) MX[i] = A[0][i] * (-A[2][0] / A[0][0]) + A[2][i]; MB[2] = B[0] * (-A[2][0] / A[0][0]) + B[2];
g.FillRectangle(brush, 246, 131, 209, 29); g.DrawString("MX[i] = A[0][i] * (-A[2][0] / A[0][0]) + A[2][i];\nMB[2] = B[0] * (-A[2][0] / A[0][0]) + B[2];", this.Font, Brushes.Black, 250, 132); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 131, 209, 29); g.DrawString("MX[i] = A[0][i] * (-A[2][0] / A[0][0]) + A[2][i];\nMB[2] = B[0] * (-A[2][0] / A[0][0]) + B[2];", this.Font, Brushes.Black, 250, 132);
for (int i = 0; i < 3; i++) M[2][i] = M[1][i] * (-MX[1] / M[1][1]) + MX[i]; MB[2] += MB[1] * (-MX[1] / M[1][1]);
g.FillRectangle(brush, 246, 171, 209, 29); g.DrawString("M[2][i] = M[1][i] * (-MX[1] / M[1][1]) + MX[i];\nMB[2] += MB[1] * (-MX[1] / M[1][1]);", this.Font, Brushes.Black, 250, 172); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 171, 209, 29); g.DrawString("M[2][i] = M[1][i] * (-MX[1] / M[1][1]) + MX[i];\nMB[2] += MB[1] * (-MX[1] / M[1][1]);", this.Font, Brushes.Black, 250, 172);
X[2] = MB[2] / M[2][2]; X[1] = (MB[1] - M[1][2] * X[2]) / M[1][1]; X[0] = (MB[0] - M[0][1] * X[1] - M[0][2] * X[2]) / M[0][0];
g.FillRectangle(brush, 246, 211, 259, 39); g.DrawString("X[2] = MB[2] / M[2][2];\nX[1] = (MB[1] - M[1][2] * X[2]) / M[1][1];\nX[0] = (MB[0] - M[0][1] * X[1] - M[0][2] * X[2]) / M[0][0];", this.Font, Brushes.Black, 250, 212); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 211, 259, 39); g.DrawString("X[2] = MB[2] / M[2][2];\nX[1] = (MB[1] - M[1][2] * X[2]) / M[1][1];\nX[0] = (MB[0] - M[0][1] * X[1] - M[0][2] * X[2]) / M[0][0];", this.Font, Brushes.Black, 250, 212);
label3.Text = "x1 = " + X[0] + Environment.NewLine + "x2 = " + X[1] + Environment.NewLine + "x3 = " + X[2];
g.FillRectangle(brush, 246, 261, 199, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 275, 262); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 261, 199, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 275, 262); g.FillEllipse(brush, 281, 291, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 310, 292); Thread.Sleep(milSec); g.FillEllipse(brush2, 281, 291, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 310, 292);
MessageBox.Show("Корни системы найдены.", "Решение системы", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void button4_Click (object sender, EventArgs e) { label2.Text = " "; try { eps = float.Parse(textBox10.Text); } catch (FormatException) { MessageBox.Show("Точность не задана или имеет неверный формат.\nДля дробных значений используйте запятую вместо точки.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } catch (OverflowException) { MessageBox.Show("Точность слишком велика.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (eps >= 1) { MessageBox.Show("Точность слишком велика.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (eps <= 0) { MessageBox.Show("Точность должна быть больше нуля.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } System.Drawing.Pen myPen = System.Drawing.Pens.Black; System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(tabPage4.Handle); g.DrawEllipse(myPen, 280, 20, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 310, 22); g.DrawLine(myPen, 330, 40, 330, 50); g.DrawRectangle(myPen, 265, 50, 130, 20); g.DrawString("while (iterations > 0)", this.Font, Brushes.Black, 273, 52); g.DrawLine(myPen, 330, 70, 330, 80); g.DrawRectangle(myPen, 245, 80, 250, 40); g.DrawString("X[0] = (B[0] - A[0][1] * X[1] - A[0][2] * X[2]) / A[0][0];\nX[1] = (B[1] - A[1][0] * X[0] - A[1][2] * X[2]) / A[1][1];\nX[2] = (B[2] - A[2][0] * X[0] - A[2][1] * X[1]) / A[2][2];", this.Font, Brushes.Black, 250, 82); g.DrawLine(myPen, 330, 120, 330, 130); g.DrawRectangle(myPen, 275, 130, 110, 20); g.DrawString("|MX[0] - X[0]|<e", this.Font, Brushes.Black, 280, 132); g.DrawLine(myPen, 275, 140, 235, 140); g.DrawLine(myPen, 235, 60, 235, 140); g.DrawLine(myPen, 235, 60, 265, 60); g.DrawLine(myPen, 330, 150, 330, 160); g.DrawLine(myPen, 395, 60, 515, 60); g.DrawLine(myPen, 515, 60, 515, 185); g.DrawLine(myPen, 515, 185, 330, 185); g.DrawRectangle(myPen, 275, 160, 110, 20); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 280, 162); g.DrawLine(myPen, 330, 180, 330, 190); g.DrawEllipse(myPen, 280, 190, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 310, 192); System.Drawing.Brush brush = System.Drawing.Brushes.Red; System.Drawing.Brush brush2 = System.Drawing.Brushes.White; int milSec = hScrollBar2.Maximum + 10 - hScrollBar2.Value;
iterations = numericUpDown1.Value; for (int i = 0; i < 3; i++) { X[i] = 0; }; g.FillRectangle(brush, 266, 51, 129, 19); g.DrawString("while (iterations > 0)", this.Font, Brushes.Black, 273, 52); Thread.Sleep(milSec); g.FillRectangle(brush2, 266, 51, 129, 19); g.DrawString("while (iterations > 0)", this.Font, Brushes.Black, 273, 52); while (iterations > 0) { for (int i = 0; i < 3; i++) MX[i] = X[i]; X[0] = (B[0] - A[0][1] * X[1] - A[0][2] * X[2]) / A[0][0]; X[1] = (B[1] - A[1][0] * X[0] - A[1][2] * X[2]) / A[1][1]; X[2] = (B[2] - A[2][0] * X[0] - A[2][1] * X[1]) / A[2][2]; g.FillRectangle(brush, 246, 81, 249, 39); g.DrawString("X[0] = (B[0] - A[0][1] * X[1] - A[0][2] * X[2]) / A[0][0];\nX[1] = (B[1] - A[1][0] * X[0] - A[1][2] * X[2]) / A[1][1];\nX[2] = (B[2] - A[2][0] * X[0] - A[2][1] * X[1]) / A[2][2];", this.Font, Brushes.Black, 250, 82); Thread.Sleep(milSec); g.FillRectangle(brush2, 246, 81, 249, 39); g.DrawString("X[0] = (B[0] - A[0][1] * X[1] - A[0][2] * X[2]) / A[0][0];\nX[1] = (B[1] - A[1][0] * X[0] - A[1][2] * X[2]) / A[1][1];\nX[2] = (B[2] - A[2][0] * X[0] - A[2][1] * X[1]) / A[2][2];", this.Font, Brushes.Black, 250, 82); g.FillRectangle(brush, 276, 131, 109, 19); g.DrawString("|MX[0] - X[0]|<e", this.Font, Brushes.Black, 280, 132); Thread.Sleep(milSec); g.FillRectangle(brush2, 276, 131, 109, 19); g.DrawString("|MX[0] - X[0]|<e", this.Font, Brushes.Black, 280, 132); if (Math.Abs(MX[0] - X[0]) < eps) { g.FillRectangle(brush, 276, 161, 109, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 280, 162); Thread.Sleep(milSec); g.FillRectangle(brush2, 276, 161, 109, 19); g.DrawString("вывод x1,x2,x3", this.Font, Brushes.Black, 280, 162); g.FillEllipse(brush, 281, 191, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 310, 192); Thread.Sleep(milSec); g.FillEllipse(brush2, 281, 191, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 310, 192);
label2.Text = "x1 = " + X[0] + Environment.NewLine + "x2 = " + X[1] + Environment.NewLine + "x3 = " + X[2]; MessageBox.Show("Корни системы найдены.", "Решение системы", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } iterations--; } MessageBox.Show("Процесс не сошёлся за заданное количество итераций.", "Решение системы", MessageBoxButtons.OK, MessageBoxIcon.Information); g.FillEllipse(brush, 281, 191, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 310, 192); Thread.Sleep(milSec); g.FillEllipse(brush2, 281, 191, 99, 18); g.DrawString("конец", this.Font, Brushes.Black, 310, 192); }
private void pictureBox1_Click(object sender, EventArgs e) {
}
private void tabPage1_Click(object sender, EventArgs e) {
}
}
}
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.06 сек.) |