АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Блок схемы для каждого метода решения

Читайте также:
  1. II. Документация как элемент метода бухгалтерского учета
  2. II. Способы решения детьми игровых задач
  3. II. Способы решения детьми игровых задач
  4. Аксонометрические схемы систем водоснабжения
  5. Алгебраическое описание метода
  6. Алгоритм метода ветвей и границ
  7. Алгоритм рационального принятия решения.
  8. Алгоритм решения задачи
  9. Анализ классической схемы равновесия.
  10. Анализ решения оптимизационной задачи
  11. Анализ решения № 345 от 08 февраля 2012г. (Приложение 1)
  12. Анализ стандарта по методам статистического контроля и регулирования техпроцессов

Цель работы

 

Исследование и реализация методов решения систем линейных алгебраических уравнений.

 

Задание (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 сек.)