Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
1 / 1 / 0
Регистрация: 25.10.2014
Сообщений: 21

Нахождение корня нелинейного уравнения методом итерации

06.01.2015, 11:00. Показов 7166. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помочь разобраться в ошибке. Есть рабочий код с++ для нахождения корня методом итерации уравнения (cosh(0.7*x)-9)/3.5. Но при подстановке иного уравнения pow(x,3)-0.2*pow(x,2)+0.5*x+1.5 (а именно оно и необходимо) выдает, что корень равен бесконечности. В чем соль метода? В чем разница? Код прилагается:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <math.h>
 
using namespace std;
 
//уравнение для которого ищем корень
double F(double x) {
    return (cosh(0.7*x)-9)/3.5;
}
 
int main()
{
    double x0,xn,b;
    const double eps = 0.0001;//точность вычисления корня
    x0 = -2;//задаём начальное приближение
    const int maxiter=100;//максимально количество итераций
    int n = 0;
    do {
        xn=F(x0);//вычисляем очередное приближение
        b=fabs(x0-xn);//находим разницу между предыдущей итерацией и текущей
        x0=xn;//предыдущую итерацию ставим = текущей,для нахождения последующего приблежения
        n++;//увеличиваем счётчик итераций
        //если разница между предыдущей итерацией и текущей больше или равна заданной точности и 
        //количество проделанных итераций меньше maxiter,то продолжаем поиск
    } while (b>=eps && n<=maxiter);
    if (n>maxiter) cout << "Не сошлось за " << maxiter << " итерцаий\n";
    else cout << "x = " << xn << "\n";
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.01.2015, 11:00
Ответы с готовыми решениями:

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

Решение нелинейного уравнения методом итерации
Написал программу решение нелинейного уравнения методом итерации: //Метод итерации #include &lt;iostream&gt;//for cout and cin ...

Решение нелинейного уравнения методом простой итерации
Помогите, пожалуйста! Нужно разработать программу для решения нелинейного уравнения методом простой итерации. Я код написала, но корни...

11
122 / 24 / 6
Регистрация: 31.12.2014
Сообщений: 164
06.01.2015, 12:12
Цитата Сообщение от Statussrg Посмотреть сообщение
Прошу помочь разобраться в ошибке. Есть рабочий код с++ для нахождения корня методом итерации уравнения (cosh(0.7*x)-9)/3.5. Но при подстановке иного уравнения pow(x,3)-0.2*pow(x,2)+0.5*x+1.5 (а именно оно и необходимо) выдает, что корень равен бесконечности. В чем соль метода? В чем разница? Код прилагается:

#include <iostream>
#include <math.h>

using namespace std;

//уравнение для которого ищем корень
double F(double x) {
return (cosh(0.7*x)-9)/3.5;
}

int main()
{
double x0,xn,b;
const double eps = 0.0001;//точность вычисления корня
x0 = -2;//задаём начальное приближение
const int maxiter=100;//максимально количество итераций
int n = 0;
do {
xn=F(x0);//вычисляем очередное приближение
b=fabs(x0-xn);//находим разницу между предыдущей итерацией и текущей
x0=xn;//предыдущую итерацию ставим = текущей,для нахождения последующего приблежения
n++;//увеличиваем счётчик итераций
//если разница между предыдущей итерацией и текущей больше или равна заданной точности и
//количество проделанных итераций меньше maxiter,то продолжаем поиск
} while (b>=eps && n<=maxiter);
if (n>maxiter) cout << "Не сошлось за " << maxiter << " итерцаий\n";
else cout << "x = " << xn << "\n";
system("pause");
return 0;
}
Доброе утро!
1) читали ли вы хоть где-нибудь, что такое метод итерации? Если я правильно понимаю, тут (да и вообще на любом тематическом сайте) написано, что должно быть вместо вашего F: http://ru.m.wikipedia.org/wiki... й_итерации
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
06.01.2015, 12:43
1. Надо свести уравнение к виду x=f(x):
x=-2x3+0.4x2-3.
2. Условие сходимости fabs(f'(x))<1
f'(x)=-6x2+0.8x
Т.е. x0=-2 не годится
Можно начать с x0=0
1
1 / 1 / 0
Регистрация: 25.10.2014
Сообщений: 21
06.01.2015, 13:40  [ТС]
Подскажите как дальше использовать в коде приведенное к нужному виду уравнение.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
06.01.2015, 13:48
Так, как Вы делали - заменить фунцию F:
C++
1
2
3
4
double F(double x)
{
    return -2.*x*x*x+0.4*x*x-3.0;
}
0
122 / 24 / 6
Регистрация: 31.12.2014
Сообщений: 164
06.01.2015, 14:50
Цитата Сообщение от zss Посмотреть сообщение
Так, как Вы делали - заменить фунцию F:
C++
1
2
3
4
double F(double x)
{
    return -2.*x*x*x+0.4*x*x-3.0;
}
Хм.. А там не должно еще прибавляться x? Ведь по сути когда f(x) станет примерно равным x, получится, что x не корень f(x), а принимает захначение примерно x.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
06.01.2015, 14:56
Нам и нужно найти такое x, что f(x)=x
Еще раз:
Вы запоминаете старое значение ( x0=xn; )
Вы вычисляете y=f(x);
А xn присваиваете y ( xn=y; )
и повторяете до тех пор, пока старое и новое x не станут почти одинаковыми
fabs(x0-xn)<eps
0
122 / 24 / 6
Регистрация: 31.12.2014
Сообщений: 164
06.01.2015, 14:57
Цитата Сообщение от zss Посмотреть сообщение
Еще раз:
Вы вычисляете y=f(x);
Потом запоминаете старое значение x
А x присваиваете y ( x=y; )
и повторяете до тех пор, пока старое и новое x не станут почти одинаковыми
Да, и в итоге что получится? Что x=f(x), но это же не корень!
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
06.01.2015, 15:02
Как это не корень!!!!
Левая часть равна правой, значит, корень!
Преобразуйте снова к x3-0.2x2+0.5x+1.5
и убедитесь, что это выражение равно нулю.
0
122 / 24 / 6
Регистрация: 31.12.2014
Сообщений: 164
06.01.2015, 15:04
А, у вас f обозначает не то, что в условии у автора. Ладно, поставлю вопрос иначе. Откуда оно у вас такое вышло?


UPD: да, правильно ли я понимаю, что автор хочет решить такое уравнение: https://www.cyberforum.ru/cgi-bin/latex.cgi?x^3-0,2x^2+0,5x+1,5 = 0? А то может я и условие не так понял?

UPD2: я понял, что вы сделали, спасибо!
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
06.01.2015, 15:09
Цитата Сообщение от ltkj Посмотреть сообщение
Откуда оно у вас такое вышло?
1. Переносим 0.5x в правую часть
x3-0.2x2+1.5=-0.5x
2. Делим на -0.5
-2x3+0.4x2-3=x
0
122 / 24 / 6
Регистрация: 31.12.2014
Сообщений: 164
06.01.2015, 15:15
Цитата Сообщение от zss Посмотреть сообщение
1. Переносим 0.5x в правую часть
x3-0.2x2+1.5=-0.5x
2. Делим на -0.5
-2x3+0.4x2-3=x
Да, уже понял, спасибо больше. Сначала думал, у вас f = что в условии, потому долго не понимал, как ЭТО может быть корнем. А потом стала неожиданной мысль о том, что x можно вот так взять и выразить. Никогда такого удачного примера(многочлена) не встречал, всегда в лучшем случае Ньютон получался.

Добавлено через 3 минуты
И да, я всё равно не понял, как может работать тот рабочий код из 1 сообщения..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2015, 15:15
Помогаю со студенческими работами здесь

Нахождение корня уравнения методами дихотомии и итерации
Решить уравнение sin(x+p/3) - 0,5x = 0 на отрезке с точностью e методами дихотомии и итерации. Лаборотная работа 1 Численное решение...

Приближённое значение корня уравнения методом деления отрезка пополам и методом итерации
Методом деления отрезка пополам и методом итераций найти приближённое значение корня уравнения {x}^{3}-{2x}^{2}+x-3=0 на интервале ....

Расчёт корня нелинейного уравнения (Методом итераций)
Всем доброго дня очень нужно записать на С++ программу которая находит корень нелинейного уравнения (методом итераций)..Знаю что уже есть...

Вычисление корня нелинейного уравнения методом Золотого сечения.
Всем вечер добрый, нужен алгоритм поиска корня нелинейного уравнения методом Золотого сечения. Никто с подобным не сталкивался? У самого...

Составить программу нахождения корней нелинейного уравнения методом простой итерации с точностью вычисления E
Помогите Составить программу нахождения корней нелинейного уравнения методом простой итерации с точностью вычисления E = 10-4 x3 - 3 x2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru