|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.03.2008, 01:22 | #1 |
Регистрация: 16.03.2008
Сообщений: 5
|
Программа "вычисление определенных интегралов"
Здравствуйте уважаемые форумчане!
Обращаюсь к Вам за помощью! Учусь на 2-ом курсе, задали курсач по программированию, на Visual Basic нужно создать программу, которая бы вычисляла определенные интегралы. Пока что я тему не утверждала, еще в раздумьях, чтобы определиться, мне нужно быть уверенной в том, что справлюсь. Пока что роюсь в инете в поисках схожих программок. Вопросов у меня будет много. Начну с первого, знатоки Delphi, скажите пожалуйста..... в программе (см ниже) могу ли я вводить подынтегралное выражение, т.е. саму функцию с клавитуры...или ...данная программа может решать только один заданный интеграл. Язык этот помоему Delphi, я его не знаю и честно гвооря не разбиралась в коде, знатоки наверно сходу разбируться. Простите, если вопрос показался глупым. Просто меня реально мучает вопрос как я буду реализовывать такую штуку, чтобы вводить с клавиатуры функцию и решать ее. Спасибо,верю, надеюсь, жду, что ответите Просто расчет площади под функцией, параметры: a,b - пределы интегрирования, a<=b eps - допустимая погрешность, практически гарантируется, что расхождение результата с истинным значением интеграла не превосходит по модулю указанную величину. Только не переборщите :-)) intF - подинтегральная функция. Естественно, желательно задавать функции, интегрируемые в смысле Римана. unit intfunc; interface type TIntFunc = function(X: Double):Double; function TrapezeInt(a,b:Double; eps: Double; IntF: TIntFunc): Double; implementation function TrapezeInt(a,b:Double; eps: Double; IntF: TIntFunc): Double; var //S - площадь на предыдущей итерации, //x - текущее значение аргумента //base - высота трапеции //n - число трапеций, удваивается на каждой итерации S, x, base: Double; i, n: Integer; begin //Сначала приближение одной трапецией base := b-a; Result := (IntF(a) + IntF(b))/2 * base; eps := eps / 10; //Вообще говоря, величина делителя зависит от функции n := 1; repeat S := Result; base := base / 2; n := n * 2; //Новая площадь вычисляется на основе старой Result := Result / 2; //Ниже - просто вычисляем площади новых трапеций for i := 1 to n div 2 do begin x := a + base * (i * 2 - 1); Result := Result + IntF(x) * base; end; until abs(S-Result) <= eps; end; end. Пример использования: uses intFunc; function intSin(x: Double): Double; begin Result := sin(x); end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := FloatToStr(TrapezeInt(0,Pi, 0.00001, intSin)); //результат у меня получился 1.99999990195429 - с запасом //Точный ответ - 2.0 end; |
16.03.2008, 02:12 | #2 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Цитата:
Один, или десять, или сто, но "известных" программе. Анализ вводимого текста, да еще представление в виде формулы, да ещё и с учетом ограничений, как интегрируемость по Риману - это несколько нетривиальная задача в рамках VB или Delphi, намного более сложная, чем численное интегрирование. |
|
16.03.2008, 03:23 | #3 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Я делал ввод функций, но сам модуль у меня почти 700 строк. (Delphi)
Интегралы можно выислять методом трапеций (методом Симпсона на крайняк) - это легко. Самое сложное - ввод функции. У меня была задача - нахождение экстремума функции, вводимой с клавиатуры, методом Ньютона. Там посложнее будет. Кстати, у меня модуль предусмотрен для максимум 3-хмерной функции (меньше можно). Если интересно, могу кинуть. Только надо потестить сначала. ЗЫ У меня реализованы функции: +,-,*,/,^,abs,sin,cos,tg,ctg,arcsin,arccos ,arctg,arcctg,sh,ch,th,cth,arcsh,ar cch,arcth,arccth,ln. И ещё константы: pi,e. Переменные: X,Y,Z. Последний раз редактировалось Carbon; 16.03.2008 в 03:27. |
16.03.2008, 12:20 | #4 |
Регистрация: 16.03.2008
Сообщений: 5
|
Carbon, конечно интересно, кидайте всё...все буду рассматривать.
nassmi@mail.ru У меня есть в списке тема "Поиск экстремумов функций одной или множества переменных". Но раз вы говорите это сложнее браться не буду. Да, меня и ввергает в сомнение ввод функции. Т.е. в программе нужно создавать какую-то "таблицу" с известными значениями, что интеграл sinx = cosx и т.д. Т.е. мы в программе должны предусматреть все возможные варианты вводимых функций? а если введут интеграл sin2x+tg5x/cos44x какой-нибудь? Но я думаю все же курсач предусматривает решение более чем одной какой-то заданной функции. Придется как-то расширять круг..только как |
16.03.2008, 12:41 | #5 | |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Цитата:
|
|
16.03.2008, 22:54 | #6 |
Регистрация: 16.03.2008
Сообщений: 5
|
В среду или в пятницу я пойду к преподу, поговорю с ним насчет моей темы (всё уточню и узнаю).
И сразу вам напишу! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует | skobets | Общие вопросы C/C++ | 2 | 03.06.2008 06:51 |
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) | Dorvir | Microsoft Office Excel | 2 | 28.03.2008 10:03 |
программа,определенние "1" в таблице!помогите пожалуйста.. | katy)))) | Помощь студентам | 2 | 06.12.2007 12:09 |
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" | MAcK | Компоненты Delphi | 11 | 24.10.2007 10:49 |
Тестирующая программа "КРИВЫЕ ВТОРОГО ПОРЯДКА" | ivp88 | Помощь студентам | 3 | 13.03.2007 11:47 |