Решение уравнений методом половинного деления в excel. Решение уравнений средствами Excel. Методические указания к лабораторным работам по дисциплине "Математика и информатика". Решение нелинейного уравнения

Вопрос: Нахождение корней уравнения методом деления отрезка пополам


Добрый день,что не так с 3-ьим корнем,никак не хочет выводится.Сверху - 3 корня через подбор параметра.Снизу - методом половинного деления. Округление 0,001 Уравнение x^3-2*x^2-x+2 Кто-нибудь может подправить или дать полезный совет,что не так?

Ответ: furymaxim , скобки пропустили

Вопрос: Дешифрование методом Плэйфера в MS Excel


Пожалуйста Подскажите как сделать дешифратор в EXCEL с помощью формул. Или скажите с помощью какой формулы можно с генерировать алфавит

Ответ: В ячейку А1

Code
1 = СИМВОЛ(192 + СТРОКА() - 1 )

И протянуть вниз

Вопрос: Тормозит файл-таблица Excel


Доброго времени суток, уважаемые коллеги!
Очень нужна ваша помощь, уже перепробовал все найденные и известные мне методы по уменьшению объема файла. Вроде бы все лишнее там вычистил.
Не смотря на это при работе с таблицей идут тормоза и подвисает, причем они переменны но стабильны (то тормозит, то не тормозит).
мне кажется, что возможно это из-за выпадающего списка с фотографиями, заметил что по мере увеличения выпадающих списков с фотками - увеличиваются и тормоза. Но странно, таблицы все маленькие, галлерея с фотками тоже не большая.

Ответ: Проблему решил! Просто установив excel 2016 для Mac - вообще никаких тормозов, пока все работает отлично, но не уверен что дальше не столкнусь с этим опять!
Тем не менее, проблема актуальна, т.к. решение не через установку другой версии excel, возможно, кому-то еще пригодится
p.s. предыдущая версия excel была 2011 для Mac

Вопрос: Office 2007 как установить excel 2010


