написать программу на делфи вычисляющую площадь образованную пересечением функций f1=x*e^-x и f2=a/x
т.е. пишем процедуру вычисляющую интеграл,пишем процедуру находящую корни уравнения x*e^-x-a/x=0
а потом уже программу или как-то по другому будет лучше?буду очень признателен за совет)
9 ноября 2009 в 21:04
да спасибо,сделал дихотомией задав а вручную,и по монте карло то же считает
9 ноября 2009 в 16:01
#12 Насколько я понимаю, a не дано. А заранее выразить корни через a нельзя
9 ноября 2009 в 11:02
метод монт-карло применяют для функций другого вида, тут же гладенькие миленькие функции так от чего бы не сделать всё по людски методом трапеций.
на вид функций не посмотрел, тут действительно лучше дихотомией решать корни, а за критерий остановки взять отрезок разбиения интеграла.
9 ноября 2009 в 9:03
Если скорость не ограничена, то почему бы и методом Монте-карло не посчитать. Не для всех же функций можно найти интеграл, например для f(x)=(1/(q*sqrt(2*pi))*e^-((x-a)^2/(2*q^2)) решить интеграл нельзя
9 ноября 2009 в 7:01
Просто если функции конкретные даны, то числ метод нахождения корня подставлять не очень правильно. Надо заранее высчитать и записть в алгоритме. Мат лаб или кад тебе в помощь. Пригодится еще, если на младшем курсе учишься.
По методу монте-карло попробуй
9 ноября 2009 в 4:05
Аналитически – никак, можно только численно.
Если домножить на x, то получится f(x) = x^2*e^(-x) – a = 0.
Видно, что функция в левой части возрастает на (0, 2) и убывает на (2, +беск.), в точке 2 – максимум. Причем f(0) = 0, f(+беск.) = 0. Поэтому, если 0 < a < 4*e^(-2), то уравнение имеет по одному решению на каждом из вышеуказанных интервалов. Искать их можно например методом деления пополам. Алгоритм такой:
сначала выбираются x_l < x_r такие, что
f(x) монотонна, на (x_l, x_r) и f(x_l)*f(x_r) < 0.
затем проводится серия итераций:
a) Для возрастающей f
x_c = (x_l + x_r)
jf f(x_c) < 0
x_l = x_c
else
x_r = x_c
end
b) Для убывающей f
x_c = (x_l + x_r)
jf f(x_c) < 0
x_r = x_c
else
x_l = x_c
end
причем итерации продолжаются до тех пор,
пока порешность |x_l – x_r | не достигнет требуемой
величины.
В нашем случае, для первого интервала начальные значения будут x_l = 0, x_r = 2, для второго x_l = 2, x_r = C, где C любое достаточно большое число, для которогоf(C) <0.
8 ноября 2009 в 23:01
x*e^-x-a/x=0
ребят я чет туплю помогите если не сложно,как тут корни найти?
8 ноября 2009 в 21:05
#1если лаба на конкретно расчёт интеграла то обычно можно пределы интегрирования искать аналитически и подставлять, а если ни точность ни метод не даны, то можно делать трапеций, а в программу как параметр передавать число разбиений, которое при необходимости просто в ручную зададите бОльшее.
зы: но, конечно, такие вопросы правильнее задавать своему преподу что он имел ввиду только ему ведомо.
8 ноября 2009 в 17:01
#4 да ступил. Пределы не даны.
8 ноября 2009 в 17:00
#5: ну это уже зависит от того какая скорость сходимости(от числа разбиений) нужна и точность. Если это не критично, то можно брать самый простой метод, и его с большим числом разбиений использовать.
8 ноября 2009 в 16:05
#3: а пределы интегрирования ты откуда брать будешь?
8 ноября 2009 в 16:05
да корни же это пределы интегрирования будут,а интеграл как искать лучше?че-нить типо метода симпсона не пойдет,лучше трапецией
8 ноября 2009 в 16:05
#1: вроде так и надо. Еще надо заметить, что один корень следует искать на (0,2], а второй на [2, +\infty). Это нужно, чтобы простые методы поиска решения правильно работали, например метод деления пополам.
8 ноября 2009 в 16:02
Если правильно понял, вроде надо проинтегрировать обе функции, а потом из большей площади вычесть меньшую. Вобще от графиков функций зависит. Если они все на интервале больше нуля считаются, тогда так.
8 ноября 2009 в 16:02
Гм. Тупо вычисляем интреграл, не нужно искать никаких корней.
//ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%B...