microbik.ru
1
Министерство образования науки РФ.

Высшего профессионального учреждения

Тверского государственный технический университет.

Кафедра программного обеспечения.

Методы вычислений
Лабораторная работа №6

1 вариант

выполнил

студент группы ПИН 1106

Александренков А.Ю.

проверил

Грязнов Е. Н.

Виноградов С. Ю.
Тверь,2012

Задание:

Дополните лабораторную работу №4 реализацией следующих методов:

1. Метод простых итераций
2. Метод Стеффенсона
3. Метод Рыбакова

Отчет оформляется подобно отчету по л/р №4.

Листинг Form

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;
namespace ClassLibrary

{

public partial class About4and6 : Form

{

double a = 0, b = 0, h = 0, M=0;

void metod()

{

try

{

a = Convert.ToDouble(textBox1.Text);

if (comboBox1.SelectedIndex == 1)

{ b = 0; }

else

{

b = Convert.ToDouble(textBox2.Text);

if (a > b) { MessageBox.Show("Проверь >> a
}

h = Convert.ToDouble(textBox4.Text);

if (h > 0 ) { h = Convert.ToDouble(textBox4.Text); }

else

{ MessageBox.Show("Проверь h ! Присвоенно h=0.01 по умолчанию !"); h = 0.01; textBox3.Text = Convert.ToString("0,01"); }

if (h > 0.9 || a > 999999999 || b > 99999999 || a < -999999999 || b < -9999999999 || M>99999999 ) { MessageBox.Show("Проверь вводисость значений !"); a = 1; b = 2; h = 0.01; MessageBox.Show("Сброс по умолчанию a=1 b=2 h=0,01 !"); }

}

catch (Exception exc)

{

MessageBox.Show(exc.Message);

}
}

public About4and6()

{

InitializeComponent();

Text = "Alex #4,#6 ";

comboBox1.SelectedIndex = 0;

}
private void button4_Click(object sender, EventArgs e)

{

if (comboBox1.SelectedIndex == 0)

{

metod();

textBox3.Text = Korn.Dihotomi(a, b, h).ToString();

}

else if (comboBox1.SelectedIndex == 1)

{

metod();

textBox3.Text = Korn.njuton(a, h).ToString();

}

else if (comboBox1.SelectedIndex == 2)

{

metod();

textBox3.Text = Korn.Secant(a, b, h).ToString();

}

else if (comboBox1.SelectedIndex == 3)

{

metod();

textBox3.Text=Korn.iteraci(a,b,h).ToString();//простых итераций

}

else if (comboBox1.SelectedIndex == 4)

{

metod();

textBox3.Text = Korn.steffen(a,b,h).ToString();//Стеффенсона

}

else if (comboBox1.SelectedIndex == 5)

{

try

{

M = Convert.ToDouble(textBox5.Text);

if (M <= 0)

{

MessageBox.Show("m должно быть больше 0. m=1"); M = 1;

}

}

catch { MessageBox.Show("Проверь M"); }

metod();

textBox3.Text =Korn.ribakova(a,b,h,M).ToString();//Рыбакова

}

}
private void button1_Click(object sender, EventArgs e)

{

try

{

System.Diagnostics.Process proc = new System.Diagnostics.Process();
string Расчет;

//задание директории в которой располагается изначальная программа

Расчет = System.Windows.Forms.Application.StartupPath.ToString();
//задание параметров запускаемой программы

proc.StartInfo.FileName = Расчет + "\\4.docx";

proc.StartInfo.WorkingDirectory = Расчет + "\\4.docx";
//запуск программы

proc.Start();

}

catch

{

MessageBox.Show("Ненайден файл !");

}

}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

if (comboBox1.Text == "Ньютона")

{

textBox2.Clear();

textBox2.Enabled = false;

}

else

{

textBox2.Enabled = true;

}

if (comboBox1.Text == "Рыбакова")

{

textBox5.Text = ("1");

textBox5.Enabled = true;

}

else

{

textBox5.Clear();

textBox5.Enabled = false;

}

}
private void button2_Click(object sender, EventArgs e)

{

try

{

System.Diagnostics.Process proc = new System.Diagnostics.Process();
string Расчет;

//задание директории в которой располагается изначальная программа

Расчет = System.Windows.Forms.Application.StartupPath.ToString();
//задание параметров запускаемой программы

proc.StartInfo.FileName = Расчет + "\\6.docx";

proc.StartInfo.WorkingDirectory = Расчет + "\\6.docx";
//запуск программы

proc.Start();

}

catch

{

MessageBox.Show("Ненайден файл !");

}

}

}

}
Листинг dll.
///

/// Метод простых итераций

///


///
Начальное значение


///
Точность


/// Корень

public static double iteraci(double a, double b, double h)

{

double x;

do

{

x = a - (Fun(a) * (b - a)) / (Fun(b) - Fun(a));

if (Fun(a) * Fun(x) < 0)

b = x;

else

a = x;
}

while ((Math.Abs(Fun(x))) >= h);

return x;

}
///

/// Метод Стеффенсона

///


///
Начальное значение


///
Точность


/// Корень

public static double steffen(double a, double b, double h)

{

double x_1 = (a + b) / 2;
double x_2 = x_1 - (Fun(x_1) * (Fun(x_1) / (Fun(x_1 + Fun(x_1)) - Fun(x_1))));

while (x_2 - x_1 > h)

{
x_1 = x_2;

if (Fun(x_1 - Fun(x_1)) < 0)

{

x_2 = 0;

}

else

{

x_2 = x_1 - (Fun(x_1) * (Fun(x_1) / (Fun(x_1 + Fun(x_1)) - Fun(x_1))));

}

}

return x_2;

}

///

/// Метод Рыбакова

///


///
Начальное значение отрезка


///
Конечное значение отрезка


///
Шаг


///
Константа


/// Корень

public static double ribakova(double a, double b, double h, double M)

{

double x = 0;

double c = ((Fun(a) - Fun(a + h)) / h) * (-1);

if (M >= c)

{

x = a;

x = x + (Math.Abs(Fun(x)) / M);
while (Fun(x) > h)

{

a = x;

x = x + (Math.Abs(Fun(x)) / M);

if (x >= b)

{

break;

}

}

}
else

{

x = 0;

}

return x;

}

}

}


Метод

Правая граница

Левая граница

h

Результат

m

Простых итераций

1

2

0,01

1,15916262728267




Стеффенсона

1

2

0,01

1,26072240210869




Рыбакова

1

2

0,01

1,0914709848079

1

Простых итераций

2

4

0,01

1,18650003305494




Стеффенсона

2

4

0,01

0,98294631896479




Рыбакова

2

4

0,01

4,65493689174889

2