Нахождение корня в Mathcad

Лабораторная работа №1

Решение нелинейных уравнений

Вариант №7

Задание:

1. Построить график функции f(x).Отделить все корни, лежащие на данном отрезке.

2. Вычислить наибольший из корней методами, указанными в варианте. Точность Нахождение корня в Mathcad - student2.ru . Программа должна быть универсальной. Методы оформить в виде отдельных подпрограмм, содержащих проверку условий сходимости метода. Метод, начальное приближение Нахождение корня в Mathcad - student2.ru задавать как параметр, вводимый с клавиатуры. Вычислить корень при различных значениях Нахождение корня в Mathcad - student2.ru . Вывод на консоль: метод, Нахождение корня в Mathcad - student2.ru , номер итерации - k, Нахождение корня в Mathcad - student2.ru , Нахождение корня в Mathcad - student2.ru .

3. Сравнить число необходимых итераций в обоих методах, указать преимущества и недостатки методов. Сделать выводы.

4. Графически проиллюстрировать сходимость методов для своего уравнения.

5. Вычислить наибольший из корней в MathCAD.

Ход работы

Нахождение корня в Mathcad - student2.ru
Нахождение корня в Mathcad - student2.ru
Нахождение корня в Mathcad - student2.ru
 
Нахождение корня в Mathcad - student2.ru
 
 
 
 
 

Из графика видно, что первый корень находится на отрезке [-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 - student2.ru

Нахождение корня в Mathcad

 
  Нахождение корня в Mathcad - student2.ru Нахождение корня в Mathcad - student2.ru

Нахождение корня в Mathcad - student2.ru

 
Нахождение корня в Mathcad - student2.ru
Нахождение корня в Mathcad - student2.ru

Метод Ньютона и Вегстейна практически не отличаются ,единственное отличие в том что производная в методе Вегстейна заменена на

Нахождение корня в Mathcad - student2.ru ,

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

Графически проиллюстрируем сходимость метода Ньютона:

Нахождение корня в Mathcad - student2.ru
Нахождение корня в Mathcad - student2.ru
Нахождение корня в Mathcad - student2.ru
Нахождение корня в Mathcad - student2.ru

Нахождение корня в Mathcad - student2.ru

Графически проиллюстрируем сходимость метода Вегстейна:

Условие сходимости метода предполагают сохранение знаков f’(x),f”(x) на промежутке [a; b].

Нахождение корня в Mathcad - student2.ru

Вывод:

В данной работе нашла корень уравнения двумя итерационными методами: Ньютона и Вегстейна. Метод Ньютона одношаговый , поэтому является более приемлемым по сравнению с методом Вегстейна.

Наши рекомендации