Алгоритм решения нелинейного уравнения в excel vba
Доброго времени суток! Я решил разбавить наши стандартные статьи по программированию в VBA. Поэтому сегодня мы поговорим о численных методах решения нелинейных алгебраических уравнений, в целом и о каждом в отдельности.
Численные методы
Предназначение численных методов — упростить человеку решение математических задач. Существуют численные методы для решения интегралов, дифференциалов, линейных и нелинейных алгебраических уравнений и т.д. В основном в ВУЗ-ах изучают только перечисленные.
Под численными методами решения алгебраических уравнений подразумевают алгоритмы нахождения корней уравнения. Алгоритмы, в основном, отличаются скоростью нахождения корней с необходимой точностью, а также условием сходимости. Также, иногда встречается такая характеристика, как простота алгоритма.
Метод половинного деления(бисекции, дихотомии)
В отличие от большинства других методов, метод половинного деления сходится всегда, т.е. обладает безусловной сходимостью, поэтому применим для решения любых уравнений. Кроме этого он чрезвычайно прост. Основным недостатком такого метода является его скорость. С каждым шагом его погрешность уменьшается в два раза, поэтому его можно отнести к методам с линейной сходимостью.
Реализация метода половинного деления в VBA
В интернете можно найти много разных реализаций данного метода как на C++, Matlab и других языках. Языков много, алгоритм один. Для лучшего понимания посмотрим на блок схему.
Распишем общий алгоритм:
Шаг 0. Задать концы отрезка a и b, функцию f, малое число e>0 (допустимую абсолютную погрешность корня или полудлину его промежутка неопределённости), малое q>0 (допуск, связанный с реальной точностью вычисления значений данной функции); вычислить f(a).
2 комментария
Не работает же, просто делит диапазон на уменьшающиеся в 2 раза отрезки
Вова, метод и заключается в том, чтобы делить отрезок (область поиска) в два раза до тех пор, пока не выполнится условие по точности. Этот метод может и не найти точку экстремума функции, если их несколько на отрезке поиска.
При выполнении кое-каких расчетов в Exel потребовалось численно решать нелинейные уравнения. Когда уравнений было 2-3 делал в лоб - на каждое уравнение создавал свой экземпляр процедуры (например, деления отрезка попалам) и добавлял новую цифру в название .
Сильно доставало, но для 2-3 было терпимо. Сейчас по прикидкам мне нудно будет решить по более 10 - при таком подходе будет капец. Метод Бисекций, хорд, Ньютона * 10-15 = 30-45!!
Короче, спасайте! Требуется отработанный пример построения подобных конструкций. Бегло погуглил здесь на форуме, вроде бы какие-то обходные варианты по указателям в природе существуют, но как-то там все не очень очевидно и требует вдумчивого домысливания и как следствие - отладки. Если начну с нуля вникак сам, зависну на неделю две и сильно отвлекусь от основной задачи на второстепенную, что прямо сейчас не хотелось бы.
Исходя из общих соображений - задача до банальности типовая, може кто реализовывал ее через указатели или, может, какие другие способы, поделитесь наработками. ОЧень надо.
C++ ЧМ Численное решение нелинейных уравнений
Всем привет! Задали численно решить нелинейное уравнение f(x) = cos(x) ^ 2 - 0.3 * cos(x) - 0.4 на.
Численное решение нелинейных уравнений
1)решить уравнение lnx-x+18=0 методом итераций на отрезке 2) решить уравнение xlgx-1/3=0 Методом.
Численное решение алгебраических и нелинейных уравнений
Решить при помощи численных методов уравнение (найти действительные корни) указанным методом.
Численное решение нелинейных уравнений с заданной точностью
Помогите доделать код По заданному нелинейному уравнению F(x)=0, где F(x) – некоторое.
tems-ya, ничего ужасного здесь нет, не сгущайте краски, а то всех здесь перепугаете. Если переменные уравнений связаны друг с другом,то метод Ньютона-Рафсона X i+1 =X i -(F') -1 *F. А если хотите, то пришлите 3-4 уравнения, посмотрю. Вы, видимо, решаете уравнения последовательно?
Нет, речь идет о численном решени большого количества независимых и никак не связанных друг с другом уравнений в одном файле (для сравнения несколькими численными методами)
В нормальных языках это реализуется просто. Пишется процедура(функция) ОДНА (на каждый метод), которая реализует все требуемые вычисления (тело алгоритма). Далее в эту процедуру просто передается указатель(ссылка) на конкретную функцию, которую нужно решить в данный конкретный момент. Если функций 100, то просто 100 раз вызывается ОДНА процедура со всеми 100 разными функциями. Ну это в нормальных языках.
В VBA чтобы решить данное уравнение нужно в теле процедуры ЯВНО указывать функцию, для которой проводится решение.
Если таких функций 100, то я должен наплодить 100 процедур (например бисекций), которые будут отличаться друг от друга только названием вызывамой функции. 100 функций + 100 процедур для их решения одним методом + 100 процедур для их решения другим методом . далее думаю понятно.
Уже при 3 методах и 3 функциях ориентироваться и что-то модифицировать в коде стало не комфортно.
Мой вопрос был о том, как, каким образом можно оптимизировать всю эту описанную процедуру вычислений избежать лобового решения задачи.
Выполнение решения системы алгебраических уравнений вручную в редакторе Microsoft Excel, математическом пакете MathCAD. Реализация алгоритма решения на языке VBA. Вычислительная схема метода простой итерации. Результат решения нелинейных систем уравнений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.12.2019 |
Размер файла | 408,5 K |
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
Санкт-Петербургский Горный Университет
Кафедра информатики и компьютерных технологий
Курсовая работа
По дисциплине: Информатика
"Решение систем нелинейных уравнений итерационными методами"
Студенту группы МО-18 Иванову Алексею Владимировичу
1. Тема работы Решение систем нелинейных уравнений итерационными методами
2. Исходные данные к работе Система нелинейных уравнений. Вариант № 8
3. Содержание пояснительной записки Титульный лист, индивидуальное задание, аннотация, оглавление, введение, вычислительная схема, блок-схема, решение нелинейных систем уравнений(вручную, средствами MS EXCEL, MATHCAD, VBA), заключение, библиографический список.
4. Перечень графического материала Схемы, рисунки, таблицы
5. Срок сдачи законченной работы 15.05.2019
Руководитель работы Кротова С.Ю. (должность) (подпись) (Ф.И. О.)
Дата выдачи задания 12.02 20 19 г.
Аннотации
Пояснительная записка представляет собой отчет о выполнении курсовой работы на тему "Решение систем нелинейных уравнений методом простых итераций с параметрами". В работе выполнено решение системы алгебраических уравнений вручную, в редакторе Microsoft Excel, математическом пакете MathCAD, реализован алгоритм решения на языке VBA.
The explanatory note is a report on the execution of the course work on the theme "Solving systems of nonlinear equations by simple iteration with parameters". The solution of the algebraic equations system has been solved manually, in the Microsoft Excel package, in MathCAD, the VBA solution algorithm has been implemented.
1. Вычислительная схема метода простой итерации с параметрами
2. Блок-схема алгоритма
3. Результат решения нелинейных систем уравнений, полученный вручную
4. Решение нелинейных систем уравнений средствами MS EXCEL
5. Решение системы нелинейных уравнений средствами пакета MATHCAD
6. Решение системы нелинейных уравнений с использованием VBA
Введение
Одной из самых сложных задач является решение систем нелинейных алгебраических уравнений. Существует множество методов решения таких систем, которые успешно приводят к решению, если начальное приближение было заданно достаточно близко к нему. Но если подобрать произвольное приближение, есть вероятность вовсе не найти решения данной системы.
Итерационные методы состоят в последовательном уточнении начального приближения. Каждый такой шаг называется итерацией. В результате итераций находится последовательность приближенных значений корня. Если при этом с увеличением n значения приближаются к точному решению заданного уравнения, то говорят, что данный итерационный процесс сходится. уравнение редактор алгоритм
Целью данной курсовой работы является изучение и развитие умения и навыка решения систем нелинейных алгебраических уравнений итерационными методами, а именно методом простых итераций с параметром. А также закрепление навыков работы с программами MS EXCEL, MatCAD и программирования в VBA.
1. Вычислительная схема метода простой итерации с параметрами
Пусть дана нелинейная система n уравнений с n неизвестными, корни которой необходимо найти с заданной точностью .
Для решения данной системы можно применить метод простой итерации с параметрами, алгоритм которого приведен ниже.
1. Задаем точность вычисления ? (обычно ?=10-3 - 10-6.
2. Переписываем систему виде (1):
3. Выбираем начальное приближение
4. Полагаем переменную k, которая нумерует приближения, равной нулю.
5. Полагаем Тi=1, i=1,2,…,n.
6. Вычисляем (k+1)-е приближение по формуле (2).
7. Проверяем условие (3):
8, Проверяем качество нового приближения.
Если условие выполняется, то проверяем пункт 6 при следующем i, в противном случае переходим к пункту 9.
9. Подбираем новое Тi. Если Тi>0, то заменяем Тi на -Тi, в противном случае на -Тi/2. После корректировки Тi возвращаемся к пункту 6, увеличив k на единицу.
2. Блок-схема алгоритма
Рисунок 1 - Блок-схема алгоритма (метод простой итерации)
3. Результат решения нелинейных систем уравнений, полученный вручную
Методом простой итерации с точностью ?=0,001 решим систему нелинейных уравнений:
Согласно приведенному выше алгоритму, принимаем x=x1, y=x2.
Таким образом система принимает вид:
Далее необходимо выбрать начальные приближения. Для этого в системе координат х 1 и х 2 строим графики приведенных выше зависимостей (рис. 2).
Рисунок 2 - Графики зависимости х 2 от х 1
Из графика видно, что система имеет одно решение, заключенное в области ---1.4
Проверим условие сходимости (5). Для этого находим значения дифференциалов Ф(х) для х 1 и х 2, находящихся в областях возможных решений, найденных из графика (рис. 2).
Следовательно, в указанных промежутках условия сходимости выполняется.
Далее вычисляем по формуле (2).
На первом шаге получаем следующие значения:
Далее проверяем условие (3)
Условие не выполняется, значит пересчитываем значение Т, для чего проверяем условие (4) для каждого значения i.
Условие (4) не выполняется, значит принимаем
Условие (4) не выполняется, значит принимаем Тi=-1 для
Переходим ко второму шагу. Вычисляем значения и
Далее проверяем условие (3)
Условие не выполняется, значит пересчитываем значение Т, для чего проверяем условие (4) для каждого значения i.
Условие (4) выполняется, значит Тi без изменений для
Условие (4) выполняется, значит Тi без изменений для
Переходим к третьему шагу. Вычисляем значения и
Далее проверяем условие (3)
Условие выполняется, значит Х 3 - искомое приближение к решению и итеративный процесс закончен. Найденные решения х 1=-1.238 и х 2=0.985. Результаты вычислений представлены в табл. 1.
Выполнение решения системы алгебраических уравнений вручную в редакторе Microsoft Excel, математическом пакете MathCAD. Реализация алгоритма решения на языке VBA. Вычислительная схема метода простой итерации. Результат решения нелинейных систем уравнений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.12.2019 |
Размер файла | 408,5 K |
Соглашение об использовании материалов сайта
Просим использовать работы, опубликованные на сайте, исключительно в личных целях. Публикация материалов на других сайтах запрещена.
Данная работа (и все другие) доступна для скачивания совершенно бесплатно. Мысленно можете поблагодарить ее автора и коллектив сайта.
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Подобные документы
Особенности решения уравнений с одной переменной методом половинного деления. Оценка погрешности метода простой итерации. Суть решения уравнений в пакете Mathcad. Векторная запись нелинейных систем. Метод Ньютона решения систем нелинейных уравнений.
курсовая работа [2,1 M], добавлен 12.12.2013
Сравнительный анализ итерационных методов решения нелинейных алгебраических и трансцендентных уравнений. Простейший алгоритм отделения корней нелинейных уравнений. Метод половинного деления. Геометрический смысл метода Ньютона. Метод простой итерации.
реферат [95,0 K], добавлен 06.03.2011
Суть метода Рунге-Кутта и его свойства. Решение дифференциальных уравнений первого порядка. Вычислительный блок Given/Odesolve. Встроенные функции rkfixed, Rkadapt, Bulstoer. Решения линейных алгебраических уравнений в среде MathCad и Microsoft Excel.
курсовая работа [1,1 M], добавлен 02.06.2014
Итерационные методы решения нелинейных уравнений, системы линейных алгебраических уравнений (СЛАУ). Решение нелинейных уравнений методом интерполирования. Программная реализация итерационных методов решения СЛАУ. Практическое применение метода Эйлера.
курсовая работа [1,6 M], добавлен 20.01.2010
Преобразование матрицы системы линейных алгебраических уравнений (СЛАУ) с помощью алгоритма Гаусса. Решение задачи методом простой итерации. Создание блок-схемы и текста программы для решения СЛАУ, реализованной на языке программирования Turbo Pascal.
курсовая работа [1,2 M], добавлен 15.06.2013
Рассмотрение двух способов решения систем линейных алгебраических уравнений: точечные и приближенные. Использование при программировании метода Гаусса с выбором главного элемента в матрице и принципа Зейделя. Применение простой итерации решения уравнения.
курсовая работа [879,8 K], добавлен 05.06.2012
Методы решения нелинейных уравнений: прямые и итерационные. Методы решения трансцендентных, алгебраических уравнений. Метод деления отрезка пополам, Ньютона, простой итерации. Поиск корня уравнения методом простой итерации с помощью электронных таблиц.
Всем привет.Получил непростое задание(для меня) которое надо решить в VBA,задание заключается в следующем:
Решить методом итераций уравнение х^3 - 3*x + 1 = 0
Для начального приближения х-нулевое = 1.
Точность e = 0,0001
На каждом шаге решения необходимо предусмотреть номера итерации,значения аргумента и функции,результат должен быть в MsgBox.
Так вот что я не понял,так это для чего в этом уравнение дали точность.
Где и в каком месте она должна использоваться?
Прошу вашей помощи!
а как вы собираетесь иначе остановить вычисления?
вот когда при очередной итерации левая часть уравнения будет отличаться от правой (в вашем случае -- от 0) на величину, по модулю меньшую погрешности -- вот тогда вы и получите искомое решение методом итераций.
учите матчасть. учебник по численным методам, в частности.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
а как вы собираетесь иначе остановить вычисления?
вот когда при очередной итерации левая часть уравнения будет отличаться от правой (в вашем случае -- от 0) на величину, по модулю меньшую погрешности -- вот тогда вы и получите искомое решение методом итераций.
учите матчасть. учебник по численным методам, в частности.
Дело в том,что у нас такого предмета как "Численные методы" в помине не было,ну а для решения одного примера - читать учебники по неизвестной мне области,сами понимаете.
в общем, идея такова -- начальное значение x вам известно.
подставляете его в уравнение, сравниваете с правой частью (с 0, то есть).
разница по модулю больше заданной погрешности, значит, надо изменить значение x на некоторую величину и опять пересчитать. и так до тех пор, пока абсолютное значение разницы не будет меньше погрешности.
как-то так.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Маааленькое замечание.
Для вычисления x преобразуй данное тебе уравнение к виду:
x = f(x).
Тогда, подставив начальное значение в f(x), получим новое x.
И если Dx (разность подставленного и вычисленного) велика, то подставляем среднее между начальным и вычисленным или вновь вычисленное. При этом следует следить за знаком Dx.
В общем, следует отслеживать сходимость вычисления.
Что-то в этом роде .
Маааленькое замечание.
Для вычисления x преобразуй данное тебе уравнение к виду:
x = f(x).
Тогда, подставив начальное значение в f(x), получим новое x.
И если Dx (разность подставленного и вычисленного) велика, то подставляем среднее между начальным и вычисленным или вновь вычисленное. При этом следует следить за знаком Dx.
В общем, следует отслеживать сходимость вычисления.
Что-то в этом роде .
Ну, не обижайся. По тому, что написано в первом посте не понять.
В твоем случае:
x=(1+x^3)/3
Если теперь последовательно подставлять xn =1, затем тот х, который получили, и т.д. то см. табличку (это в Calc, но можно и в Экселе).
---- x ------ (1+x^3)/3 ----- Dx
---------------------------------------
1,00000000 0,66666667 0,3333333
0,66666667 0,43209877 0,2345679
0,43209877 0,36022563 0,0718731
0,36022563 0,34891459 0,0113110
0,34891459 0,34749245 0,0014221
0,34749245 0,34732002 0,0001724
0,34732002 0,34729921 0,0000208
0,34729921 0,34729670 0,0000025
0,34729670 0,34729640 0,0000003
0,34729640 0,34729636 0,0000000
При сравнении Dx с eps надо использовать функцию Abs()
Ладно, это тебе подойдет .
eps = 0.0001
xn = 1
x = (1 + x ^ 3) / 3
While Abs(xn - x) > eps
xn = x
x = (1 + xn ^ 3) / 3
Wend
' А тут выводишь полученное решение
Вроде так должно получиться .
Благодарю за код,ответ получился 0,так ли должно быть?Я думал просто на каждом шаге должен появляться ответ,а тут он высвечивается 1 раз даже если ответ находится в цикле while
Я от математики далек,поэтому у меня вопрос,почему вместо заданного уравнения х^3 - 3*x + 1 = 0 в коде (1 + xn ^ 3) / 3 ? Если так и должно быть,то просто скажите что так и должно быть без объяснений
Читайте также: