Реферат: НАХОЖДЕНИЕ ВСЕХ ДЕЙСТВИТЕЛЬНЫХ КОРНЕЙ АЛГЕБРАИЧЕСКОГО МНОГОЧЛЕНА МЕТОДОМ ДЕЛЕНИЯ ОТРЕЗКА ПОПОЛАМ (БИСЕКЦИИ) И МЕТОДОМ ХОРД И КАСАТЕЛЬНЫХ С УКАЗАННОЙ ТОЧНОСТЬЮ И УЧЕТОМ ВОЗМОЖНОЙ КРАТНОСТИ КОРНЕЙ

ФедеральнаяАвиационная Служба России

МОСКОВСКИЙГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ

 

Кафедраприкладной математики

 

 Курсовая работа защищена

 с оценкой _________________.

 .__________________________.

 Руководитель

 доцент, к.т.н.  Лукина О. П.

 .__________________________.

подпись

КУРСОВАЯ РАБОТА

по теме

 

НАХОЖДЕНИЕ ВСЕХ ДЕЙСТВИТЕЛЬНЫХКОРНЕЙ АЛГЕБРАИЧЕСКОГО МНОГОЧЛЕНА МЕТОДОМ ДЕЛЕНИЯ ОТРЕЗКА ПОПОЛАМ (БИСЕКЦИИ) ИМЕТОДОМ ХОРД И КАСАТЕЛЬНЫХ С УКАЗАННОЙ ТОЧНОСТЬЮ И УЧЕТОМ ВОЗМОЖНОЙ КРАТНОСТИКОРНЕЙ

(Пояснительная записка ккурсовой работе по дисциплине «Численные методы»)

                                                                                                Работу  выполнили

                                                                        студенты5-го курса

                                                                        специальности01.02

                                                                        КозловСергей Александрович

                                                                        /КозловС.А./------------------------.

                                                                        СеменчихинВладимир Владимирович

                                                                        /СеменчихинВ.В./------------------------.


                                                                        28.X/1999года.


МОСКВА — 1999

АННОТАЦИЯ

 

В данной курсовой работе рассмотренпринцип нахождения корней алгебраического многочлена следующими численными методами: метод бисекции,метод хорд и касательных, метод разложения на множители с учетом определяемойточности и проверки кратности корней, а также в среде Visual Basic for Applications 6.0 была разработана программа, реализующаяэтот поиск и проверку. В пояснительной записке приводится описание как самихчисленных методов, так и программы, включая примеры и «экранные копии».

1.  ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Разработать программу для вычислениякорней алгебраического многочлена следующими численными методами: методомполовинного деления, методом хорд и касательных, методом разложения намножители, а также обеспечить вычисление значений корней с указываемойточностью и проверку кратности корней. Среда разработки программы – произвольная.

2.  ПРЕДМЕТНАЯОБЛАСТЬ

 

2.1. Описание численных методов

Численные методы позволяют найти решенияопределенных задач, заранее зная, что полученные результаты будут вычислены сопределенной погрешностью, поэтому для многих численных методов необходимо заранеезнать «уровень точности», которому будет соответствовать полученное решение.

В этой связи задача нахождения корнеймногочлена вида (1)

         

F(x)=a0+a1x+a2x2+…+anxn  (1)

 представляет особый интерес, т.к. формулы нахождения корнейдаже кубического уравнения достаточно сложны, а если необходимо отыскать корнимногочлена, степень которого равна, например, 5 – то без помощи численныхметодов не обойтись, тем боле, что вероятность наличия у такого многочленанатуральных (или целых, или точных корней с с «короткой» дробной частью)довольно мала, а формул для нахождения корней уравнения степени, превышающей 4,не существует.[1]Де-факто все дальнейшие операции будут сводиться лишь к уточнению корней,интервалы которых приблизительно известны заранее. Проще всего эти «приблизительные»корни находить, используя графические методы.

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

2.2.1. Метод хорд и касательных(комбинированный)

Данный метод основан на построениисхематического графика функции, определении интервалов его пересечения с осьюабсцисс и последующим «сжатием» этого интервала при помощи строимых хорд и касательныхк графику этой функции.

Надо отметить, что существуют такжеотдельно метод хорд (дает значение корня с недостатком) и метод касательных (сизбытком). Однако преимущество комбинированного метода заключается в«двустороннем сжатии» рассматриваемого отрезка.

Рассмотрим следующий случай:

-    дана функция F(x) и построен ее график;

-    определенадопустимая  погрешность Q

-    

