Проблемы с внедрением математических уравнений в программировании

Я реализую алгоритм для школы, и у меня возникают проблемы с пониманием того, как определенный интеграл представлен в программировании. Например, я знаю, что уравнение суммирования может быть реализовано в следующем примере: enter image description here

предполагая, что y = f (x)

if(x==0){
    y=x+1;
}else{
    for(int i = 0; i < n; i++){
        y = y + (x - 1);
    }
}

Как я тогда представляю числовой интеграл, например:
enter image description here
Упомянутые уравнения могут не иметь математического смысла, но моя цель - реализовать аналогичные уравнения в С# для проекта школьного программирования, который я должен выполнить, в котором я должен реализовать алгоритм, содержащий интегралы. Я читал, что существуют численные методы решения определенных интегралов, таких как правило симпсона; должен ли я использовать такие методы для реализации уравнения или может быть представлен интеграл в программировании, таком как петля или что-то в этом роде?

Ответ 1

Это зависит от того, что вы пытаетесь сделать. Если это была конкретная реализация, вы могли бы просто интегрировать формулу x-1 становится (x^2)/2 - x, а затем возвращать максимальное значение минус минимальное значение.

В качестве альтернативы он может быть реализован как оценка, выбирая соответствующий размер шага для dx.

decimal dx=0.1;

if(x==0){  
    y=x+1;  // could just return y=1
}else{  
    decimal tempY=0;
    for(decimal i = 3; i <= 20; i+=dx){  
        tempY += (i - 1);  
    }  
    // Either return tempY as decimal or
    y= Convert.ToInt32(tempY);
}  

Ответ 2

Может быть, я не понимаю, но вы хотите знать, как вычислить интеграл численно?

Если это так, существует множество методов. Для краткого введения взгляните на: http://en.wikipedia.org/wiki/Numerical_integration

Из примера вы можете просто:

int f(int x) {
    if(x == 0) {
       y = x + 1;
    }else{ 
      y = computeIntegral()
    }
    return y
}

где computeIntegral() - это функция, которую вы должны записать, чтобы вычислить интеграл.

Но я думаю, что есть проблема с вашей функцией f (x), потому что если x не является нулем f (x) как только одно значение. Возможно, интегральная граница должна зависеть от х ^

Последний комментарий. Если x является числом с плавающей запятой x == 0, это не рекомендуется, поскольку плавающее число не имеет уникального двоичного представления из-за округления усечения.

Ответ 3

Тема численного интегрирования велика и может стать чрезвычайно сложной, поэтому я не буду охватывать все это в этом ответе.

Правило Симпсона - метод численного интегрирования в сторону простого и приближенного (а не комплексного, точного или обоих) конца спектра. Это не плохой выбор для начала ваших исследований по этой теме, так как это очень просто понять и запрограммировать. Я не сомневаюсь, что вы могли бы непосредственно реализовать формулу, представленную в Википедии на вашем любимом языке программирования.

Теперь, чтобы связать петли и правило Симпсона вместе: точность приближения, которое правило Симпсона делает для истинного значения интеграла, улучшается по мере приближения границ интеграции (3 и 20 в вашем примере). Таким образом, одним из способов, который вы могли бы предпринять, было бы написать цикл, который вычисляет интеграл от 3 до 4, от 4 до 5,... и добавляет их все в конце. Интеграция создает области, добавление областей вместе создает (обычно) другую, большую область.

И всем другим специалистам в области цифровой интеграции, да, я знаю, что существуют другие подходы и что многие из этих других подходов "лучше" (во многих разных смыслах), и я знаю, что правило Симпсона будет иметь проблемы с некоторые (многие) функции, но это не плохое место для начала.

Ответ 4

Вы не можете представить интеграл просто с циклом, потому что интеграл является бесконечной суммой. Вы должны либо использовать метод аппроксимации, либо изменить уравнение, чтобы удалить знак интеграла. Интеграл в вашем втором уравнении должен быть легко удален.