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