/> <td/> />
на основании графика определенотрезок [a,b], на котром график функции пересекаетось абсцисс, следовательно, на этом отрезке

        рис.1

-    существует кореньрассматриваемого многочлена. (обозначим его через A)  

Дальнейший алгоритм  сводится к следующимдействиям:

1.   строим касательную к графику функциив точке F(b)

2.   вычисляем координату х пересечениякасательной с осью абсцисс по формуле (3) и обозначаем ее через b’

3.  строим к графикуфункции хорду, проходящую через точки F(a)  и F(b).

4.  Вычисляем точкупересечения хорды с осью абсцисс по формуле (2) и обозначаем ее через a'.

a’=a-Da , где            />                        (2)

/>

b’=b-Db , где                                          (3)

Таким образом мы получаем новыйотрезок [a’,b’], котроый (по определениямхорды и касательной) по-прежнему содержи решение уравнения A.

5.  Теперь принимаемотрезок[a’,b’] за новый отрезок[a,b] и повторяем шаги 1-4 до тех пор,пока разность F(b)-F(a) не станет меньше первоначальнозаложенной погрешности Q.Отметим также, что после этого рекомендуется в качестве искомого решения взятьсреднее арифметическое F(a) иF(b).

Замечание к методу хорд икасательных. Врассмотренном случае производная F’(x)>0, т.е. график «выпуклый» и b>a.При работе с каждым отдельным случаем необходимо находить производные функциипервого и второго порядков и, сообразуясь с ее знаком, определять a и b.

Возможны четыре случая:

/> /> /> /> /> /> <td/> />

            y                                                 y

/> /> /> /> /> /> /> <td/> />

         F(x)                                                                              F(x)    

/> /> /> /> /> /> <td/> />

                                          x                                                 x                  

                   а)                                                      б)

/> /> /> /> /> /> <td/> />

           y                                                 y  

/>/>                                                         

   F(x)                                                  F(x)         

/> /> /> /> /> /> /> /> /> />

                                       x                                                     x                                     в)                                                          г)

а) F’(x) < 0

    F’’(x) > 0

б) F’(x) > 0

    F’’(x) > 0

в) F’(x) < 0

    F’’(x) < 0

г) F’(x) > 0

    F’’(x) < 0

 

Способ хорд

Способ касательных

F’(x)F’’(x) > 0

С недостатком С избытком

F’(x)F’’(x) < 0

С ибытком С недостатком

Таким образом, если хорда (касательная) даетзначение корня с избытком, то этот корень берется с качестве новой правойграницы, а если с недостатком – то левой. В обоих случаях точный корень лежитмежду точками пересечения хорды и касательной с осью абсцисс.

 

Замечание 2 к методу хорд икасательных. Таккак для решения поставленной задачи требуется  отыскание производной функции F(x), метод хорд и касательных достаточнотрудно реализуем на программном уровне, т.к. правила вычисления производных вобщем виде довольно громоздки  для «понимания» ЭВМ; при непосредственном указаниипроизводной для каждой степени многочлена память компьютера серьезно загружается,что очень замедляет работу, а задание функции и, соответственно, ее производнойнепосредственно в программном коде – недопустимо. Однако, используя данныйметод, сходимость интервала к корню происходит наиболее быстро, особенно еслисовместить метод хорд и касательных с методом бисекции, т.к. середина новогоотрезка зачастую дает вполне удовлетворительное решение.


2.2.2. Метод итераций

Пятый шаг алгоритма хорд икасательных определял возврат к первому шагу и последующую цикличность хода, т.е.метод хорд и касательных являлся итерационным. Другой метод, также основанныйна повторах так и был назван – «метод итераций». Суть его заключается в следующем:

-    дана функция F(x);

-    определенадопустимая  погрешность Q;

-    определеннекоторый интервал [ a, b ], точно содержащий решение уравнения.

-    Определенонекоторое число z, принадлежащее [ a, b ] (назовем z «нулевым приближением»)

Для получения следующего приближенияподставим в формулу (1) вместо X Z, получим:

                                 />x1=F(z)                                                          (4)

и, продолжая аналогично,

         

/>                                    x2=F(x1)                                                   

       />x3=F(x2)                                                  (5)

             …

xn=F(xn-1)                                                

                                               

Таким образом, получаем некоторуюпоследовательность, и, если ее предел (6)

                                      limxn=A,    n®v                                   (6)

то А является искомым корнем.

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

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

-    наконец,полученная последовательность просто может не сходиться, и тогда решениенайдено не будет.

Эти контраргументы стали основанием для отклонения методаитераций при выборе алгоритмизируемого метода.


