Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Я правильно сделал? (http://forum.oszone.net/showthread.php?t=272485)

asacyra 20-11-2013 21:53 2258804

Я правильно сделал?
 
Было дано задание решение интеграла методом трапеции
вот код
HTML код:

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 2259901

Ну если исключить отсутствие проверок на возможный неверный ввод, то пойдет.

mrcnn 22-11-2013 15:57 2259906

Нет, неправильно. Вы вычисляете значение функции только в одной точке, а нужно на каждом отрезке разбиения вычислять как минимум значения функций в двух точках.
Значение площади на одном отрезке разбиения равно [ [ ( 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, то программа уже не работает.


Время: 14:35.

Время: 14:35.
© OSzone.net 2001-