расчеты и графики Excel. 1. основные правила работы в excel
Скачать 395 Kb.
|
Здесь оператор Dim… явно описывает по типу "целые" (Integer) переменную n – число разбиений на интервалы величиной h промежутка интегрирования от a до b и вспомогательную переменную i, которая является параметром цикла For…Next i и изменяется в этом цикле с шагом 1. В данной подпрограмме f(x) является подынтегральной функцией, от которой вычисляется определенный интеграл. Эта функция также должна быть задана подпрограммой. Если, например, f(x)=x2, то:
После написания этих двух функций в редакторе Visual Basic в Мастере функций, в разделе «определенные пользователем» появятся две соответствующие функции IntTrap и f. Для вычисления интеграла надо выбрать функцию IntTrap и задать параметры a и b – пределы интегрирования. Если нужно вычислить определенный интеграл от другой функции, измените функцию f(x) в редакторе Visual Basic. Функцию IntTrap менять не надо. Приведем также пример подпрограммы-функции, вычисляющей определенный интеграл методом Симпсона. Этот метод более точный, чем метод трапеций. В методе Симпсона интеграл вычисляется по следующей итоговой формуле: S=[ y0 + yn + 4*(y1 + y3+ … yn-1)+ 2*(y2 + y4 + … yn-2)] * h / 3 Соответствующая подпрограмма может быть написана так:
В этой подпрограмме-функции в число параметров введено число интервалов разбиения промежутка интегрирования, n. Этот параметр описан как целое число (Integer), он является необязательным (Optional) и ему назначено значение =128 по умолчанию. В результате Вы можете изменять точность вычисления интеграла, меняя значение параметра n в Мастере функций, а можете вообще не вводить этот параметр, тогда его значение останется равным 128. Задание.Введите в подпрограмме-функции IntTrap n в число необязательных параметров. Создайте подпрограмму-функцию, вычисляющую интеграл методом прямоугольников по формуле , вычислите несколько различных интегралов тремя различными методами, сравните точность вычислений при одинаковых n. 4.4. Решение обыкновенных дифференциальных уравнений. Задача Коши Задача Коши для ОДУ первого порядка в общем виде формулируется следующим образом: определить значение функции Y(x) в точке x=b, имея ОДУ и начальное условие . Приведем пример: при . Определить при . Здесь. Найдем приближенное численное решение этой задачи, применяя метод Эйлера. Заменив дифференциалы в ОДУ малыми конечными приращениями, вместо дифференциального уравнения получим соотношение: , где h – шаг приращения аргумента, – значения аргумента и функции на i-ом шаге. Сначала запишем подпрограмму-функцию для f(x,y)
Здесь мы изменили имя функции, чтобы не путать ее с функцией f(x) предыдущего раздела. Далее запишем подпрограмму-функцию, определяющую конечное значение функции у методом Эйлера. Function DU_Euler(НачХ, НачУ, КонХ, Optional n As Integer =100) Const d=0.000001 h = (КонХ - НачХ) / n y = НачУ For x = НачХ To КонХ – h+d Step h y = y + h * fxy(x, y) Next x DU_Euler = y End Function Параметры НачХ и НачУ определяют начальные условия, КонХ – значение аргумента, при котором ищется решения, n – число малых интервалов, на которое разбивается промежуток от НачХ до КонХ. Малая константа d введена, чтобы избежать досрочного прекращения цикла For…Next x из-за ошибок округления. Общее аналитическое решение рассмотренного выше уравнения дается формулой:. Константа С определяется из начальных условий. В нашем случае это C=(exp(1)-1)*exp(1) и y(x=1)=0,268664. Введите подпрограммы-функции, включите Мастер функций и проверьте Ваше численное решение. Более точное решение дает метод Рунге-Кутта четвертого порядка. Подпрограмма-функция для него представлена ниже. Убедитесь, что данный метод дает точный результат при значительно меньшем числе шагов разбиения интервала по x, чем в случае метода Эйлера. Function DU_RunKut(НачХ, НачУ, КонХ, Optional n As Integer =10) Const d=0.000001 h = (КонХ - НачХ) / n y = НачУ For x = НачХ To КонХ – h+d Step h k1 = fxy(x, y) k2 = fxy(x + h / 2, y + h * k1 / 2) k3 = fxy(x + h / 2, y + h * k2 / 2) k4 = fxy(x + h, y + h * k3) y = y + (k1 + 2 * k2 + 2 * k3 + k4) * h / 6 Next x DU_RunKut = y End Function |