uzluga.ru
добавить свой файл
Министерство образования науки

ГОУВПО ТвГТУ

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


Лабораторная работа № 2

По курсу “Методы вычисления”

Вариант 11


Выполнял студент

Новожилов И.Ю.

Проверил Виноградов С.Ю.


Тверь 2012

  1. Написать программу, реализующую численное интегрирование функции одной переменной методом (одним из трех - по вариантам) левых прямоугольников, правых прямоугольников, прямоугольников.

  2. Написать программу, реализующую численное интегрирование функции одной переменной методом трапеций.

  3. Написать программу, реализующую численное интегрирование функции одной переменной методом Симпсона.

Функция: y = sin( x );


Листинг


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 Integrirowanie

{

///

/// class описывающий интерфейс программы

///


public partial class Form1 : Form

{

double error;

public Form1()

{

InitializeComponent();

}


private void button1_Click(object sender, EventArgs e)

{

try

{

// Объявдение переменных

double a = Convert.ToDouble(atxt.Text);

double b = Convert.ToDouble(btxt.Text);

double h = Convert.ToDouble(htxt.Text);

error = b - a;

// проверка на ошибки

if (h <= 0)

{

MessageBox.Show("h должен быть больше 0");

return;

}

if (a > b)

{

MessageBox.Show("a должен быть меньше b");

return;

}

if (h > error)

{

MessageBox.Show("h должен быть не больше интегрированного промежутка");

return;

}

// выбор способа интегрирования

if (MPP.Checked == true)

{

textBox4.Text = operation.RightPram(h, a, b).ToString();

return;

}

if (MT.Checked == true)

{

textBox4.Text = operation.Trapezija(h, a, b).ToString();

return;

}

if (FS.Checked == true)

{

textBox4.Text = operation.Simp(h, a, b).ToString();

return;

}

}

catch (Exception exc)

{

MessageBox.Show(exc.Message);

}

}


private void button2_Click(object sender, EventArgs e)

{

try

{

System.Diagnostics.Process proc = new System.Diagnostics.Process();


string otchet1;

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

otchet1 = System.Windows.Forms.Application.StartupPath.ToString();


//задание параметров запускаемой программы

proc.StartInfo.FileName = otchet1 + "\\otchet1.docx";

proc.StartInfo.WorkingDirectory = otchet1 + "\\otchet1.docx";


//запуск программы

proc.Start();

}

catch

{

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

}

}


private void Form1_Load(object sender, EventArgs e)

{


}

///

/// Скрытие элементов

///


///

///

private void Mg_CheckedChanged(object sender, EventArgs e)

{

if (Mg.Checked == true)

{

htxt.Visible = false;

hlable.Visible = false;

}

}

///

/// Показ элементов

///


///

///

private void FS_CheckedChanged(object sender, EventArgs e)

{

if (FS.Checked == true)

{

htxt.Visible = true;

hlable.Visible = true;

}

}

///

/// Показ элементов

///


///

///

private void MT_CheckedChanged(object sender, EventArgs e)

{

if (MT.Checked == true)

{

htxt.Visible = true;

hlable.Visible = true;

}

}

///

/// Показ элементов

///


///

///

private void MPP_CheckedChanged(object sender, EventArgs e)

{

if (MPP.Checked == true)

{

htxt.Visible = true;

hlable.Visible = true;

}

}

///

/// Показ элементов

///


///

///

private void f_3_8_CheckedChanged(object sender, EventArgs e)

{

if (f_3_8.Checked == true)

{

htxt.Visible = true;

hlable.Visible = true;

}

}

///

/// Показ элементов

///


///

///

private void Ua_CheckedChanged(object sender, EventArgs e)

{

if (Ua.Checked == true)

{

htxt.Visible = true;

hlable.Visible = true;

}

}

}


/////////////////////////////////////////////////////////////////////////////

DLL /////////////////////////////////////////////////////////////////////////////


///

/// Class для реализации методов интегрирования

///


class operation

{

///

/// Функция по которой вычисляется определенный интеграл (Sin(x))

///


///
аргумент функции


/// значение функции

public static double getValue(double arg)

{

return Math.Sin(arg);

}

///

/// Метод правых прямоугольников

///


///
шаг


///
начальная точка


///
конечная точка


/// ответ

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

{

double res = 0;

for (double i = b; i > a; i -= h)

res += getValue(i) * h;

return res;

}


///

///

///


///
шаг


///
начальная точка


///
конечная точка


/// ответ

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

{

double res = 0;

for (double i = a; i < b; i += h)

{

res += (h / 6) * (getValue(i) + 4 * getValue((i + i + h) / 2) + getValue(i + h));

}

return res;

}

///

/// Метод трапеции

///


///
число точек


///
начальная точка


///
конечная точка


/// ответ

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

{


double res = 0;

for (double i = a; i < b; i += h)

res += h * ((getValue(i) + (getValue(i) + h)) / 2);

return res;

}

}


}


Вывод




Шаг 0,01

Абсолютная погрешность

Шаг 0, 1

Абсолютная погрешность

Точное значение

Метод прямоугольников

1,004195

0,004195

1,049421

0,049421

1

Метод трапеций

1,002045

0,002045

1,058363

0,058363

1

Метод Симпсона

0,999203

-0,000797

1,029199

0,029199

1



Метод Симпсона наиболее точно вычисляет интеграл.