всем привет.
может название темы не совсем точно передает суть(((, но....
у меня win xp sp3 office 2007 Года и excel 2007года.
в excel то ли 2010 то ли 2013 есть функция диаграмм в виде карт стран или континентов powerview или как там точно. там еще карты бин используются.
есть ли какие надстройки для excel2007 чтобы такие диаграммы можно было. если нет, то в каком excel есть эта функция и есть ли возможность установить 2 excel на 1 комп. к примеру 2007 и 2010 на win xp sp3 если функция диаграмм с картами стран есть в 2010????
спасибо.

Ответ: так а в 2010 excel это есть?? и если есть то как установить excel 2010 не удаляя мой офис 2007???

Добавлено через 3 часа 10 минут
ща смотрел похожие темы. нашел про libreoffice. программа такая как офис только бесплатная. мб у кого-нибудь есть карта Республики Беларусь для это программ????. там расширение geoOOo.

Вопрос: Получение выборки из Excel


Мне требуется на основе данных из Excel файла создать презентацию в PowerPoint.

Ни с тем, ни с другим раньше не работал. Поэтому проверьте алгоритм (наброски):
Получаю с помощью запросов необходимые выборки,
Связываю результаты выборок с шаблоном (пока не читал, как программно создаётся презентация)
Создаю, собственно, презентацию.
И всё это прописываю в макросе.

1. Последовательность правильная?
2. Как мне работать с данными полученными с помощью запросов? Записать их временно; результат каждого запроса на отдельном листе, а после создания файла-презентации закрыть БЕЗ ИЗМЕНЕНИЙ файл Excel? Или как-то по другому?
3. Как правильно написать подобный запрос?
Мой набросок не работает:

Запись результатов запроса из первого листа на второй.
4. Как этот запрос запустить

Код Visual Basic
1 DoCmd.RunSQL strSQL

Что-то типа этого?

Добавлено через 2 часа 42 минуты
Или такое возможно только через временную БД Access?

Ответ: В смысле сюда? На форум? - Пожалуйста... Дело то не в данных, а в запросах (способах обработки). В Access я это делаю, в Excel - не могу. Например подсчитать продажи для 3-х производителей с самыми большими продажами (ТОП 3), а остальных - суммировать. Я так понимаю - это не автоматизировать... Руками - Да, можно сделать.

Вопрос: Как добавить имена вложений Outlook в Excel с последующим сохранением их в указанной папке


Добрый день всем гуру Excel-я.

Благодаря этому форуму мне получилось наладить документооборот в Excel (точнее регистрацию входящих-исходящих писем) в более-менее автоматизированном виде.
В приложенном файле следующие основные макросы:
1. "Первое_MailSave" - прописывает письма из папки входящие Outlook
2. "Второе_в_шаблон" - выдает входящий номер и выводит данные в определенный шаблон (одобренный руководством в плане удобочитаемости)
3. "Завершение_Печать" - сохраняет лист шаблона в формате pdf в папке с входящим номером и пускает на печать.
Т.е. счастье есть, теперь полная обработка 10 писем занимает 3-4 минуты, а не 30-40.

Проблема с обработкой вложений:
1. Как не в ручную прописывать кол-во вложений в письме, а автоматом с выводом в ячейку E4 листа "data" количества + 1 (само письмо)
2. Как в листе "Шаблон" в В5 перечислить все вложения по именам
3. Что добавить в макрос "Завершение_Печать", чтобы вложения сохранялись в новосозданную папку с самим письмом.

Все данные из письма забираются, а вот с вложением так и не придумал как(см.код)

Код Visual Basic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Sub Первое_MailSave() Application.EnableEvents = False Dim oOutlook As New Outlook.Application Dim oNamespace As Outlook.Namespace Dim myFolder As Outlook.Folder Dim myMail As Outlook.Items Dim myItem As Outlook.MailItem Dim r Set oNamespace = oOutlook.GetNamespace("MAPI" ) "папка в Outlook, откуда сохраняем письма "если письма нужны из вложенной папки, то записывается в следующем виде: Set myMail = myFolder.Items Cells.Clear Cells(3, 2) = "От кого" "Cells(1, 2) = "E-mail" "Cells(1, 3) = "Кому" Cells(3, 3) = "Тема" Cells(3, 1) = "Дата" Cells(3, 4) = "Тело письма" Cells(3, 5) = "Кол-во страниц" r = 4 For Each myItem In myMail On Error Resume Next Cells(r, 2) = myItem.SenderName " Cells(r, 3) = myItem.To Cells(r, 3) = myItem.Subject Cells(r, 1) = myItem.CreationTime Cells(r, 4) = myItem.Body On Error GoTo 0 r = r + 1 Next Application.EnableEvents = True "отключаем обработку события End Sub

Поиски в интернете все ссылаются на макросы для outlook, но регистрация и создание необходимых директорий у меня происходит в excel, соответственно все переменные в нем же.
С одной стороны, у меня три разных вопроса, но, мне кажется, что оптимальнее будет реализовать все три вопроса в одном макросе.

С уважением, Лев

Ответ: В итоге получился полный и автоматизированный документооборот.
Для переноса писем с вложениями в excel и соотв. папки

Код Visual Basic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 Sub Ïåðâîå_MailSave() Application.EnableEvents = False Dim oOutlook As New Outlook.Application Dim oNamespace As Outlook.Namespace Dim myFolder As Outlook.Folder Dim myMail As Outlook.Items Dim myItem As Outlook.MailItem Dim r Set oNamespace = oOutlook.GetNamespace("MAPI" ) "ГЇГ*ГЇГЄГ* Гў Outlook, îòêóäГ* ñîõðГ*Г*ГїГҐГ¬ ГЇГЁГ±ГјГ¬Г* Set myFolder = oNamespace.GetDefaultFolder(olFolderInbox) "åñëè ГЇГЁГ±ГјГ¬Г* Г*ГіГ¦Г*Г» ГЁГ§ âëîæåГ*Г*îé ГЇГ*ГЇГЄГЁ, ГІГ® Г§Г*ïèñûâГ*ГҐГІГ±Гї Гў ñëåäóþùåì âèäå: ".Folders("webley").Folders("test") Set myMail = myFolder.Items destinationFolder = "E:\temp\test\Att\" Êîëè÷åñòâî = 0 ÏîÈìåГ*Г*Г¬ = "" Cells.Clear Cells(3, 2) = "ГЋГІ êîãî" "Cells(1, 2) = "E-mail" "Cells(1, 3) = "Êîìó" Cells(3, 3) = "Г’ГҐГ¬Г*" Cells(3, 1) = "Г„Г*ГІГ*" Cells(3, 4) = "ÑîäåðæГ*Г*ГЁГҐ" Cells(3, 5) = "Êîë-ГўГ® Г±ГІГ°Г*Г*ГЁГ¶" Cells(3, 6) = "ÂëîæåГ*ГЁГї" r = 4 For Each myItem In myMail On Error Resume Next ""<<<<<<<<<<<<<<< 3 Гў îäГ*îì >>>>>>>>>>>>>> Set colAttachments = myItem.Attachments Êîëè÷åñòâî = colAttachments.Count + 1 For Each objAttachment In colAttachments MkDir (destinationFolder & myItem.SenderName) destinationFolder1 = (destinationFolder & myItem.SenderName) objAttachment.SaveAsFile (destinationFolder1 & "/" & objAttachment.Filename) ÏîÈìåГ*Г*Г¬ = ÏîÈìåГ*Г*Г¬ & objAttachment.Filename & "; " Next ""<<<<<<<<<<<<<<<>>>>>>>>>>>>>> Cells(r, 2) = myItem.SenderName " Cells(r, 2) = myItem.SenderEmailAddress " Cells(r, 3) = myItem.To Cells(r, 3) = myItem.Subject Cells(r, 1) = myItem.CreationTime Cells(r, 4) = myItem.Body Cells(r, 5) = Êîëè÷åñòâî Cells(r, 6) = ÏîÈìåГ*Г*Г¬ On Error GoTo 0 r = r + 1 Next Application.EnableEvents = True "îòêëþ÷Г*ГҐГ¬ îáðГ*áîòêó ñîáûòèÿ End Sub

Ответ: Строго в модуль книги ThisWorkbook(ЭтаКнига) личной книги макросов Personal.xls(xlsb)

Visual Basic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Private Declare Function LoadKeyboardLayout _ Lib "user32.dll" Alias "LoadKeyboardLayoutA" (_ ByVal pwszKLID As String , _ ByVal flags As Long ) As Long Private WithEvents xlApp As Application Private Sub Workbook_Open() Set xlApp = Application End Sub Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook) If LCase(Wb.Name) = "имя_книги.xls" Then LoadKeyboardLayout "00000409" , &H1 Else LoadKeyboardLayout "00000419" , &H1 End If End Sub

Большинство алгоритмов нахождения корней уравнения позволяют найти, как правило, лишь один корень на заданном промежутке. К наиболее известным методам относятся методы:

  • Метод простых итераций
  • Метод Ньютона
  • Модифицированный метод Ньютона
  • Метод Рыбакова
  • Метод дихотомии
  • Метод каскадного приближения
  • Метод хорд
  • Комбинированный метод секущих-хорд
  • Метод Эйткина – Стеффенсона
  • Метод обратной квадратичной интерполяции – экстраполяции и др.

Количество методов нахождения корней велико, как и различных алгоритмов сортировок.

Мной рассмотрен метод дихотомии, взятый из файла MM6.PDF. Посмотрите код примера. Он составлен с применением старого, но излюбленного ранее оператора Go TO. С точки зрения структурного программирования использование такого оператора недопустимо, но зато эффективно. В литературе к данной заметке приложено несколько ссылок на найденные мной специально материалы, в том числе на справочник алгоритмов Дьяконова. Когда то, он был настольным у меня. Старые версии Бейсик кишат операторами типа Go TO. В старых версиях Бейсика используется и оператор присваивания LET.

Версий Бейсика существует множество. Мне когда-то пришлось часто переводить программы с одной версии на другую. А впервые с одной из версий Бейсика я познакомился в году 1980 в институте геофизики, куда мы ездили навещать с другом его брата. Он занимался методом магнитного ядерного резонанса. Все расчеты по обработке результатов опытов производились с применением мини ЭВМ иностранного производства и на языке Бейсик. Затем этот язык появился на довольно мощной по тому времени «Искра-226», ну и на знаменитой БК-10, используемой с середины 80-х в классах в школах. В 1983-1984 годах в Харькове я увидел первую PC. У ней было лишь 2 гибких дисковода на 2 разных типа дискет и объем памяти порядка 560 Мб, а основным языком программирования был Форт. Это язык стеков, который успешно применялся в управлении радиотелескопами. На этом языке просто реализовывалась графика.

Все основные алгоритмы сортировок и вычислительных методов были реализованы в большинстве случаев ещё для языков АЛГОЛ и ФОРТРАН в середине 50-х годов.

Теперь о примере. Там приведены решения 2-х разных уравнений. Первое уравнение X*X-5*SIN(X). Очевидно что синус меняется от -1 до +1. Следовательно 5*синус меняется от -5 до +5. Квадрат Х растет намного быстрее. Следовательно, можно предположить, что корни будут при значениях Х около в диапазоне вблизи 0 или 2. Лучше построить сначала график, чтобы проанализировать диапазон, в котором находятся корни. На графике видно, что корней должно быть 2. В примере мы нашли лишь один из корней, потому что задали один из интервалов.

Во втором уравнении X*X*X-X+1 мы видим кубическую параболу с корнем вблизи -1.

Свои уравнения Вы можете заменять в макросе. Можно ли составить программы без операторов GOTO? – Конечно, можно.

а

Пусть корень уравнения (1) отделен на отрезке . Требуется найти значение корня с точностью ε .

"Процедура уточнения положения корня заключается в построении последовательности вложенных друг в друга отрезков, каждый из которых содержит корень уравнения. Для этого находится середина текущего интервала неопределенности (6) :

В в качестве следующего интервала неопределенности из двух возможных выбирается тот, на концах которых функция F(x)=0 имеет разные знаки"[8 ]. "Точность будет достигнута, если:

Корень уравнения вычисляется по формуле x=(a n +b n)/2 (7) "[1 ].

Пусть дана задача следующего характера: Уточнить корни уравнения cos(2x)+x-5=0 методом половинного деления с точностью до 0,00001, используя:

1. Mathcad ;

Для того чтобы уточнить корни уравнения cos(2x)+x-5=0 методом половинного деления, используя Excel, необходимо выполнить следующие действия:

1. Заполнить ячейки A1:H1 последовательно следующим образом: a, b, c=(a+b)/2, f(a), f(b), f(c), |b-a|<=2*e, e.

2. Ввести в ячейку A2 число 5, в ячейку B2 - число 6.

3. В ячейку B2 ввести формулу: =(A2+B2)/2.

4. В ячейку D2 ввести формулу: =cos(2*A2)+A2-5, скопировать эту формулу в ячейки E2:F2.

5. Ввести в ячейку G2 формулу: =ЕСЛИ(ABS(B2-A2)<=2*$H$2;C2;"-").

6. Ввести в ячейку H2 число 0,00001.

7. В ячейку A3 ввести формулу: =ЕСЛИ(D2*F2<0;A2;C2).

8. В ячейку B3 ввести формулу: =ЕСЛИ(D2*F2<0;C2;B2).

9. Диапазон ячеек C2:G2 скопировать в диапазон ячеек C3:G3.

10. Выделить диапазон ячеек A3:G3 и с помощью маркера заполнения заполнить все нижестоящие ячейки до получения результата в одной из ячеек столбца G (это ячейки A3:G53).

В итоге получаем следующее:

Ответ: Корень уравнения cos(2x)+x-5=0 равен 5,32977.

  1. Метод хорд

Берілген әдісті шешу үшін y=F(x) функциясын құру керек

" Для реализации данного метода, нужно построить исходную функциюy=F(x) и найти значения функции на концах отрезка F(a) и F(b) . Затем провести хорду М 1 M 2 c концами в точкахМ 1 (a, F(a)) и M 2 (b, F(b)). Абсцисса точки пересечения хорды М 1 M 2 с осью OX это и есть приближенный кореньx 1 . Далее найти точкуM 3 (X 1 ,F(x 1)) , построить следующую хорду и найти второй приближенный корень x 2 . И так далее. В зависимости от поведения функции возможны два случая :

Для первого случая (Рис. 1) справедлива следующая формула (8) :

и справедливо неравенство: F(a)*F""(a)>0, где x 0 =b.

Для второго случая (Рис. 2) справедлива следующая формула (9) :

и справедливо неравенство: F(b)*F""(b)>0 , где x 0 =a .

Условия сходимости метода секущих аналогичны условиям сходимости метода Ньютона, т. е."[1 ]

Пусть дана задача: Уточнить корни уравнения cos(2x)+x-5=0 методом хорд с точностью до 0,00001, используя:

1. Mathcad ;

Для того чтобы уточнить корни уравнения cos(2x)+x-5=0 методом хорд, используя Excel, необходимо выполнить следующие действия:

1. Выбрать одну из двух предложенных формул для решения задачи, для этого:

o Найти производную первого порядка от функции f(x)=cos(2x)+x-5. Она будет выглядеть следующим образом: f1(x)=-2sin(2x)+1.

o Найти производную второго порядка от функции f(x)=cos(2x)+x-5. Она будет выглядеть следующим образом: f2(x)=-4cos(2x).

o Заполнить ячейки следующим образом:

В ячейку A1 ввести a.

В ячейку A2 ввести цифру 5.

В ячейку B1 ввести b.

В ячейку B2 ввести цифру 6.

В ячейку C1 ввести f(x)=cos(2x)+x-5.

В ячейку C2 ввести формулу =COS(2*A2)+A2-5.

В ячейку D1 ввести f1(x)=-2sin(2x)+1.

В ячейку E1 ввести f2(x)=-4cos(2x).

В ячейку E2 ввести формулу =-4*COS(2*A2).

В ячейку F1 ввести Выбор формулы.

В ячейку F2 ввести формулу =ЕСЛИ(C2*E2>0;"Воспользоваться формулой 8";"Воспользоваться формулой 9").

В ячейку G1 ввести e.

В ячейку G2 ввести цифру 0,00001.

o В итоге получается следующее:

2. Исходя из того, что выбрана формула 9, в Excel необходимо выполнить следующие действия:

o В ячейку A4 ввести xn.

o В ячейку B4 ввести f(xn).

o В ячейку C4 ввести b-xn.

o В ячейку D4 ввести f(xn)*(b-xn).

o В ячейку E4 ввести f(b).

o В ячейку F4 ввести f(b)-f(xn).

o В ячейку G4 ввести xn-f(xn)*(b-xn)/f(b)-f(xn).

o В ячейку H4 ввести |f(xn)|<=e.

o В ячейку A5 ввести цифру 5.

o В ячейку B5 ввести формулу =COS(2*A5)+A5-5.

o В ячейку C5 ввести формулу =$B$2-A5.

o В ячейку D5 ввести формулу =B5*C5.

o В ячейку E5 ввести формулу =COS(2*$B$2)+$B$2-5.

o В ячейку F5 ввести формулу =$E$5-B5.

o В ячейку G5 ввести формулу =A5-(B5*C5/F5).

o В ячейку H5 ввести формулу =ЕСЛИ(ABS(B5)<=$G$2;A5;"-").

o В ячейку A6 ввести формулу =G5.

o Выделить диапазон ячеек B5:D5 и скопировать его методом протягивания в диапазон ячеек B6:D6.

o Выделить диапазон ячеек F5:H5 и скопировать его методом протягивания в диапазон ячеек F6:H6.

o Выделить диапазон ячеек A6:H6 и скопировать его методом протягивания в диапазон ячеек ниже до получения результата в одной из ячеек столбца H (A6:H9).

В итоге получаем следующее:

Ответ: Корень уравнения cos(2x)+x-5=0 равен 5,32976.

Методы уточнения корней

После того как найден интервал, содержащий корень, применяют итерационные методы уточнения корня с заданной точностью.

Метод половинного деления (другие названия: метод бисекций , метод дихотомии ) для решения уравнения f (x ) = 0 заключается в следующем . Пусть известно, что функция непрерывна и принимает на концах отрезка
[a , b ] значения разных знаков, тогда корень содержится в интервале (a , b ). Разделим интервал на две половины и дальше будем рассматривать ту половину, на концах которой функция принимает значения разных знаков. Этот новый отрезок снова делим на две равные части и выбираем из них ту, которая содержит корень. Этот процесс продолжается до тех пор, пока длина очередного отрезка не станет меньше требуемой величины погрешности. Более строгое изложение алгоритма метода половинного деления:

1) Вычислим x = (a + b )/2; вычислим f (x );

2) Если f (x ) = 0, то переходим к пункту 5;

