metody_vychisleniy_3x

advertisement
Министерство образования науки РФ.
Высшего профессионального учреждения
Тверского государственный технический университет.
Кафедра программного обеспечения.
Методы вычислений
Лабораторная работа №3
3 вариант
выполнил
студент группы ПИН 1106
Бычков В.С.
проверил
Грязнов Е. Н.
Виноградов С. Ю.
Тверь,2012
1. Напишите программу, реализующую численное интегрирование функции одной
переменной по формуле «3/8».
2. Напишите программу, реализующую численное интегрирование функции одной
переменной по формуле Уэддля.
3. Напишите программу, реализующую численное интегрирование функции одной
переменной методом Гаусса для двух точек.
4. Дополните сравнительную таблицу точности численного интегрирования, составленную в
ходе предыдущей лабораторной работы, результатами расчета по перечисленным выше
методам. Сравните результаты интегрирования с точным значением интеграла. Сделайте
выводы.
Замечания по реализации:
Реализация методов численного интегрирования должна заключаться в отдельном
статическом классе. Задание границ и шага интегрирования должно осуществляться через
пользовательский интерфейс. В качестве подынтегральной функции выбирается функция
из списка ниже по варианту.
Список функций
1.
2.
3.
4.
5.
y = sin( x );
y = x – sin( x ) – 0.25;
y = e ^ x;
y = 1 / ln( x );
y = x;
Листинг Form
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
ClassLibrary;
namespace Методы_вычесления
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
double a = Convert.ToDouble(textBoxA.Text);
double b = Convert.ToDouble(textBoxB.Text);
if (Convert.ToDouble(textBoxH.Text) >= 0)
{
double h = Convert.ToDouble(textBoxH.Text);
textBoxRes.Text = Metody.Gausa(h, a, b).ToString();
}
else
{
MessageBox.Show("Шаг не может быть отрецательным");
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
double a = Convert.ToDouble(textBoxA.Text);
double b = Convert.ToDouble(textBoxB.Text);
if (Convert.ToDouble(textBoxH.Text) >= 0)
{
double h = Convert.ToDouble(textBoxH.Text);
textBoxRes.Text = Metody.TriWosmyh(h, a, b).ToString();
}
else
{
MessageBox.Show("Шаг не может быть отрецательным");
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
private void button3_Click(object sender, EventArgs e)
{
try
{
double a = Convert.ToDouble(textBoxA.Text);
double b = Convert.ToDouble(textBoxB.Text);
if (Convert.ToDouble(textBoxH.Text) >= 0)
{
double h = Convert.ToDouble(textBoxH.Text);
textBoxRes.Text = Metody.Ueddla(h, a, b).ToString();
}
else
{
MessageBox.Show("Шаг не может быть отрецательным");
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
}
}
Библиотека классов.
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace ClassLibrary
{
public static class Metody
{
/// <summary>
/// Функция
/// </summary>
/// <param name="arg">Функция x</param>
/// <returns></returns>
public static double getValue(double arg)
{
return Math.Exp(arg);
}
/// <summary>
/// Гауса
/// </summary>
/// <param name="h">Шаг</param>
/// <param name="a">Левый Граница</param>
/// <param name="b">Правая Граница</param>
/// <returns></returns>
public static double Gausa(double h, double a, double b)
{
double res = 0;
for (double i = a; i < b; i += h)
res += h / 2 * (getValue((i + h + i) / 2 - (h / (2 *
Math.Sqrt(3)))) + getValue((i + h + i) / 2 + (h / (2 * Math.Sqrt(3)))));
return res;
}
/// <summary>
/// Метод 3/8
/// </summary>
/// <param name="h">Шаг</param>
/// <param name="a">Левая Граница</param>
/// <param name="b">Правая Граница</param>
/// <returns></returns>
public static double TriWosmyh(double h, double a, double b)
{
double res = 0;
double V = h / 3;
for (double i = a; i <= b; i += h)
res += ((getValue(i)) + 3 * getValue(i + V) + 3 * getValue(i
+ 2 * V)) + getValue(i + h);
res = res * 3 * V / 8;
return res;
}
/// <summary>
/// Метод Уэддля
/// </summary>
/// <param name="h">Шаг</param>
/// <param name="a">Левая Граница</param>
/// <param name="b">Правая Граница</param>
/// <returns></returns>
public static double Ueddla(double h, double a, double b)
{
double res = 0;
for (double i = a; i < b; i += h)
res += (getValue(i - h) + 5 * getValue(i - h + h / 6) +
getValue(i - h + h / 3)
+ 6 * getValue(i - h + h / 2) + getValue(i - h + 2 * h /
3)
+ 5 * getValue(i - h + 5 * h) + getValue(i)) * h;
return res / 20;
}
}
}
Таблица
Лабораторная работа №3
Метод
Гаусса
Метод
3/8
Метод
Уэддл
я
Шаг 0,01
Абсолютная
погрешность
Шаг 0, 1
Абсолютная
погрешность
1,7182818284550
7
1,7182818284617
0,0097047383
2,0041659775684
2
2,0041660548667
4
2,0556274012318
4
0,20556275828122
7
0,26062758281227
1,7193400157592
6
0,0097047383081
2
0,0182818284650
1
0,30416609351483
Точное
значени
е
1,7
1,7
1,7
Download