Другие языки программирования и технологии
Решение уравнения методом Ньютона (в С++). Как задать в проге отрезок,содержащий корень?
25*(x^3)+x-1,25=0 методом Ньютона. Отрезок, содержащий корень [0;2].Приближённое значение корня 1.0001.Нужно составить прогу для нахождения корня с абс. погрешностью е=0.001. В проге предусмотерть подсчёт и выдачу на печать кол-ва итераций,необходимых для вычисления значения корня с заданной точностью.Проблема: хз как задать этот самый указанный отрезок с корнем,из-за этого прога уже 2ой час корни вычисляет о_ОПрога:#include<iostream.h>#include<conio.h>#include<math.h>void main()float x,y,x0,f1,f2;f1=0.25*pow(x,3)+x-1.25;f2=0.75*pow(x,2)+1;cout<<"\n x0=";cin>>x0;cout<<"\n e=";cin>>e;int n=0;y=x0;while (fabs(y-x)>e) {x=y; n=n+1; cout<<"\n n="; y=x-f1/f2; cout<<"\n y="<
Метод Ньютона или косательной заключается в постоянном приближении к значению корня, за очередное приближения взяв значение аргумента пересечения оси X и косательной к функции у прошлого приближения. Приблизительно можно оформить так:
float func(float X) - наша функция
{
return 25*(x * x * x)+x-1,25;
};
float derivation(float X) - производная нашей функции (тангенс угла касательной)
{
return 25*3*(x * x)+1;
};
Функция, считающая по Ньютону:
float Neuton()
{
float root = 1.0;
float e = 0.001;
while (true)
{
float temp = root - func(root) / derivation(root);
if (abs(temp - root) <= e)
return temp;
root = temp;
};
};
Попробуй так сделать.
Если 2 часа высчитывает - значит:
1. Либо функция не имеет корней
2. Либо задано неверное приближение
3. Либо не срабатывает проверка на достижение точности корня.
Можно задать такое условие:
Функция, считающая по Ньютону:
float Neuton()
{
float root = 1.0;
float e = 0.001;
while (true)
{
float temp = root - func(root) / derivation(root);
if (abs(temp - root) <= e)
return temp;
root = temp;
if (root < 0) return 0; - проверка на принадлежность диапазону
if (root > 2) return 0; - проверка на принадлежность диапазону
};
};
float func(float X) - наша функция
{
return 25*(x * x * x)+x-1,25;
};
float derivation(float X) - производная нашей функции (тангенс угла касательной)
{
return 25*3*(x * x)+1;
};
Функция, считающая по Ньютону:
float Neuton()
{
float root = 1.0;
float e = 0.001;
while (true)
{
float temp = root - func(root) / derivation(root);
if (abs(temp - root) <= e)
return temp;
root = temp;
};
};
Попробуй так сделать.
Если 2 часа высчитывает - значит:
1. Либо функция не имеет корней
2. Либо задано неверное приближение
3. Либо не срабатывает проверка на достижение точности корня.
Можно задать такое условие:
Функция, считающая по Ньютону:
float Neuton()
{
float root = 1.0;
float e = 0.001;
while (true)
{
float temp = root - func(root) / derivation(root);
if (abs(temp - root) <= e)
return temp;
root = temp;
if (root < 0) return 0; - проверка на принадлежность диапазону
if (root > 2) return 0; - проверка на принадлежность диапазону
};
};
Лучшая проверка по функциям, это график!
Я пишу лабораторные работы по вычислительной математике, увы, метод касательных не писал, писал только метод половинного деления, графики делаю в MathCad'е.
Напиши, если что либо понадобится, дома имеется 5 книг по вычмату, и одна по алгоритмам, увы, на Сях не пишу, пишу на паскале, но скоро и Си осилить хочу.
P.S.: если все же напишешь, то с пометкой письма "Ответы. Маил. Вычмат".
Желаю успехов.
Я пишу лабораторные работы по вычислительной математике, увы, метод касательных не писал, писал только метод половинного деления, графики делаю в MathCad'е.
Напиши, если что либо понадобится, дома имеется 5 книг по вычмату, и одна по алгоритмам, увы, на Сях не пишу, пишу на паскале, но скоро и Си осилить хочу.
P.S.: если все же напишешь, то с пометкой письма "Ответы. Маил. Вычмат".
Желаю успехов.
Похожие вопросы
- по делфи прога нахождение квадратного корня( ошибка в проге) помогите найти и исправить
- Объясните пожалуйста алгоритм упрощенного метода ньютона
- С++ решение интеграла методом Монте-Карло (нужно проверить что не так в коде)
- Delfi !!!Найдите корни уравнения ех – 10х = 0 с точностью эпсилам методом простой итерации.
- Нужно написать программу, на нахождения бессектрисы треугольника, если пользователем задано длину плз напишите прогу С++
- Решение нелинейного уравнения 3^2+2x-3=0
- Помогите с массивом и сортировкой методом пузырька в языке Си! Прогу надо сдать в пятницу срочно, не знаю как начать!
- В трехмерном пространстве есть отрезок и плоскость. Не могу найти их пересечение C#
- Помогите написать программу на С++: Заданы отрезки a,b,c,d. Проверить, могут ли они служить сторонами прямоугольника
- Решение квадратного уравнения через паскаль.