3) Если f (x )∙ f (a ) < 0, то b = x , иначе a = x ;

4) Если |b a | > ε, переходим к пункту 1;

5) Выводим значение x ;

Пример 2.4. Уточнить методом бисекций с точностью до 0,01 корень уравнения (x – 1) 3 = 0, принадлежащий отрезку .

Решение в программе Excel :

1) В ячейках A 1:F 4 введем обозначения, начальные значения и формулы, как показано в таблице 2.3.

2) Каждую формулу скопируем в нижние ячейки маркером заполнения до десятой строки, т.е. B 4 - до B 10, C 4 - до C 10, D 3 - до D 10, E 4 - до E 10, F 3 - до F 10.

Таблица 2.3

A B C D E F
f(a)= =(1-B3)^3
k a x f(x) b b-a
0,95 =(B3+E3)/2 =(1-C3)^3 1,1 =E3-B3
=ЕСЛИ(D3=0;C3; ЕСЛИ(C$1*D3<0;B3;C3)) =ЕСЛИ(C$1*D3>0; E3;C3)

Результаты расчетов приведены в табл. 2.4. В столбце F проверяем значения длины интервала b a . Если значение меньше чем 0,01, то в данной строке найдено приближенное значение корня с заданной погрешностью. Потребовалось 5 итераций для достижения требуемой точности. Приближенное значение корня с точностью до 0,01 после округления до трех знаков равно 1,0015625 ≈ 1,00.

