Нахождение корня в Mathcad
Лабораторная работа №1 Решение нелинейных уравнений
Вариант №7
Задание: 1. Построить график функции f(x).Отделить все корни, лежащие на данном отрезке. 2. Вычислить наибольший из корней методами, указанными в варианте. Точность . Программа должна быть универсальной. Методы оформить в виде отдельных подпрограмм, содержащих проверку условий сходимости метода. Метод, начальное приближение задавать как параметр, вводимый с клавиатуры. Вычислить корень при различных значениях . Вывод на консоль: метод, , номер итерации - k, , . 3. Сравнить число необходимых итераций в обоих методах, указать преимущества и недостатки методов. Сделать выводы. 4. Графически проиллюстрировать сходимость методов для своего уравнения. 5. Вычислить наибольший из корней в MathCAD.
Ход работы
Из графика видно, что первый корень находится на отрезке [-2;-1], второй на отрезке [1;3], а третий- [3;5]. Наибольший корень лежит на отрезке [3;5].
Составим программу для вычисления наибольшего из корней данного уравнения:
Текст программы:
#include <stdio.h> #include <math.h> #include<conio.h> double a,b; int metod; int i; double k,fn,f1,f2,x,xn,xk,fn2; void newton(double a,double b) { int i; x=b; k=1; printf("Xo=%f\n", x); for (i=1; k>=0.0001; i++) { fn=pow(x,3)-5*x*x+12; f1=3*x*x-10*x; f2=6*x-10; xn=x-(fn/f1);//формула итераций k=abs(x-xn); if(k>0.0001) {x=xn;} printf ("k=%d Xk=%.10f Ek=%.10f \n",i,xn,k); if (i>30) { printf ("----------ERROR------------\n"); printf ("RESTRICTION OF NUMBER OF ITERATIONS\n"); //ОГРАНИЧЕНИЕ ЧИСЛА ИТЕРАЦИЙ break; } printf ("x*=%.10f\n", xn); } } void vegstein(double a,double b) { int i; x=b; printf("Xo=%f\n", x); k=1; fn= pow(x,3)-5*x*x+12; f1=3*x*x-10*x; f2=6*x-10; fn2= pow(xn,3)-5*xn*xn+12; xn=x-(fn/f1);//формула итераций printf("X1=%f\n", xn); k=x-xn; if (k<0) { k*=-1; }
for (i=1; k>= 0.0001; i++) { fn= pow(x,3)-5*x*x+12; f1=3*x*x-10*x; f2=6*x-10; fn2= pow(xn,3)-5*xn*xn+12; if (i>30) { printf ("----------ERROR------------\n"); printf ("RESTRICTION OF NUMBER OF ITERATIONS\n"); //ОГРАНИЧЕНИЕ ЧИСЛА ИТЕРАЦИЙ break; } xk=xn-(fn2*(xn-x)/(fn2-fn));//формула итераций k=xk-xn; if (k<0) { k*=-1; } x=xn; xn=xk; printf ("k=%d Xk=%.10f Ek=%.10f \n",i,xk,k); } printf ("x*=%.10f\n", xk); } int main() { a=-2; b=5; while(1) { printf ("\n\n"); printf ("Choose action:\n"); printf ("1-Newton's method\n"); printf ("2-Vegsteyn's method\n"); printf ("3-exit\n"); scanf("%d",&metod); switch(metod) { case 1: newton(a,b); break; case 2: vegstein(a,b); break; case 3: return 0; break; defoult: printf("the method is absent"); break;
} } getch(); }
Результат работы программы: Нахождение корня в Mathcad
Метод Ньютона и Вегстейна практически не отличаются ,единственное отличие в том что производная в методе Вегстейна заменена на , Метод Вегстейна является двухшаговым , то есть необходимо знать два предыдущих приближения, что неудобно. Метод Ньютона чувствителен к выбору начального приближения.
Графически проиллюстрируем сходимость метода Ньютона:
Графически проиллюстрируем сходимость метода Вегстейна:
Условие сходимости метода предполагают сохранение знаков f’(x),f”(x) на промежутке [a; b].
Вывод: В данной работе нашла корень уравнения двумя итерационными методами: Ньютона и Вегстейна. Метод Ньютона одношаговый , поэтому является более приемлемым по сравнению с методом Вегстейна.
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (777)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |