|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Блок схемы программыЦель работы
Исследование и реализация методов решения нелинейных уравнений с одним неизвестным.
Задание (1.6) Задание состоит из двух основных частей, а именно: · Отделения корня · Уточнения корня Функция, задающая уравнение:
В свою очередь, из курса математики мы помним, что уточнение корня можно произвести с помощью трёх методов: · Метод деления отрезка пополам · Метод Ньютона (метод касательных) · Метод итераций (простых). Краткая теория Всякое уравнение с одним неизвестным может быть записано в виде: f(х)=0 Предполагаем, что f( х) — непрерывная функция. И задача решения такого уравнения сводится, таким образом, к поиску х, при котором f(х) обращается в нуль. Нелинейные уравнения условно делятся на: — алгебраические уравнения (f(х) - алгебраические функции) — трансцендентные уравнения (тригонометрические, показательные, логарифмические и др.) Методы решений нелинейных уравнений делят на: — прямые (когда корни получаются в виде конечной формулы) — итерационные (методы последовательных приближений) Об итерационных методах и пойдет речь, (это и есть приближенные методы вычислений для решения нелинейных уравнений). Поиск корня с помощью итерационного метода распадается на три этапа: 1) выбор отрезка [ а,b ], на котором имеется корень: по теореме Больцано – Коши, если f (а)*f (в)<0 (т. е. функция на разных концах отрезка имеет разные знаки), то существует с [a,b] и f(c) =0 (это — отделение корня) 2) выяснение того, что корень единственный: (это будет, если f(х) монотонна на [ a,b ], т. е. при f ' (х)>0 — монотонно возрастает, при f ' (х)<0 — монотонно убывает) 3) построение процесса, позволяющего сузить границы выделенного отрезка, то есть позволяющего найти приближенные значения корня с любой заданной точностью (это — уточнение корня)
Ход работы |φ'(x)|<1; φ(x)=f(x)*λ+x; φ’(x)=f’(x)*λ+x; -1<-λ(2sin(x)cos(x)+1)<+1, [0;1]; λ(2sin(x)cos(x)+1)>0, [0;1]; λ>0, [0;1]; λ(2sin(x)cos(x)+1)<2, [0;1]; λ<2/(2sin(x)cos(x)+1), [0;1]; λ<2/(sin(2x)+1), [0;1]; λ<1, [0;1]; положим λ=0,5
Блок схемы программы Отделение корней: Рисунок 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 { public Form1() { InitializeComponent(); }
static int kol = 0; static float[] XL = new float[10];
static float[] XP = new float[10];
float fun(float x) {// функция, задающая уравнение float y = (float)(Math.Pow(Math.Cos(x), 2) - x); return (y); }
float fun1(float x) {//первая производная float y = (-2) * (float)Math.Cos(x) * (float)Math.Sin(x) - 1; return (y); } float fun2(float x) {//вторая производная float y = 2 * ((float)(Math.Pow(Math.Sin(x), 2)) - (float)(Math.Pow(Math.Cos(x), 2))); return (y); } float fun3(float x) {//для метода итераций float Lambda; if (((-2) * (float)Math.Cos(x) * (float)Math.Sin(x) - 1) < 0) Lambda = 0.5f; else Lambda=-0.5f; float y = x + Lambda * ((float)(Math.Pow(Math.Cos(x), 2)) - x); return (y); }
private void button1_Click(object sender, EventArgs e) { //ОТДЕЛЕНИЕ корня label4.Text = ""; int dx = -50; //берем с формы (с полосы прокрутки) // число микросекунд milSec для задержки изображения // тем самым как бы регулируется скорость выполнения int milSec = hScrollBar3.Maximum + 10 - hScrollBar3.Value;
//задаем граф.режим System.Drawing.Pen myPen = System.Drawing.Pens.Green; System.Drawing.Graphics g = System.Drawing.Graphics. FromHwnd(tabPage1.Handle); //РИСОВАНИЕ блок-схемы g.DrawEllipse(myPen, 250 + dx, 10, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 275 + dx, 12); g.DrawLine(myPen, 300 + dx, 30, 300 + dx, 40); g.DrawRectangle(myPen, 250 + dx, 40, 100, 20); g.DrawString("ввод a,b,h", this.Font, Brushes.Black, 265 + dx, 42); g.DrawLine(myPen, 300 + dx, 60, 300 + dx, 70); g.DrawRectangle(myPen, 250 + dx, 70, 100, 35); g.DrawString("x1:=a; x2:=x1+h; \ny1:=f(x1)", this.Font, Brushes.Black, 255 + dx, 72); g.DrawLine(myPen, 300 + dx, 105, 300 + dx, 110); g.DrawRectangle(myPen, 250 + dx, 110, 100, 20); g.DrawString("x2<=b", this.Font, Brushes.Black, 265 + dx, 112); g.DrawLine(myPen, 250 + dx, 120, 240 + dx, 120); g.DrawLine(myPen, 240 + dx, 120, 240 + dx, 140); g.DrawEllipse(myPen, 201 + dx, 140, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 235 + dx, 142); g.DrawLine(myPen, 350 + dx, 120, 370 + dx, 120); g.DrawLine(myPen, 370 + dx, 120, 370 + dx, 140); g.DrawRectangle(myPen, 330 + dx, 140, 100, 20); g.DrawString("y2:=f(x2)", this.Font, Brushes.Black, 345 + dx, 142); g.DrawLine(myPen, 370 + dx, 160, 370 + dx, 170); g.DrawRectangle(myPen, 330 + dx, 170, 100, 20); g.DrawString("y1*y2 < 0", this.Font, Brushes.Black, 345 + dx, 172); g.DrawLine(myPen, 330 + dx, 180, 320 + dx, 180); g.DrawLine(myPen, 320 + dx, 180, 320 + dx, 230); g.DrawLine(myPen, 430 + dx, 180, 440 + dx, 180); g.DrawLine(myPen, 440 + dx, 180, 440 + dx, 200); g.DrawRectangle(myPen, 420 + dx, 200, 100, 20); g.DrawString(" вывод x1, x2", this.Font, Brushes.Black, 435 + dx, 202); g.DrawLine(myPen, 320 + dx, 230, 470 + dx, 230); g.DrawLine(myPen, 470 + dx, 220, 470 + dx, 230); g.DrawLine(myPen, 380 + dx, 230, 380 + dx, 240); g.DrawRectangle(myPen, 330 + dx, 240, 100, 35); g.DrawString("y1:=y2; x1:=x2; \nx2:=x1+h", this.Font, Brushes.Black, 335 + dx, 242); g.DrawLine(myPen, 380 + dx, 275, 380 + dx, 285); g.DrawLine(myPen, 380 + dx, 285, 530 + dx, 285); g.DrawLine(myPen, 530 + dx, 285, 530 + dx, 108); g.DrawLine(myPen, 530 + dx, 108, 300 + dx, 108); //задаем стили закрашивания: brush - красным цветом, // brush2 - назад белым System.Drawing.Brush brush = //gcnew System.Drawing.Brushes.Red; System.Drawing.Brush brush2 = //gcnew System.Drawing.Brushes.White;
float a, b, h; a = float.Parse(textBox1.Text); b = float.Parse(textBox2.Text); h = float.Parse(textBox3.Text); float x1 = a, x2 = x1 + h; float y1 = fun(x1), y2; //Закрашивание Начало и Ввод g.FillEllipse(brush, 250 + dx, 10, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 275 + dx, 12); Thread.Sleep(milSec); //задержка на указанное число микросекунд g.FillEllipse(brush2, 250 + dx, 10, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 275 + dx, 12); g.DrawEllipse(myPen, 250 + dx, 10, 100, 20);
g.FillRectangle(brush, 250 + dx, 40, 100, 20); g.DrawString("ввод a,b,h", this.Font, Brushes.Black, 265 + dx, 42); Thread.Sleep(milSec); g.FillRectangle(brush2, 250 + dx, 40, 100, 20); g.DrawString("ввод a,b,h", this.Font, Brushes.Black, 265 + dx, 42); g.DrawRectangle(myPen, 250 + dx, 40, 100, 20); //Закрашивание x1=a... g.FillRectangle(brush, 250 + dx, 70, 100, 35); g.DrawString("x1:=a; x2:=x1+h; \ny1:=f(x1)", this.Font, Brushes.Black, 255 + dx, 72); Thread.Sleep(milSec); g.FillRectangle(brush2, 250 + dx, 70, 100, 35); g.DrawString("x1:=a; x2:=x1+h; \ny1:=f(x1)", this.Font, Brushes.Black, 255 + dx, 72); g.DrawRectangle(myPen, 250 + dx, 70, 100, 35);
while (x2 <= b) { //Закрашивание условия x2<=b g.FillRectangle(brush, 250 + dx, 110, 100, 20); g.DrawString("x2<=b", this.Font, Brushes.Black, 265 + dx, 112); Thread.Sleep(milSec); g.FillRectangle(brush2, 250 + dx, 110, 100, 20); g.DrawString("x2<=b", this.Font, Brushes.Black, 265 + dx, 112); g.DrawRectangle(myPen, 250 + dx, 110, 100, 20);
//Закрашивание y2:=f(x2) g.FillRectangle(brush, 330 + dx, 140, 100, 20); g.DrawString("y2:=f(x2)", this.Font, Brushes.Black, 345 + dx, 142); Thread.Sleep(milSec); g.FillRectangle(brush2, 330 + dx, 140, 100, 20); g.DrawString("y2:=f(x2)", this.Font, Brushes.Black, 345 + dx, 142); g.DrawRectangle(myPen, 330 + dx, 140, 100, 20);
y2 = fun(x2);
//закрашивание условия y1*y2<0 g.FillRectangle(brush, 330 + dx, 170, 100, 20); g.DrawString("y1*y2 < 0", this.Font, Brushes.Black, 345 + dx, 172); Thread.Sleep(milSec); g.FillRectangle(brush2, 330 + dx, 170, 100, 20); g.DrawString("y1*y2 < 0", this.Font, Brushes.Black, 345 + dx, 172); g.DrawRectangle(myPen, 330 + dx, 170, 100, 20);
if (y1 * y2 < 0) { label4.Text = label4.Text + x1.ToString() + " " + x2.ToString() + "\n"; kol++; XL[kol] = x1; XP[kol] = x2; //Закрашивание "вывод x1,x2" g.FillRectangle(brush, 420 + dx, 200, 100, 20); g.DrawString(" вывод x1, x2", this.Font, Brushes.Black, 435 + dx, 202); Thread.Sleep(milSec); g.FillRectangle(brush2, 420 + dx, 200, 100, 20); g.DrawString(" вывод x1, x2", this.Font, Brushes.Black, 435 + dx, 202); g.DrawRectangle(myPen, 420 + dx, 200, 100, 20); // окно диалога (для вывода корня, // остановки программы и запроса на продолжение) MessageBox.Show("Следующий корень?", " Запрос ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
} //закрашивание y1:=y2... g.FillRectangle(brush, 330 + dx, 240, 100, 35); g.DrawString("y1:=y2; x1:=x2; \nx2:=x1+h", this.Font, Brushes.Black, 335 + dx, 242); Thread.Sleep(milSec); g.FillRectangle(brush2, 330 + dx, 240, 100, 35); g.DrawString("y1:=y2; x1:=x2; \nx2:=x1+h", this.Font, Brushes.Black, 335 + dx, 242); g.DrawRectangle(myPen, 330 + dx, 240, 100, 35);
y1 = y2; x1 = x2; x2 = x1 + h; } //Закрашивание "конец" g.FillEllipse(brush, 201 + dx, 140, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 235 + dx, 142); Thread.Sleep(milSec); g.FillEllipse(brush2, 201 + dx, 140, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 235 + dx, 142); g.DrawEllipse(myPen, 201 + dx, 140, 100, 20);
}
private void button2_Click(object sender, EventArgs e) { //метод БИСЕКЦИЙ label7.Text = ""; //РИСОВАНИЕ блок-схемы System.Drawing.Pen myPen = System.Drawing.Pens.Green; System.Drawing.Graphics g = System.Drawing.Graphics. FromHwnd(tabPage2.Handle); g.DrawEllipse(myPen, 250, 10, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 275, 12); g.DrawLine(myPen, 300, 30, 300, 40); g.DrawRectangle(myPen, 250, 40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265, 42); g.DrawLine(myPen, 300, 60, 300, 70); g.DrawRectangle(myPen, 250, 70, 100, 20); g.DrawString("c:=(a+b)/2", this.Font, Brushes.Black, 265, 72); g.DrawLine(myPen, 300, 90, 300, 100); g.DrawRectangle(myPen, 250, 100, 100, 20); g.DrawString("f(a)*f(c)<0", this.Font, Brushes.Black, 265, 102); g.DrawLine(myPen, 250, 110, 240, 110); g.DrawLine(myPen, 240, 110, 240, 130); g.DrawRectangle(myPen, 210, 130, 90, 20); g.DrawString("a:=c", this.Font, Brushes.Black, 230, 132); g.DrawLine(myPen, 350, 110, 360, 110); g.DrawLine(myPen, 360, 110, 360, 130); g.DrawRectangle(myPen, 310, 130, 90, 20); g.DrawString("b:=c", this.Font, Brushes.Black, 330, 132); g.DrawLine(myPen, 355, 150, 355, 170); g.DrawLine(myPen, 255, 150, 255, 170); g.DrawLine(myPen, 255, 170, 355, 170); g.DrawLine(myPen, 305, 170, 305, 180); g.DrawRectangle(myPen, 250, 180, 100, 20); g.DrawString(" |f(c)|>E", this.Font, Brushes.Black, 265, 182); g.DrawLine(myPen, 350, 190, 410, 190); g.DrawLine(myPen, 410, 190, 410, 65); g.DrawLine(myPen, 410, 65, 300, 65); g.DrawLine(myPen, 250, 190, 240, 190); g.DrawLine(myPen, 240, 190, 240, 210); g.DrawRectangle(myPen, 190, 210, 100, 20); g.DrawString("вывод c ", this.Font, Brushes.Black, 215, 212); g.DrawLine(myPen, 240, 230, 240, 240); g.DrawEllipse(myPen, 190, 240, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 215, 242);
timer1.Enabled = false;
System.Drawing.Brush brush = //gcnew System.Drawing.Brushes.Red; System.Drawing.Brush brush2 = //gcnew System.Drawing.Brushes.White; int milSec = hScrollBar4.Maximum + 10 - hScrollBar4.Value;
for (int i = 1; i <= kol; i++) { //закрашивание "начало " "ввод a,b,E" g.FillEllipse(brush, 250, 10, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 275, 12); Thread.Sleep(milSec); g.FillEllipse(brush2, 250, 10, 100, 20); g.DrawString("начало", this.Font, Brushes.Black, 275, 12); g.DrawEllipse(myPen, 250, 10, 100, 20); g.FillRectangle(brush, 250, 40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265, 42); Thread.Sleep(milSec); g.FillRectangle(brush2, 250, 40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265, 42); g.DrawRectangle(myPen, 250, 40, 100, 20);
textBox4.Text = XL[i].ToString(); textBox5.Text = XP[i].ToString(); float eps = float.Parse(textBox6.Text); float a = XL[i]; float b = XP[i]; float c;
do {//закрашивание c:=(a+b)/2; g.FillRectangle(brush, 250, 70, 100, 20); g.DrawString("c:=(a+b)/2", this.Font, Brushes.Black, 265, 72); Thread.Sleep(milSec); g.FillRectangle(brush2, 250, 70, 100, 20); g.DrawString("c:=(a+b)/2", this.Font, Brushes.Black, 265, 72); g.DrawRectangle(myPen, 250, 70, 100, 20); c = (a + b) / 2; //закрашивание условия f(a)*f(c)<0 g.FillRectangle(brush, 250, 100, 100, 20); g.DrawString("f(a)*f(c)<0", this.Font, Brushes.Black, 265, 102); Thread.Sleep(milSec); g.FillRectangle(brush2, 250, 100, 100, 20); g.DrawString("f(a)*f(c)<0", this.Font, Brushes.Black, 265, 102); g.DrawRectangle(myPen, 250, 100, 100, 20);
if (fun(a) * fun(c) < 0) { b = c; //закрашивание b:=c g.FillRectangle(brush, 310, 130, 90, 20); g.DrawString("b:=c", this.Font, Brushes.Black, 330, 132); Thread.Sleep(milSec); g.FillRectangle(brush2, 310, 130, 90, 20); g.DrawString("b:=c", this.Font, Brushes.Black, 330, 132); g.DrawRectangle(myPen, 310, 130, 90, 20);
} else { a = c; //закрашивание a:=c g.FillRectangle(brush, 210, 130, 90, 20); g.DrawString("a:=c", this.Font, Brushes.Black, 230, 132); Thread.Sleep(milSec); g.FillRectangle(brush2, 210, 130, 90, 20); g.DrawString("a:=c", this.Font, Brushes.Black, 230, 132); g.DrawRectangle(myPen, 210, 130, 90, 20); }
//закрашивание |f(с)|>E g.FillRectangle(brush, 250, 180, 100, 20); g.DrawString(" |f(c)|>E", this.Font, Brushes.Black, 265, 182); Thread.Sleep(milSec); g.FillRectangle(brush2, 250, 180, 100, 20); g.DrawString(" |f(c)|>E", this.Font, Brushes.Black, 265, 182); g.DrawRectangle(myPen, 250, 180, 100, 20); } while (Math.Abs(a - b) > eps);
label7.Text = label7.Text + "Корень=" + c.ToString() + "\n"; //закрашивание "вывод c" g.FillRectangle(brush, 190, 210, 100, 20); g.DrawString("вывод c ", this.Font, Brushes.Black, 215, 212); Thread.Sleep(milSec); g.FillRectangle(brush2, 190, 210, 100, 20); g.DrawString("вывод c ", this.Font, Brushes.Black, 215, 212); g.DrawRectangle(myPen, 190, 210, 100, 20); //закрашивание конец g.FillEllipse(brush, 190, 240, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 215, 242); Thread.Sleep(milSec); g.FillEllipse(brush2, 190, 240, 100, 20); g.DrawString("конец", this.Font, Brushes.Black, 215, 242); g.DrawEllipse(myPen, 190, 240, 100, 20);
if (i < kol) { MessageBox.Show( "Следующий корень?", " Запрос ", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
}
}
static bool myColor = false;
private void timer1_Tick_1(object sender, EventArgs e) { // водсветка (мерцание) для ввода точности у метода бисекций if (myColor == false) { label8.BackColor=BackColor; myColor = true; } else { label8.BackColor = BackColor; myColor = false; } }
private void button3_Click(object sender, EventArgs e) { //метод НЬЮТОНА label10.Text=""; //РИСОВАНИЕ блок-схемы System.Drawing.Pen myPen = System.Drawing.Pens.Green; System.Drawing.Graphics g = System.Drawing.Graphics. FromHwnd(tabPage3.Handle); g.DrawEllipse(myPen,250,10,100,20); g.DrawString("начало", this.Font, Brushes.Black, 275,12); g.DrawLine(myPen,300,30,300,40); g.DrawRectangle(myPen, 250,40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265,42); g.DrawLine(myPen,300,60,300,70); g.DrawRectangle(myPen, 250,70, 100, 20); g.DrawString("f(a)*f''(a)>0", this.Font, Brushes.Black, 265,72); g.DrawLine(myPen,250,80,240,80); g.DrawLine(myPen,240,80,240,100); g.DrawRectangle(myPen,201,100,100,20); g.DrawString("c:=b", this.Font, Brushes.Black, 235,102); g.DrawLine(myPen,350,80,370,80); g.DrawLine(myPen,370,80,370,100); g.DrawRectangle(myPen, 330,100, 100, 20); g.DrawString("c:=a", this.Font, Brushes.Black, 345,102); g.DrawLine(myPen,240,120,240,140); g.DrawLine(myPen,370,120,370,140); g.DrawLine(myPen,240,140,370,140); g.DrawLine(myPen,300,140, 300,150);
g.DrawLine(myPen,300,150,300,160); g.DrawRectangle(myPen, 250,160, 100, 20); g.DrawString("|f(c)|>E", this.Font, Brushes.Black, 265,162); g.DrawLine(myPen,250,170,240,170); g.DrawLine(myPen,240,170,240,190); g.DrawRectangle(myPen,201,190,100,20); g.DrawString("вывод c", this.Font, Brushes.Black, 235,192); g.DrawLine(myPen,350,170,370,170); g.DrawLine(myPen,370,170,370,190); g.DrawRectangle(myPen, 330,190, 100, 20); g.DrawString("c:=c-f(c)/f'(c)", this.Font, Brushes.Black, 345,192); g.DrawLine(myPen,240,210,240,230); g.DrawLine(myPen,370,210,370,230); g.DrawLine(myPen,370,230, 440, 230); g.DrawLine(myPen,440, 230, 440, 150); g.DrawLine(myPen,440, 150, 300,150); g.DrawEllipse(myPen,200,230,100,20); g.DrawString("конец", this.Font, Brushes.Black,230,232);
int milSec= hScrollBar1.Maximum+10 - hScrollBar1.Value;
for (int i=1; i<=kol; i++) { //закрашивание"начало" System.Drawing.Brush brush= Brushes.Red; g.FillEllipse(brush,250,10,100,20); g.DrawString("начало", this.Font, Brushes.Black, 275,12); //п а у з а на указанные миллисекунды //System.Threading.Thread. Thread.Sleep(milSec); System.Drawing.Brush brush2= Brushes.White; g.FillEllipse(brush2,250,10,100,20); g.DrawString("начало", this.Font, Brushes.Black, 275,12); g.DrawEllipse(myPen,250,10,100,20); //закрашивание "ввод" g.FillRectangle(brush, 250,40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265,42); Thread.Sleep(milSec); g.FillRectangle(brush2, 250,40, 100, 20); g.DrawRectangle(myPen, 250,40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265,42);
textBox8.Text=XL[i].ToString(); textBox9.Text=XP[i].ToString(); float eps=float.Parse(textBox7.Text); float a=XL[i]; float b=XP[i]; float c; //закрашивание "условие f(a)*f''(a)>0 " g.FillRectangle(brush, 250,70, 100, 20); g.DrawString("f(a)*f''(a)>0", this.Font, Brushes.Black, 265,72); Thread.Sleep(milSec); g.FillRectangle(brush2, 250,70, 100, 20); g.DrawRectangle(myPen, 250,70, 100, 20); g.DrawString("f(a)*f''(a)>0", this.Font, Brushes.Black, 265,72);
if (fun(a)*fun2(a)>0) {c=a; //закрашивание "c=a" g.FillRectangle(brush, 330,100, 100, 20); g.DrawString("c:=a", this.Font, Brushes.Black, 345,102); Thread.Sleep(milSec); g.FillRectangle(brush2, 330,100, 100, 20); g.DrawString("c:=a", this.Font, Brushes.Black, 345,102); g.DrawRectangle(myPen, 330,100, 100, 20); } else {c=b; //закрашивание "c=a" g.FillRectangle(brush,201,100,100,20); g.DrawString("c:=b", this.Font, Brushes.Black, 235,102); Thread.Sleep(milSec); g.FillRectangle(brush2,201,100,100,20); g.DrawString("c:=b", this.Font, Brushes.Black, 235,102); g.DrawRectangle(myPen,201,100,100,20); } do {// закрашивание |f(c)|>E g.FillRectangle(brush, 250,160, 100, 20); g.DrawString("|f(c)|>E", this.Font, Brushes.Black, 265,162); Thread.Sleep(milSec); g.FillRectangle(brush2, 250,160, 100, 20); g.DrawString("|f(c)|>E", this.Font, Brushes.Black, 265,162); g.DrawRectangle(myPen, 250,160, 100, 20);
//закрашивание c:=c-f(c)/f'(c) g.FillRectangle(brush, 330,190, 100, 20); g.DrawString("c:=c-f(c)/f'(c)", this.Font, Brushes.Black, 345,192); Thread.Sleep(milSec); g.FillRectangle(brush2, 330,190, 100, 20); g.DrawString("c:=c-f(c)/f'(c)", this.Font, Brushes.Black, 345,192); g.DrawRectangle(myPen, 330,190, 100, 20);
c=c-fun(c)/fun1(c);
} while (Math.Abs(fun(c))>eps); //закрашивание "вывод с" g.FillRectangle(brush,201,190,100,20); g.DrawString("вывод c", this.Font, Brushes.Black, 235,192); Thread.Sleep(milSec); g.FillRectangle(brush2,201,190,100,20); g.DrawString("вывод c", this.Font, Brushes.Black, 235,192); g.DrawRectangle(myPen,201,190,100,20);
label10.Text=label10.Text+"Корень="+c.ToString()+"\n";
//закрашивание "конец" g.FillEllipse(brush,200,230,100,20); g.DrawString("конец", this.Font, Brushes.Black,230,232); Thread.Sleep(milSec); g.FillEllipse(brush2,200,230,100,20); g.DrawString("конец", this.Font, Brushes.Black,230,232); g.DrawEllipse(myPen,200,230,100,20);
if (i<kol) { MessageBox.Show( "Следующий корень?"," Запрос ", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
}
}
private void button4_Click(object sender, EventArgs e) { //метод ИТЕРАЦИЙ label14.Text="";
//РИСОВАНИЕ блок-схемы System.Drawing.Pen myPen = System.Drawing.Pens.Green; System.Drawing.Graphics g = System.Drawing.Graphics. FromHwnd(tabPage4.Handle); g.DrawEllipse(myPen,250,10,100,20); g.DrawString("начало", this.Font, Brushes.Black, 275,12); g.DrawLine(myPen,300,30,300,40); g.DrawRectangle(myPen, 250,40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265,42); g.DrawLine(myPen,300,60,300,80); // g.DrawLine(myPen,300,80,300,100); g.DrawRectangle(myPen, 250,80, 100, 20); g.DrawString("с:=(a+b)/2", this.Font, Brushes.Black, 265,82); g.DrawLine(myPen,300,100,300,140);
g.DrawRectangle(myPen, 250,140, 100, 20); g.DrawString("|f(c)|>E", this.Font, Brushes.Black, 265,142); g.DrawLine(myPen,250,150,240,150); g.DrawLine(myPen,240,150,240,170); g.DrawRectangle(myPen,201,170,100,20); g.DrawString("вывод c", this.Font, Brushes.Black, 235,172); g.DrawLine(myPen,350,150,370,150); g.DrawLine(myPen,370,150,370,170); g.DrawRectangle(myPen, 330,170, 100, 20); g.DrawString("c:=f3(c) ", this.Font, Brushes.Black, 345,172); g.DrawLine(myPen,240,190,240,210); g.DrawLine(myPen,370,190,370,210); g.DrawLine(myPen,370,210, 440, 210); g.DrawLine(myPen,440, 210, 440, 130); g.DrawLine(myPen,440, 130, 300,130); g.DrawEllipse(myPen,200,210,100,20); g.DrawString("конец", this.Font, Brushes.Black,230,212); int milSec= hScrollBar2.Maximum+10 - hScrollBar2.Value; System.Drawing.Brush brush= Brushes.Red; System.Drawing.Brush brush2= Brushes.White;
for (int i=1; i<=kol; i++) { //закрашивание начало g.FillEllipse(brush,250,10,100,20); g.DrawString("начало", this.Font, Brushes.Black, 275,12); Thread.Sleep(milSec); g.FillEllipse(brush2,250,10,100,20); g.DrawString("начало", this.Font, Brushes.Black, 275,12); g.DrawEllipse(myPen,250,10,100,20); //закрашивание ввод a,b,E g.FillRectangle(brush, 250,40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265,42); Thread.Sleep(milSec); g.FillRectangle(brush2, 250,40, 100, 20); g.DrawString("ввод a,b,E", this.Font, Brushes.Black, 265,42); g.DrawRectangle(myPen, 250,40, 100, 20); // закрашивание c:=(a+b)/2 g.FillRectangle(brush, 250,80, 100, 20); g.DrawString("с:=(a+b)/2", this.Font, Brushes.Black, 265,82); Thread.Sleep(milSec); g.FillRectangle(brush2, 250,80, 100, 20); g.DrawString("с:=(a+b)/2", this.Font, Brushes.Black, 265,82); g.DrawRectangle(myPen, 250,80, 100, 20);
textBox11.Text=XL[i].ToString(); textBox12.Text=XP[i].ToString(); float eps=float.Parse(textBox10.Text); float a=XL[i]; float b=XP[i]; float c; c=(a+b)/2; do { // закрашивание условия f(c)>E g.FillRectangle(brush, 250,140, 100, 20); g.DrawString("|f(c)|>E", this.Font, Brushes.Black, 265,142); Thread.Sleep(milSec); g.FillRectangle(brush2, 250,140, 100, 20); g.DrawString("|f(c)|>E", this.Font, Brushes.Black, 265,142); g.DrawRectangle(myPen, 250,140, 100, 20);
c=fun3(c);
//закрашивание c:=f3(c) g.FillRectangle(brush, 330,170, 100, 20); g.DrawString("c:=f3(c) ", this.Font, Brushes.Black, 345,172); Thread.Sleep(milSec); g.FillRectangle(brush2, 330,170, 100, 20); g.DrawString("c:=f3(c) ", this.Font, Brushes.Black, 345,172); g.DrawRectangle(myPen, 330,170, 100, 20);
} while (Math.Abs(fun(c))>eps); //закрашивание вывод С g.FillRectangle(brush,201,170,100,20); g.DrawString("вывод c", this.Font, Brushes.Black, 235,172); Thread.Sleep(milSec); g.FillRectangle(brush2,201,170,100,20); g.DrawString("вывод c", this.Font, Brushes.Black, 235,172); g.DrawRectangle(myPen,201,170,100,20); //закрашивание Конец g.FillEllipse(brush,200,210,100,20); g.DrawString("конец", this.Font, Brushes.Black,230,212); Thread.Sleep(milSec); g.FillEllipse(brush2,200,210,100,20); g.DrawString("конец", this.Font, Brushes.Black,230,212); g.DrawEllipse(myPen,200,210,100,20); label14.Text=label14.Text+"Корень="+c.ToString()+"\n"; if (i<kol) { MessageBox.Show( "Следующий корень?"," Запрос ", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
}
}
private void tabPage1_Click(object sender, EventArgs e) {
} } }
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.126 сек.) |