Таблица 2.4

A B C D E F
f(a)= 0,000125
k a x f(x) b b-a
0,95 1,025 -2E-05 1,1 0,15
0,95 0,9875 2E-06 1,025 0,075
0,9875 1,00625 -2E-07 1,025 0,0375
0,9875 0,996875 3,1E-08 1,00625 0,0187
0,996875 1,0015625 -4E-09 1,00625 0,0094
0,996875 0,9992188 4,8E-10 1,0015625 0,0047
0,99921875 1,0003906 -6E-11 1,0015625 0,0023
0,99921875 0,9998047 7,5E-12 1,000390625 0,0012


Приведенный алгоритм учитывает возможный случай «попадания в корень», т.е. равенство f (x ) нулю на очередном этапе. Если в примере 2.3 взять отрезок , то на первом же шаге попадаем в корень x = 1. Действительно, запишем в ячейке B 3 значение 0,9. Тогда таблица результатов примет вид 2.5 (приведены только 2 итерации).

Таблица 2.5

A B C D E F
f(a)= 0,001
k a x f(x) b b-a
0,9 1,1 0,2

Создадим в программе Excel пользовательские функции f(x) и bisect(a, b, eps) для решения уравнения методом половинного деления, пользуясь встроенным языком Visual Basic . Их описания приведены ниже:

Function f(Byval x)

Function bisect(a, b, eps)

1 x = (a + b) / 2

If f(x) = 0 Then GoTo 5

If f(x) * f(a) < 0 Then

If Abs(a - b) > eps Then GoTo 1

Функция f(x) определяет левую часть уравнения, а функция
bisect(a, b, eps) вычисляет методом половинного деления корень уравнения f (x ) = 0. Обратим внимание на то, что в функции bisect(a, b, eps) используется обращение к функции f(x). Приведем алгоритм создания пользователькой функции:

1) Выполним команду меню «Сервис - Макрос - Редактор Visual Basic ». Откроется окно «Microsoft Visual Basic ». Если в данном файле программы Excel ещё не были созданы макросы или пользовательские функции или процедуры, это окно будет иметь вид, изображенный на рис.2.4.

2) Выполним команду меню «Insert - Module» и вводим тексты программ-функции, как показано на рис 2.5.

Теперь в ячейках листа программы Excel можно в формулах использовать созданные функции. Например, введем в ячейку D 18 формулу

Bisect(0,95;1;0,00001),

то получим значение 0,999993896.

Чтобы решить другое уравнение (с другой левой частью) нужно перейти в окно редактора с помощью команды «Сервис - Макрос - Редактор Visual Basic » и просто переписать описание функции f(x). Например, найдем с точностью до 0,001 корень уравнения sin5x + x 2 – 1 = 0, принадлежащий интервалу (0,4; 0,5). Для этого изменим описание функции

на новое описание

f = Sin(5 * x) + x ^ 2 - 1

Тогда в ячейке D 18 получим значение 0,441009521 (сравните этот результат со значением корня из интервала (0,4; 0,5), найденным в примере 2.3!).

Для решения уравнения методом половинного деления в программе Mathcad создадим подпрограмму-функцию bisec (f , a , b , ε), где:

f - имя функции, соответствующее левой части уравнения f (x ) = 0;

a , b - левый и правый концы отрезка [a , b ];

ε - точность приближенного значения корня.

Решение примера в программе Mathcad :

1) Запускаем программу Mathcad. Введем определение функции bisec (f , a , b , ε). Для этого с помощью клавиатуры и панели инструментов «Греческие символы» набираем bisec (f , a , b , ε):=. После знака присваивания «:=» на панели инструментов «Программирование» указателем мыши щелкаем левой кнопкой «Add line». После знака присваивания появится вертикальная линия. Далее вводим текст программы, который приведен ниже, используя панель инструментов «Программирование» для ввода знака «←», оператора цикла while , оператора break и условного оператора if otherwise .

2) Введем определение функции f (x ):=sin(5*x)+x^2–1, а затем вычислим значение корня с помощью функции bisec при заданных значениях:
bisec (f , –0.8,–0.7,0.0001)=. После знака «=» автоматически появится вычисленное программой значение корня –0,7266601563. Аналогично вычислим остальные корни.

