ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Обчислити інтеграл методом прямокутників, трапецій, парабол, трьох восьмих, Монте-Карло оцінити абсолютну та відносну похибку обчисленняА) заданий інтеграл обчислити наближено та точно B) заданий інтеграл обчислити наближено 1. 2. 3. Текст програми: using System; using System.Windows.Forms;
namespace Numerical_Methods_Lab2 { public partial class Form1: Form { double[] x = new double[2]; double[] y = new double[2]; int n = 10; public Form1() { InitializeComponent(); label5.Text = ""; } private void button1_Click(object sender, EventArgs e) { n = Convert.ToInt32(textBox5.Text); x[0] = Convert.ToDouble(textBox1.Text); x[1] = Convert.ToDouble(textBox2.Text); y[0] = Convert.ToDouble(textBox3.Text); y[1] = Convert.ToDouble(textBox4.Text); if (radioButton1.Checked) { label5.Text = "Метод прямокутників: " + Rectangle_M(n).ToString("0.0000000"); label5.Text += "\r\nМетод трапецій: " + Trapeze_Method(n).ToString("0.0000000"); label5.Text += "\r\nМетод парабол: " + Simpson_M(n).ToString("0.0000000"); label5.Text += "\r\nМетод трьох-восьмих: " + TV_Method(n).ToString("0.0000000"); label5.Text += "\r\nМетод Монте-Карло: " + Monte_Carlo_Method(true).ToString("0.0000000"); } if (radioButton2.Checked) label5.Text = "Метод Монте-Карло: " + Monte_Carlo_Method(false).ToString("0.0000000"); if (radioButton3.Checked) { x[0] = 1; label5.Text = "Метод прямокутників: " + Rectangle_M(n).ToString(); label5.Text += "\r\nМетод трапецій: " + Trapeze_Method(n).ToString(); label5.Text += "\r\nМетод парабол: " + Simpson_M(n).ToString(); label5.Text += "\r\nМетод трьох-восьмих: " + TV_Method(n).ToString(); } } public double Rectangle_M(int n) { double s = 0; double h = (x[1] - x[0]) / n; for (int i = 0; i < n; i++) s += Func(x[0] + h * i); return s * h; } public double Trapeze_Method(int n) { double h = (x[1] - x[0]) / n; double s = 0; for (int i = 1; i < n; i++) s += Func(x[0] + h * i); return h * ((Func(x[0]) + Func(x[1])) / 2 + s); } public double Simpson_M(int n) { double h = (x[1] - x[0]) / n; double s = 0; int p = 4; for (int i = 1; i < n; i++) { s += p * Func(x[0] + h * i); p = 6 - p; } return h / 3 * (Func(x[0]) + Func(x[1]) + s); } public double TV_Method(int n) { double s = 0; double h = (x[1] - x[0]) / (3.0 * n); for (int i = 1; i < 3 * n; i++) { if (i % 3 > 0) s += 3 * Func(x[0] + i * h); else s += 2 * Func(x[0] + i * h); } s += Func(x[0]) + Func(x[1]); s *= 3.0 / 8 * h; return s; } public double Monte_Carlo_Method(bool ss) { Random rn = new Random(); double s = 0, xx, yy, z; int n = 1000000; int k1 = 0, k2 = 0;
double h = (x[1] - x[0]) / (3 * n); if (ss) { for (int i = 0; i < n; i++) { xx = (double)rn.Next((int)x[0], (int)x[1]); yy = (double)rn.Next()/ (double)Int32.MaxValue * 100 - 50; if ((Func(xx) >= 0) && (yy >= 0) && (yy <= Func(xx))) k1++; if ((Func(xx) < 0) && (yy < 0) && (yy > Func(xx))) k2++; } return s = (x[1] - x[0]) * 100 * (double)k1 / n - (x[1] - x[0]) *100 * (double)k2/ n; } else { for (int i = 0; i < n; i++) { xx = (double)rn.Next() / (double)Int32.MaxValue * x[1] + x[0]; yy = (double)rn.Next() / (double)Int32.MaxValue * y[1] + y[0]; z = (double)rn.Next() / (double)Int32.MaxValue * 100 - 50; if ((Func(xx, yy) >= 0) && (z >= 0) && (z <= Func(xx, yy))) k1++; if ((Func(xx, yy) < 0) && (z < 0) && (z > Func(xx, yy))) k2++; } return s = (x[1] - x[0]) * (y[1] - y[0]) * 100 * (double)k1 / n - (x[1] - x[0]) * (y[1] - y[0]) * 100 * (double)k2 / n; } }
public double Func(double x, double y = 1) { if (radioButton1.Checked || radioButton2.Checked) return y * Math.Tan(x / 26); else return (Math.Exp(-26 * x * x) - Math.Exp(-52 * x * x)) / (x * x); } } }
Результат виконання програми: Висновок: Під час виконання цієї лабораторної роботи я вивчив методи наближених обчислень визначених інтегралів.
Не нашли, что искали? Воспользуйтесь поиском:
|