2.2.3. Метод половинного деления (методбисекции)

/> <td/> />
                                                                             рис.2

Метод половинного деления (известныйеще и как «метод деления отрезка пополам») также является рекурсивным, т.е.предусматривает повторение с учетом полученных результатов.

Суть метода половинного делениязаключается в следующем:

-    дана функция F(x);

-    определенадопустимая  погрешность Q;

-    определеннекоторый интервал [ a, b ], точно содержащий решение уравнения.

1.   Вычисляем значение координаты Е, берясередину отрезка [a, b], т.е. Е= (a + b ) / 2                                                                     (7)

2.   Вычисляем значения F(a), F(b), F(E), и осуществляем следующую проверку:Если F(E)>Q, то корень с указанной точностьюнайден. Если F(E)<Q, т.е. необходимая точность еще недостигнута, то формируем два интервала: [a, E] и [E, b] проверяем знаки F(a), F(b), F(E). На концах одного из этих интерваловзнаки функции будут одинаковы, а на друго различны (иначе Е  — искомый корень).И именно то интервал, на концах  которого знаки различны, мы берем за основупри следующей итерации, т.е. приравниваем к Е либо a, либо  b.

3.  Переходим кпункту 1.

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

/>

                                     

          :               (8),

/>                   (9),

/>

границу положительных корней – по формуле(9):

а границу отрицательных корней –заменив в уравнении (1) х на –х.

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

2.2.4. Метод разложения на множители

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

Пусть дан многочлен F(x) = 2x3-11x2+20x-12                           (11)

Его можно записать в виде: F(x) = (x+2)2(2x-3)                (12)

У многочлена n-степени, как известно, n корней, а из (12) следует, что корнями F(x) являются –2 и 1,5, причем корень –2является кратным, т.е. фактически это два одинаковых корня. При отыскании жекорней любым из вышеописанных методов «второй» корень –2 будет потерян, т.к.график функции будет иметь лишь две точки пересечения с осью абсцисс

Чтобы избежать этого применяетсяметод разложения на множители. Суть его заключается в следующем: каждыймногочлен вида (1) можно представить в виде           (x+h1)(x+h2)…(x+hn)*H= 0                  (13) ,

или             F(x) = (x+h)(bn-1xn-1+…b1)+b0               (14)