Ниже приведен лист Mathcad с определением функции bisec (f , a , b , ε) и расчетами:

Приведем программу на языке C ++ для решения уравнения f (x ) = 0 методом половинного деления:

#include

#include

double f(double x);

typedef double (*PF)(double);

double bisec(PF f,double a, double b,double eps);

double a, b, x, eps;PF pf;

cout << "\n a = "; cin >> a;

cout << "\n b = "; cin >> b;

cout << "\n eps = "; cin >> eps;

x = bisec(pf,a,b,eps); cout << "\n x = " << x;

cout << "\n Press any key & Enter "; cin >> a;

double f(double x){

r = sin(5*x)+x*x-1;

double bisec(PF f, double a, double b,double eps){

do{ x = (a + b)/2;

if (f(x) == 0) break;

if (f(x)*f(a)<0) b = x;

}while (fabs(b-a) > eps);

В программе функция f (x ) определена для решения уравнения

sin5x + x 2 – 1 = 0

из примера 2.3. Результат работы программы для определения корня из интервала (0,4; 0,5) с точностью 0,00001 представлен ниже (экран компьютера):

Press any key & Enter

Последняя строка нужна для организации паузы для просмотра результата.

Иванов Иван

При прохождении темы численные методы учащиеся уже умеют работать с электронными таблицами и составлять программы на языке паскаль. Работа комбинированного характера.Расчитана на 40 минут. Цель работы повторить и закрепить навыки паботы с программами EXCEL, ABCPascal. Материал содержит 2 файла. Один содержит теоретический материал, так как он и предлагается ученику. Во 2-м файле пример работы ученика Иванова Ивана.

Скачать:

Предварительный просмотр:

Решение уравнений

Аналитическое решение некоторых уравнений, содержащих, например тригонометрические функции может быть получено лишь для единичных частных случаев. Так, например, нет способа решить аналитически даже такое простое уравнение, как cos x=x

Численные методы позволяют найти приближенное значение корня с любой заданной точностью.

Приближённое нахождение обычно состоит из двух этапов:

1) отделение корней, т.е. установление возможно точных промежутков , в которых содержится только один корень уравнения;

2) уточнение приближённых корней, т.е. доведение их до заданной степени точности.

Мы будем рассматривать решения уравнений вида f(x)=0. Функция f(x) определена и непрерывна на отрезке [а.Ь]. Значение х 0 называется корнем уравнения если f(х 0 )=0

Для отделения корней будем исходить из следующих положений:

  • Если f(a)* f(b] \a, b\ существует, по крайней мере, один корень
  • Если функция y = f(x) непрерывна на отрезке , и f(a)*f(b) и f "(x) на интервале (a, b) сохраняет знак, то внутри отрезка [а, b] существует единственный корень уравнения

Приближённое отделение корней можно провести и графически. Для этого уравнение (1) заменяют равносильным ему уравнением р(х) = ф(х), где функции р(х) и ф(х] более простые, чем функция f(x). Тогда, построив графики функций у = р(х) и у = ф(х), искомые корни получим, как абсциссы точек пересечения этих графиков

Метод дихотомии

Для уточнения корня разделим отрезок [а, b] пополам и вычислим значение функции f(х) в точке x sr =(a+b)/2. Выбираем ту из половин или , на концах которых функция f(x) имеет противоположные знаки.. Продолжаем процесс деления отрезка пополам и проводим то же рассмотрение до тех пор, пока. длина станет меньше заданной точности . В последнем случае за приближённое значение корня можно принять любую точку отрезка (как правило, берут его середину). Алгоритм высокоэффективен, так как на каждом витке (итерации) интервал поиска сокращается вдвое; следовательно, 10 итераций сократят его в тысячу раз. Сложности могут возникнуть с отделением корня у сложных функций.

Для приближенного определения отрезка на котором находится корень можно воспользоваться табличным процессором, построив график функции

ПРИМЕР : Определим графически корень уравнения . Пусть f1(х) = х , a и построим графики этих функций. (График). Корень находится на интервале от 1 до 2. Здесь же уточним значение корня с точностью 0,001(на доске шапка таблицы)

Алгоритм для программной реализации

  1. а:=левая граница b:= правая граница
  2. m:= (a+b)/2 середина
  3. определяем f(a) и f(m)
  4. если f(a)*f(m)
  5. если (a-b)/2>e повторяем, начиная с пункта2

Метод хорд.

Точки графика функции на концах интервала соединяются хордой. Точка пересечения хорды и оси Ох (х*) и используется в качестве пробной. Далее рассуждаем так же, как и в предыдущем методе: если f(x a ) и f(х*) одного знака на интервале, нижняя граница переносится в точку х*; в противном случае – переносим верхнюю границу. Далее проводим новую хорду и т.д.

Осталось только уточнить, как найти х*. По сути, задача сводится к следующей: через 2 точки с неизвестными координатами (х 1 , у 1 ) и (х 2 , у 2 ) проведена прямая; найти точку пересечения этой прямой и оси Ох.

Запишем уравнение прямой по двум точках:

В точке пересечения этой прямой и оси Ох у=0, а х=х*, то есть

Откуда

процесс вычисления приближённых значений продолжается до тех пор, пока для двух последовательных приближений корня х„ и х п _1 не будет выполняться условие abs(xn-x n-1 ) е - заданная точность

Сходимость метода гораздо выше предыдущего

Алгоритм различается только в пункте вычисления серединной точки- пересечения хорды с осью абсцисс и условия останова (разность между двумя соседними точками пересечения)

Уравнения для самостоятельного решения: (отрезок в excel ищем самостоятельно)

  1. sin(x/2)+1=x^2 (х=1,26)
  1. x-cosx=0 (х=0,739)
  1. x^2+4sinx=0 (х=-1,933)
  1. x=(x+1) 3 (х=-2,325)