close

Вход

Забыли?

вход по аккаунту

?

Отчет Андрея Резника 1лб ЧМ

код для вставкиСкачать
Министерство образования и науки Украины
Харьковский национальный университет радиоэлектроники
Кафедра информатики
Отчёт
по лабораторной работе №1
Выполнил: ст. гр. ИНФ-12-2 Проверила: доц
Резник А.А. Руденко Д.А.
Харьков - 2013
1 РОЗВ'ЯЗАННЯ АЛГЕБРАЇЧНИХ ТА ТРАНСЦЕНДЕНТНИХ РІВНЯНЬ
1.1Мета роботи
Застосування чисельних методів розв'язання нелінійних рівнянь у різноманітних практичних задачах. Аналіз результатів.
1.2Задание.
17x3 - 13x - 12 = 0Дотичних, ітерацій Решить уравнение x3 - 13x - 12 = 0 и уточнить корни уравнения методом итераций и комбинированным методом хорд и касательных.
2. Нахождение промежутков, содержащих корни уравнения.
Находим промежутки, в которых содержатся корни уравнения:
Запишем уравнение в виде f(x)=x^3- 13x - 12 = 0
График функции:
При нахождении корней мы пользовались методом перебора и отслеживаем перемену знаков.
4 Программная реализация #include <iostream>
using namespace std;
double f(double x)
{
return pow(x,3)-13*x-12;
}
double df(double x)
{
return 3*pow(x,2)-13;
}
double d2f(double x)
{
return 6*x;
}
double fi(double x, double m) {
return x-m*(pow(x,3)-13*x-12);
}
double dfi(double x, double m) {
return 1-m*(3*pow(x,2)-13);
}
int main()
{
setlocale(LC_ALL,"rus");
const int size=6;
double c,eps;
int mas[size],j=0,n=0;
cout<<"Введите точность = "; cin>>eps;
for(int i=-20;i<20;++i)
{
if(i+1!=mas[j-1])
{
if(f(i)*f(i+1)<0 || f(i)*f(i+1)==0)
{
mas[j++]=i;
mas[j++]=i+2;
}
}
}
cout<<"\n МЕТОД НЬЮТОНА \n";
j=1;
for(int i=0;i<size;i+=2)
{
cout<<"Промежуточные решения "<<j<<"-ого корня:\n";
//cout<<"f(mas[i])*d2f(mas[i]) = "<<f(mas[i])*d2f(mas[i])<<endl; //cout<<"f(mas[i+1])*d2f(mas[i+1]) = "<<f(mas[i+1])*d2f(mas[i+1])<<endl;
if(f(mas[i])*d2f(mas[i])>0) c=mas[i];
else c=mas[i+1];
cout<<"Выбрали точку ="<<c<<"\n";
do {
c=c-f(c)/df(c);
//cout<<"c="<<c<<"\n";
printf("%0*.*f\n", 1, 10, c);
n+=1;
}
while (fabs(f(c))>=eps);
cout<<j<<"-ый корень равен = "<<c;
cout<<" и найден за "<<n<<" итерации \n\n";
j++;
n=0;
}
cout<<"\n МЕТОД ПРОСТЫХ ИТЕРАЦИЙ \n";
j=1;
for(int i=0;i<size;i+=2)
{
cout<<"Промежуточные решения "<<j<<"-ого корня:\n";
double M,m;
if(f(mas[i])>f(mas[i+1]))
{
M=f(mas[i]);
m=f(mas[i+1]);
}
else {
m=f(mas[i]);
M=f(mas[i+1]);
}
//cout<<m<<' '<<M<<endl;
double l=1/M;
double q=1-m/M;
///cout<<l<<' '<<q<<endl;
double cp;
//cout<<dfi(mas[i],l)<<' '<<dfi(mas[i+1],l)<<endl;
if(fabs(dfi(mas[i],l))<1) c=mas[i];
else if (fabs(dfi(mas[i+1],l))<1) c=mas[i+1];
else c=(mas[i]+mas[i+1])/2;
cout<<"Выбрали точку ="<<c<<"\n";
do {
cp=c;
c=fi(c,l);
//cout<<"c="<<c<<"\n";
printf("%0*.*f\n", 1, 10, c);
n+=1;
}
while (fabs(c-cp)>eps);
cout<<j<<"-ый корень равен = "<<c;
cout<<" и найден за "<<n<<" итерации \n\n";
j++;
n=0;
}
system("pause");
return 0;
}
5. Оценка результатов
С помощью разработанной программы уточняем корни уравнения с точностями 0.01, 0.001, 0.0001.
Для х=-3
Для х=-1
Для х=4
для x=-1:
для x=-3:
Для х = -4
Из полученных графиков видно, что при увеличении точности метод простых итераций даёт приближённое значение корня за большее количество шагов, чем метод Ньютона.
Вывод: в данной лабораторной работе мы уточнили корни кубического уравнения с помощью метода итераций и метода Ньютона; выяснили, что метод Ньютона уточняет корни быстрее метода итераций.
Документ
Категория
Рефераты
Просмотров
13
Размер файла
175 Кб
Теги
1лб, резника, андрей, отчет
1/--страниц
Пожаловаться на содержимое документа