где h1…hn – корни уравнения, а Н – произведение множителей х, вынесенных за скобки (Н никак не влияет на уравнение, т.к. от него избавляются, деля на Н обе части(13). При этом не исключено, что некоторые h могут быть взаимно равны, что исвидетельствует о наличии кратного корня. 

          Для вычисления значений новых коэффициентов в (14) используютсяформулы:

bn=an

bn-1=bnh+an-1                                                                                  (15)

bn-2=bn-1h+an-2

 …

Таким образом, алгоритм этого метода выглядит следующим образом:

1.  Определитьграницы корней уравнения;

2.  При помощи любогоиз вышеописанных методов найти один корень уравнения;

3.  Применяя формулы(14) и (15) сформировать новый многочлен степени, на 1 меньшей предыдущего.

4.  Вернуться кпункту 2.

5.  Повторять до техпор, пока степень многочлена не обнулится.

Этот метод был реализован на программном уровне и включен вкурсовую работу.

 

3.  ОПИСАНИЕ СТРУКТУРЫ ПРОГРАММЫ

В рамках задания на курсовую работу всреде программирования Visual Basic for Applications была разработана программа, находящая корни многочленас указываемой точностью.

 

3.1. Описание программных модулей

Разработка программы велась с учетомконцепции объектно-ориентированного программирования, поэтому четкоопределенной последовательности действий в ней нет. Однако, разбирая программуна составляющие, можно проследить «путь» алгоритма в коде.

Вся программа состоит из форм имодулей. Модулей всего два: один содержит стандартную процедуру автозапуска(его рассматривать мы не станем), а другой – все «публичные» процедуры ифункции.

Publicfunction F(x). Функция, возвращающая значение многочлена для передаваемогох.

Publicfunction DetectBorders. Возвращает границы корней, согласно формулам ( 7, 8, 9 ).

Publicsub Gra – процедура, «ответственная» засоставление графика.

3.2. Описание форм

В формах заключена основная частьпрограммы, в том числе и собственно алгоритм метода половинного деления.Решение «упаковать» эти функции в формы было продиктовано следующими причинами:

-    сокращение объемазанимаемой памяти и, как следствие, ускорение работы за счет сокращения временижизни переменных;

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

-    каждая формаявляется «вещью в себе» и не зависит от остальных (кроме «корневой»

3.2.1. ФормаForm_Main

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

 

/>

3.2.2. Форма Form_Koeff

В этой форме задаются коэффициенты многочлена.

Замечание. Для задания коэффициента а0необходимо указать значение степени х равным 0.

/>

3.2.3.Форма Form_Mnogo

/> <td/> />
Выводит на экран общий видзаданного многочлена, а также производных первого и второго порядков

3.2.4.Форма Form_WP

Эта форма по существу является панелью управления в режимеграфика и позволяет его распечатать или закрыть.

/>

3.2.5. ФормаForm_Korni

«Основная форма» – именно в ней заключен сам алгоритм поискакорней (SubFindKor) методами бисекции и хорд/касательных.

/>

В качестве свойств в объекте «форма» присутствуюттри ключевые процедуры, реализующие собственно алгоритмы нахождения корней и нахожденияпроизводной.

Publicsub FF* – процедура, «ответственная» занахождение производной.

Publicsub Horda_Kasatelnye –процедура, реализующая поиск корней по алгоритму хорд и касательных.

Publicsub Find_Kor – процедура,реализующая поиск корней по алгоритму половинного деления отрезка.

Замечание. Алгоритмы нахождения крней описаны вглаве 2. Суть же алгоритма нахождения производной сводится к простому перемножениюкоэффициента и степени и уменьшению значения степени на единицу. Это позволяеткорректно определить производную, при этом корректно «избавиться» от конечнойконстанты.

4.  АНАЛИЗ РЕЗУЛЬТАТОВ

В результате выполнения задания накурсовую работу была создана программа VI Function 2.0 , находящая корни алгебраическогомногочлена вида (1) с указываемой точностью посредством следующих методов:

·    метод деленияотрезка пополам;

·    метод хорд икасательных (комбинированный)

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

Фактические результаты совпали сформальными.

5.  СПИСОК ЛИТЕРАТУРЫ

1.  Гутер Р.С.,Овчинский Б.В. «Элементы численного анализа и математический обработкирезультатов опыта». Москва, «Наука», 1979

2.  Калиткин Н.Н.«Численные методы». Москва, «Наука», 1978

3.  Крылов В.И.,БабковВ.В., Монастырский П.И. «Вычислительные методы». Москва, «Наука», 1976

4.  П. Санна. «Visual Basic forApplications 6.0 «вподлиннике», Киев, BHV

6. ПРИЛОЖЕНИЯ

6.1. Пример алгебраического многочлена и нахождения его

корней

Многочлен F(x) = 3x2+5x-8

График представлен на рис. 6.1

/>Точность Q = 0,0001

Найденные корни         x = -2,66666669921875                   метод

/>                                      x=0,99991015625                           бисекции

Найденные корни         x = -2,66667654214111                   метод

                                      x= 0,99981915025                           хорди касательных

/>

                                                                                                          рис.6.1

6.2. Блок-схема алгоритма половинногоделения

A = левая граница

В = правая граница

C – середина

F(x) — функция

/>



6.3. Блок-схема алгоритма поиска корнейметодом хорд и касательных

A = левая граница

В = правая граница

F(x) — функция

/> 



6.4 Руководство пользователя.

После запуска программы перед Вами появится Главное меню,включающее в себя следующие пиктограммы:

СОХРАНИТЬ Сохраняет файл со всеми сделанными изменениями

ПРОСМОТР ФУНКЦИИ

Выводит на экран окно, в котором отображается вид многочлена, а также вид производных первого и второго порядков (Выбор осужествляется нажатием кнопок F’(X), F”(X), F(X)

ВВОД КОЭФФИЦИЕНТОВ

Выводит на экран окно ввода коэффициентов

ГРАФИК

Выводит график функции

ПОИСК КОРНЕЙ

Отображает окно, управляющее поиском корней

О ПРОГРАММЕ

Выводит окно «О программе»

ВЫХОД

Завершает работу програмы, предварительнозадавая вопрос о сохранении изменений

Ввод коэффициентов осуществляется следующим образом: впоявившемся окне имеются 2 поля – одно для указания степени, другое для вводасобственно коэффициента. Если Вы уже вводили некоторую функцию, то для ееудаления нажмите кнопку “очистить”, для запоминания коэффициента нажмите “Ок”,для завершеня ввода – “завершить”.

Поиск корней упрощен до предела. Вам достаточноуказать неоюходимую точность и выбрать метод поиска: бисекционый иликомбинированный.

6.5. Исходный текст программы

UNIT1

Dimcurcell As Range

Dim ma AsDouble

Dim Ao AsDouble

PublicFunction F(x As Variant)

F = (x ^20 * Range(«a20»).Value) + (x ^ 19 * Range(«a19»).Value) +(x ^ 18 * Range(«a18»).Value) + (x ^ 17 *Range(«a17»).Value) + (x ^ 16 * Range(«a16»).Value) + (x ^15 * Range(«a15»).Value) + (x ^ 14 * Range(«a14»).Value) +(x ^ 13 * Range(«a13»).Value) + (x ^ 12 *Range(«a12»).Value) + (x ^ 11 * Range(«a11»).Value) + (x ^10 * Range(«a10»).Value) + (x ^ 9 * Range(«a9»).Value) + (x^ 8 * Range(«a8»).Value) + (x ^ 7 * Range(«a7»).Value) + (x^ 6 * Range(«a6»).Value) + (x ^ 5 * Range(«a5»).Value) + (x^ 4 * Range(«a4»).Value) + (x ^ 3 * Range(«a3»).Value) + (x^ 2 * Range(«a2»).Value) + (x * Range(«a1»).Value) +Range(«a21»).Value

EndFunction

PublicFunction F1(x As Variant)

F1 = (x ^20 * Range(«j20»).Value) + (x ^ 19 * Range(«j19»).Value) +(x ^ 18 * Range(«j18»).Value) + (x ^ 17 *Range(«j17»).Value) + (x ^ 16 * Range(«j16»).Value) + (x ^15 * Range(«j15»).Value) + (x ^ 14 * Range(«j14»).Value) +(x ^ 13 * Range(«j13»).Value) + (x ^ 12 * Range(«j12»).Value)+ (x ^ 11 * Range(«j11»).Value) + (x ^ 10 *Range(«j10»).Value) + (x ^ 9 * Range(«j9»).Value) + (x ^ 8* Range(«j8»).Value) + (x ^ 7 * Range(«j7»).Value) + (x ^ 6* Range(«j6»).Value) + (x ^ 5 * Range(«j5»).Value) + (x ^ 4* Range(«j4»).Value) + (x ^ 3 * Range(«j3»).Value) + (x ^ 2* Range(«j2»).Value) + (x * Range(«j1»).Value) +Range(«j21»).Value

EndFunction

PublicFunction F2(x As Variant)

F2 = (x ^20 * Range(«m20»).Value) + (x ^ 19 * Range(«m19»).Value) +(x ^ 18 * Range(«m18»).Value) + (x ^ 17 *Range(«m17»).Value) + (x ^ 16 * Range(«m16»).Value) + (x ^15 * Range(«m15»).Value) + (x ^ 14 * Range(«m14»).Value) +(x ^ 13 * Range(«m13»).Value) + (x ^ 12 *Range(«m12»).Value) + (x ^ 11 * Range(«m11»).Value) + (x ^10 * Range(«m10»).Value) + (x ^ 9 * Range(«m9»).Value) + (x^ 8 * Range(«m8»).Value) + (x ^ 7 * Range(«m7»).Value) + (x^ 6 * Range(«m6»).Value) + (x ^ 5 * Range(«m5»).Value) + (x^ 4 * Range(«m4»).Value) + (x ^ 3 * Range(«m3»).Value) + (x^ 2 * Range(«m2»).Value) + (x * Range(«m1»).Value) +Range(«m21»).Value

EndFunction

PublicSub Gra()

Sheets(«Лист1»).Select

Range(«e1»).Select

For i =-10 To 10

ActiveCell.Value= F(i)

ActiveCell.Cells(2).Select

Next i

End Sub

PublicFunction DetectBorders()

' Функцияопределения границ действительных корней

ma = 0

For Eachcurcell In Range(«Koeffs»)

    Ifcurcell.Value > ma Then ma = curcell.Value

    Ifcurcell.Value <> 0 Then Ao = curcell.Value

Nextcurcell

DetectBorders= 1 + (ma * Ao)

EndFunction

UNIT2

Subauto_open()

Sheets(«Лист1»).Select

Form_Main.Show

End Sub

FORM_ABOUT

PrivateSub CommandButton1_Click()

Form_About.Hide

End Sub

FORM_KOEFF

PrivateSub CommandButton1_Click()

ko =TextBox1.Value

st =TextBox2.Value

SelectCase st

    Case0

       Range(«A21»).Value = ko

    Case1

        Range(«A1»)= ko

    Case2

       Range(«A2») = ko

    Case3

       Range(«A3») = ko

    Case4

       Range(«A4») = ko

    Case5

       Range(«A5») = ko

    Case6

       Range(«A6») = ko

    Case7

       Range(«A7») = ko

    Case8

       Range(«A8») = ko

    Case9

       Range(«A9») = ko

    Case10

       Range(«A10») = ko

    Case11

       Range(«A11») = ko

    Case12

       Range(«A12») = ko

    Case13

       Range(«A13») = ko

    Case14

       Range(«A14») = ko

    Case15

        Range(«A15»)= ko

    Case16

       Range(«A16») = ko

    Case17

       Range(«A17») = ko

    Case18

       Range(«A18») = ko

    Case19

       Range(«A19») = ko

    Case20

       Range(«A20») = ko

    CaseElse

       MsgBox («Выход за пределы допустимых значений»)

       st = st — 1

EndSelect

TextBox1.Value= 0

TextBox2.Value= st + 1

End Sub

PrivateSub CommandButton2_Click()

Form_Koeff.Hide

End Sub

PrivateSub CommandButton3_Click()

Range(«a1»).Value= 0

Range(«a2»).Value= 0

Range(«a3»).Value= 0

Range(«a4»).Value= 0

Range(«a5»).Value= 0

Range(«a6»).Value= 0

Range(«a7»).Value= 0

Range(«a8»).Value= 0

Range(«a9»).Value= 0

Range(«a10»).Value= 0

Range(«a11»).Value= 0

Range(«a12»).Value= 0

Range(«a13»).Value= 0

Range(«a14»).Value= 0

Range(«a15»).Value= 0

Range(«a16»).Value= 0

Range(«a17»).Value= 0

Range(«a18»).Value= 0

Range(«a19»).Value= 0

Range(«a20»).Value= 0

Range(«a21»).Value= 0

End Sub

PrivateSub UserForm_initialize()

st = 0

ko = 0

TextBox1.Value= ko

TextBox2.Value= st

End Sub

FORM_KORNI

PrivateSub CommandButton1_Click()

ListBox1.Clear

TextBox1.Value= 0

Form_Korni.Hide

End Sub

PrivateSub CommandButton2_Click()

Range(«Toc»).Value= TextBox1.Value

CallFindKor

'CallPerenos

End Sub

SubFindKor()

Range(«Curright»)= Range(«Right»).Value

Range(«Curleft»)= -Range(«Right»).Value — 0.333

'Range(«right»).Value= DetectBorders

Range(«Stepleft»).Value= Range(«right»).Value * (-1) — 0.333

Do

nashli =False

CallMoveLe

IfSgn(F(Range(«curleft»).Value)) =Sgn(F(Range(«curright»).Value)) Then

End If

IfSgn(F(Range(«curleft»).Value)) <>Sgn(F(Range(«curright»).Value)) Then

    Do

'   nashli = True

   Range(«Curcenter»).Value = ((Range(«curleft»).Value) +(Range(«curright»).Value)) / 2

    IfAbs(F(Range(«Curcenter»).Value)) > Range(«toc»).ValueThen If Sgn(F(Range(«curleft»).Value)) <>Sgn(F(Range(«curcenter»).Value)) ThenRange(«curright»).Value = Range(«curcenter»).Value Else:Range(«curleft»).Value = Range(«curcenter»).Value

    If Abs(F(Range(«Curcenter»).Value))<= Range(«toc»).Value Then ListBox1.AddItem(Range(«Curcenter»).Value)

   Range(«Koren»).Value = Range(«Curcenter»).Value

    LoopUntil Abs(F(Range(«Curcenter»).Value)) <=Range(«toc»).Value

   

End If

LoopUntil Range(«Stepleft»).Value > Range(«right»).Value Ornashli = True

End Sub

SubHorda_Kas()

'SubFindKor()

Range(«Curright»)= Range(«Right»).Value

Range(«Curleft»)= -Range(«Right»).Value — 0.333

'Range(«right»).Value= DetectBorders

Range(«Stepleft»).Value= Range(«right»).Value * (-1) — 0.333

Do

MoveLe

IfSgn(F(Range(«curleft»).Value)) <>Sgn(F(Range(«curright»).Value)) Then

Do

'   nashli = True

    IfF1(Range(«curleft»).Value) * F2(Range(«curleft»).Value)> 0 Then

   Range(«curleft»).Value = Range(«curleft»).Value — ((Range(«curright»).Value — Range(«curleft»).Value) *(F(Range(«Curleft»).Value) / (F(Range(«Curright»).Value — F(Range(«Curleft»).Value)))))

   Range(«Curright»).Value = Range(«curright»).Value — F(Range(«curright»).Value) / F1(Range(«curright»).Value)

End If

   

IfF1(Range(«curleft»).Value) * F2(Range(«curleft»).Value)< 0 Then

   Range(«curright»).Value = Range(«curleft»).Value — ((Range(«curright»).Value — Range(«curleft»).Value) *(F(Range(«Curleft»).Value) / (F(Range(«Curright»).Value — F(Range(«Curleft»).Value)))))

   Range(«Curleft»).Value = Range(«curright»).Value — F(Range(«curright»).Value) / F1(Range(«curright»).Value)

End If

   

    IfAbs(Abs(F(Range(«Curright»).Value))) — Abs(F(Range(«Curleft»).Value)) <= Range(«toc»).Value Then

                                                   'MsgBox (Range(«curleft»).Value)

                                                   ListBox1.AddItem (Range(«Curright»).Value)

                                                   'If ((Range(«Curleft»).Value) + (Range(«Curright»).Value))> 0 Then ListBox1.AddItem (((Range(«Curleft»).Value) +(Range(«Curright»).Value)) / 2)

                                                   'If ((Range(«Curleft»).Value) + (Range(«Curright»).Value))< 0 Then ListBox1.AddItem (((Range(«Curleft»).Value) +(Range(«Curright»).Value)) / 2)

                                                   Range(«Koren»).Value = Range(«Curleft»).Value

    EndIf

   

   

    LoopUntil Abs(F(Range(«Curright»).Value)) — Abs(F(Range(«Curleft»).Value))<= Range(«toc»).Value

   

End If

LoopUntil Range(«Stepleft»).Value > Range(«right»).Value Ornashli = True

End Sub

SubMoveLe()

   Range(«stepleft»).Value = Range(«stepleft»).Value + 0.333

   Range(«curLeft»).Value = Range(«stepleft»).Value

   Range(«Curright»).Value = Range(«Curleft»).Value + 0.333

   Range(«Curcenter»).Value = ((Range(«curleft»).Value) +(Range(«curright»).Value)) / 2

End Sub

PrivateSub CommandButton3_Click()

Horda_Kas

End Sub

PrivateSub UserForm_Deactivate()

ListBox1.Clear

TextBox1.Value= 0

End Sub

SubPerenos()

Range(«a1»).Value= Range(«L1»).Value

Range(«a2»).Value= Range(«L2»).Value

Range(«a3»).Value= Range(«L3»).Value

Range(«a4»).Value= Range(«L4»).Value

Range(«a5»).Value= Range(«L5»).Value

Range(«a6»).Value= Range(«L6»).Value

Range(«a7»).Value= Range(«L7»).Value

Range(«a8»).Value= Range(«L8»).Value

Range(«a9»).Value= Range(«L9»).Value

Range(«a10»).Value= Range(«L10»).Value

Range(«a11»).Value= Range(«L11»).Value

Range(«a12»).Value= Range(«L12»).Value

Range(«a13»).Value= Range(«L13»).Value

Range(«a14»).Value= Range(«L14»).Value

Range(«a15»).Value= Range(«L15»).Value

Range(«a16»).Value= Range(«L16»).Value

Range(«a17»).Value= Range(«L17»).Value

Range(«a18»).Value= Range(«L18»).Value

Range(«a19»).Value= Range(«L19»).Value

End Sub

FORM_MAIN

PrivateSub CommandButton1_Click()

Form_Koeff.Show

End Sub

PrivateSub CommandButton2_Click()

Form_Mnogo.Show

End Sub

PrivateSub CommandButton3_Click()

Gra

Form_Main.Height= 84

Sheets(«D1»).Select

Form_WP.Show

Form_Main.Height= 360

Sheets(«Лист1»).Select

End Sub

PrivateSub CommandButton4_Click()

Form_Korni.Show

End Sub

PrivateSub CommandButton5_Click()

Application.Quit

End Sub

PrivateSub CommandButton7_Click()

Form_About.Show

End Sub

PrivateSub CommandButton8_Click()

    ActiveWorkbook.Save

End Sub

PrivateSub UserForm_initialize()

Sheets(«Лист1»).Select

Form_Main.Height= 360

End Sub

FORM_MNOGO

Dim mn AsString

PrivateSub CommandButton1_Click()

Form_Mnogo.Hide

End Sub

PrivateSub UserForm_activate()

mn =«F(x)=»

If Range(«a20»)> 0 Then mn = mn + Range(«a20»).Text + «X^20»

IfRange(«a20») < 0 Then mn = mn + Range(«a20»).Text +«X^20»

IfRange(«a19») > 0 Then mn = mn + " + " +Range(«a19»).Text + «X^19»

IfRange(«a19») < 0 Then mn = mn + Range(«a19»).Text +«X^19»

If Range(«a18»)> 0 Then mn = mn + " + " + Range(«a18»).Text +«X^18»

IfRange(«a18») < 0 Then mn = mn + Range(«a18»).Text +«X^18»

IfRange(«a17») > 0 Then mn = mn + " + " +Range(«a17»).Text + «X^17»

IfRange(«a17») < 0 Then mn = mn + Range(«a17»).Text +«X^17»

IfRange(«a16») > 0 Then mn = mn + " + " +Range(«a16»).Text + «X^16»

IfRange(«a16») < 0 Then mn = mn + Range(«a16»).Text +«X^16»

IfRange(«a15») > 0 Then mn = mn + " + " +Range(«a15»).Text + «X^15»

IfRange(«a15») < 0 Then mn = mn + Range(«a15»).Text +«X^15»

IfRange(«a14») > 0 Then mn = mn + " + " +Range(«a14»).Text + «X^14»

IfRange(«a14») < 0 Then mn = mn + Range(«a14»).Text +«X^14»

IfRange(«a13») > 0 Then mn = mn + " + " +Range(«a13»).Text + «X^13»

IfRange(«a13») < 0 Then mn = mn + Range(«a13»).Text +«X^13»

IfRange(«a12») > 0 Then mn = mn + " + " +Range(«a12»).Text + «X^12»

IfRange(«a12») < 0 Then mn = mn + Range(«a12»).Text +«X^12»

IfRange(«a11») > 0 Then mn = mn + " + " +Range(«a11»).Text + «X^11»

IfRange(«a11») < 0 Then mn = mn + Range(«a11»).Text +«X^11»

IfRange(«a10») > 0 Then mn = mn + " + " +Range(«a10»).Text + «X^10»

IfRange(«a10») < 0 Then mn = mn + Range(«a10»).Text +«X^10»

IfRange(«a9») > 0 Then mn = mn + " + " +Range(«a9»).Text + «X^9»

IfRange(«a9») < 0 Then mn = mn + Range(«a9»).Text +«X^9»

IfRange(«a8») > 0 Then mn = mn + " + " +Range(«a8»).Text + «X^8»

IfRange(«a8») < 0 Then mn = mn + Range(«a8»).Text +«X^8»

IfRange(«a7») > 0 Then mn = mn + " + " +Range(«a7»).Text + «X^7»

IfRange(«a7») < 0 Then mn = mn + Range(«a7»).Text +«X^7»

IfRange(«a6») > 0 Then mn = mn + " + " +Range(«a6»).Text + «X^6»

IfRange(«a6») < 0 Then mn = mn + Range(«a6»).Text +«X^6»

IfRange(«a5») > 0 Then mn = mn + " + " +Range(«a5»).Text + «X^5»

IfRange(«a5») < 0 Then mn = mn + Range(«a5»).Text +«X^5»

IfRange(«a4») > 0 Then mn = mn + " + " +Range(«a4»).Text + «X^4»

IfRange(«a4») < 0 Then mn = mn + Range(«a4»).Text +«X^4»

IfRange(«a3») > 0 Then mn = mn + " + " +Range(«a3»).Text + «X^3»

IfRange(«a3») < 0 Then mn = mn + Range(«a3»).Text +«X^3»

IfRange(«a2») > 0 Then mn = mn + " + " +Range(«a2»).Text + «X^2»

IfRange(«a2») < 0 Then mn = mn + Range(«a2»).Text +«X^2»

IfRange(«a1») > 0 Then mn = mn + " + " +Range(«a1»).Text + «X»

IfRange(«a1») < 0 Then mn = mn + Range(«a8»).Text +«X»

IfRange(«a21») > 0 Then mn = mn + " + " +Range(«a21»).Text

IfRange(«a21») < 0 Then mn = mn + Range(«a21»).Text

TextBox1.Value= mn

End Sub

FORM_WP

PrivateSub Label1_Click()

Call Gra

End Sub

PrivateSub CommandButton1_Click()

Sheets(«D1»).Print

End Sub

PrivateSub CommandButton2_Click()

Form_WP.Hide

Call Gra

End Sub

PrivateSub UserForm_Click()

Form_WP.Hide

End Sub

____________________________

VoID InVaSiON HG ©

VI Function 2.0 beta
еще рефераты
Еще работы по математике