Министерство образования науки
ГОУВПО ТвГТУ
Кафедра “Программное обеспечение”.
Лабораторная работа № 2
По курсу “Методы вычисления”
Вариант 11
Выполнял студент
Новожилов И.Ю.
Проверил Виноградов С.Ю.
Тверь 2012
-
Написать программу, реализующую численное интегрирование функции одной переменной методом (одним из трех - по вариантам) левых прямоугольников, правых прямоугольников, прямоугольников.
-
Написать программу, реализующую численное интегрирование функции одной переменной методом трапеций.
-
Написать программу, реализующую численное интегрирование функции одной переменной методом Симпсона.
Функция: 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
|
Метод Симпсона наиболее точно вычисляет интеграл. |