Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2008, 01:22   #1
Artinka
 
Аватар для Artinka
 
Регистрация: 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;
Artinka вне форума Ответить с цитированием
Старый 16.03.2008, 02:12   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

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

Цитата:
Сообщение от Artinka Посмотреть сообщение
или ...данная программа может решать только один заданный интеграл.
Один, или десять, или сто, но "известных" программе. Анализ вводимого текста, да еще представление в виде формулы, да ещё и с учетом ограничений, как интегрируемость по Риману - это несколько нетривиальная задача в рамках VB или Delphi, намного более сложная, чем численное интегрирование.
B_N вне форума Ответить с цитированием
Старый 16.03.2008, 03:23   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 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.
Carbon вне форума Ответить с цитированием
Старый 16.03.2008, 12:20   #4
Artinka
 
Аватар для Artinka
 
Регистрация: 16.03.2008
Сообщений: 5
По умолчанию

Carbon, конечно интересно, кидайте всё...все буду рассматривать.
nassmi@mail.ru

У меня есть в списке тема "Поиск экстремумов функций одной или множества переменных". Но раз вы говорите это сложнее браться не буду.
Да, меня и ввергает в сомнение ввод функции. Т.е. в программе нужно создавать какую-то "таблицу" с известными значениями, что интеграл sinx = cosx и т.д. Т.е. мы в программе должны предусматреть все возможные варианты вводимых функций? а если введут интеграл sin2x+tg5x/cos44x какой-нибудь?
Но я думаю все же курсач предусматривает решение более чем одной какой-то заданной функции. Придется как-то расширять круг..только как
Artinka вне форума Ответить с цитированием
Старый 16.03.2008, 12:41   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Artinka Посмотреть сообщение
У меня есть в списке тема "Поиск экстремумов функций одной или множества переменных". Но раз вы говорите это сложнее браться не буду.
Да, меня и ввергает в сомнение ввод функции. Т.е. в программе нужно создавать какую-то "таблицу" с известными значениями, что интеграл sinx = cosx и т.д. Т.е. мы в программе должны предусматреть все возможные варианты вводимых функций? а если введут интеграл sin2x+tg5x/cos44x какой-нибудь?
Но я думаю все же курсач предусматривает решение более чем одной какой-то заданной функции. Придется как-то расширять круг..только как
Зачем первообразные хранить? Всего вариантов, учитывая сложные функции - очень много (учитывая, что многие из них будут неберущимися), поэтому интегралы нужно вычислять приближёнными методами, ведь не требуется вычислять неопределённый интеграл.
Carbon вне форума Ответить с цитированием
Старый 16.03.2008, 22:54   #6
Artinka
 
Аватар для Artinka
 
Регистрация: 16.03.2008
Сообщений: 5
По умолчанию

В среду или в пятницу я пойду к преподу, поговорю с ним насчет моей темы (всё уточню и узнаю).
И сразу вам напишу!
Artinka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
если пользователь наберет какой-то другой символ не "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