Войти

Показать полную графическую версию : Я правильно сделал?


asacyra
20-11-2013, 21:53
Было дано задание решение интеграла методом трапеции
вот код
namespace Reshenie
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static float a, b, x, n,g, c, step, y, sum, sum2, sum3;
public static float f(float x)
{
return (float)(32+28*x-9*x*x);
}
private void button1_Click(object sender, EventArgs e)
{


a = Convert.ToSingle(textBox1.Text);
b = Convert.ToSingle(textBox2.Text);
step = Convert.ToSingle(textBox3.Text);



sum = 0;
sum2 = 0;
sum3 = 0;

for (x = a; x <= b; x += step)
{
if (x == a || x == b)
{
y = Math.Abs(f(x));
sum += y;
}
else
{
y = Math.Abs(f(x));
sum2 += y;
}
}
float pogresh = (float)Math.Pow((b - a), 3) /
( (float)Math.Pow((b - a / step), 2));//учитывая погрешность
sum3 = (sum / 2 + sum2) * step + pogresh;

textBox6.Text = "Ответ: " + sum3.ToString("f3");

}

Delirium
22-11-2013, 15:52
Ну если исключить отсутствие проверок на возможный неверный ввод, то пойдет.

mrcnn
22-11-2013, 15:57
Нет, неправильно. Вы вычисляете значение функции только в одной точке, а нужно на каждом отрезке разбиения вычислять как минимум значения функций в двух точках.
Значение площади на одном отрезке разбиения равно [ [ ( f(x+step) + f(x) ) / 2 ] * ( (f(x+step) - f(x) ) ] + погрешность

Первая производная -18x + 28
Вторая производная -18

Погрешность на одном шаге : -[ (-18 / 12) / ( (f(x+step) - f(x) ) * ( (f(x+step) - f(x) ) * ( (f(x+step) - f(x) ) ]

Еще можно было бы добавить сравнение a и b. Если a>b, то программа уже не работает.




© OSzone.net 2001-2012