Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
-5 / 1 / 0
Регистрация: 17.11.2015
Сообщений: 64

Решить уравнение методом простых итераций

10.12.2016, 14:06. Показов 7769. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить методом решения простых итераций (sin (x) / x) = (1/2); Синус x / x = Одна-вторая . Вообще не догоняю что да как.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.12.2016, 14:06
Ответы с готовыми решениями:

Решить уравнение методом итераций, методом ньютона и методом половинного деления
решить уравнение методом итераций,методом ньютона и методом половинного деления x-1 / (3 + sin (3.6*x)) = 0 интервал изоляции корня...

Решить уравнение методом итераций
решить уравнение методом итераций x-1 / (3 + sin (3.6*x)) = 0 интервал изоляции корня ,значение корня 0.2624

Помогите с методом простых итераций
Помогите пожалуйста с решением системы уравнений методом простых итераций.

14
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
10.12.2016, 16:21
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        static double f(double x)
        {
            return Math.Sin(x) / x - 1.0 / 2 + x;
        }
        static void Main(string[] args)
        {
 
            double x0 = 0, x = 3, e = 1e-6;
            while (Math.Abs(x0 - x) >= e)
            {
                x0 = x;
                x = f(x0);
            }
            Console.WriteLine("x = {0:f5}", x);
            Console.WriteLine("sin(x)/x - 1/2 = {0:f5}", (f(x) - x));
            Console.ReadLine();
        }
Добавлено через 42 секунды
https://ru.wikipedia.org/wiki/... 0%B8%D0%B8
1
-5 / 1 / 0
Регистрация: 17.11.2015
Сообщений: 64
10.12.2016, 23:29  [ТС]
afront, я не понимаю, как ты так представил уравнение... у тебя вышло sin(x)/x-1/2+x, как так? Как тогда e^x = x^2 представить?
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
11.12.2016, 01:28
FrankRibery, я правильно понимаю, что исходное уравнение выглядит вот так:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\sin x}{x} = \frac{1}{2}

Если да, то после преобразования исходного уравнения функция f(x) будет выглядеть как-то так:

https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = x - 2 \ast \sin x

Остаётся только подставить её внутрь метода f, а остальной код уже предоставил afront:

C#
1
2
3
4
static double f (double x)
{
   return x - 2.0 * Math.Sin(x);
}
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
11.12.2016, 11:35
FrankRibery, идея метода простой итерации состоит в том, чтобы уравнение f(x)=0 привести к эквивалентному уравнению x=F(x). Я сделал просто, к обеим частям уравнения sin(x)/x - 1/2 = 0 прибавил x и получил уравнение sin(x)/x - 1/2 + x = x, решение которого и реализовано в представленном коде. Это все более детально прописано в Wiki, ссылку я привел выше. Что касается 2-го уравнения с экспонентой, его лучше решить методом Ньютона с явно заданной производной

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
31
32
33
34
35
36
37
38
39
40
   class Program
    {
        public delegate double Function(double x);
        public static double Newton(Function f, Function fprime, double x0, double epsilon)
        {
            double f0 = f(x0);
            double x = x0;
            while (Math.Abs(f(x)) > epsilon)
            {
                x -= f0 / fprime(x);  // fprime(x) - производная f(x)
                f0 = f(x);
            }
            return x;
        }
        static double F1(double x)
        {
            return Math.Exp(x)-x * x;
        }
        static double F1prime(double x)  // производная F1
        {
            return Math.Exp(x) -2 * x;
        }
        static void Main(string[] args)
        {
            try
            {
                double x = Newton(F1, F1prime, -1.0, 0.0001);
                Console.WriteLine("Solution from the Newton method: " + x.ToString());
                Console.WriteLine("Solution confirmation: f(x) = " + F1(x).ToString());
                Console.WriteLine();
 
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Fatal error: " + ex.Message);
                Console.ReadLine();
            }
        }
    }
Добавлено через 2 часа 1 минуту
FrankRibery, если вас смущает вид функции, код можно легко переделать, чтобы выглядело привычней
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       static double f(double x)
        {
            return Math.Sin(x) / x - 1.0 / 2;
        }
        static void Main(string[] args)
        {
 
            double x0 = -2, x = -1, e = 1e-4;
            while (Math.Abs(x0 - x) >= e)
            {
                x0 = x;
                x = x0 - f(x0);
            }
            Console.WriteLine("x = {0:f5}", x);
            Console.WriteLine("sin(x)/x - 1/2 = {0:f5}", f(x));
            Console.ReadLine();
        }
1
-5 / 1 / 0
Регистрация: 17.11.2015
Сообщений: 64
11.12.2016, 13:39  [ТС]
afront, а как тогда преобразовать e^x = x^2? Ln(x^2)? Спасибо кстати!
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
11.12.2016, 14:21
Цитата Сообщение от FrankRibery Посмотреть сообщение
e^x = x^2? Ln(x^2)?
а что, попробуйте. Я не смог упаковать это ур-е в метод простой итерации, поэтому и использовал метод Ньютона
1
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
11.12.2016, 15:36
Цитата Сообщение от afront Посмотреть сообщение
sin(x)/x - 1/2 + x = x
а f(x) куда дели?

Добавлено через 3 минуты
Цитата Сообщение от afront Посмотреть сообщение
static double f(double x)
{
return Math.Sin(x) / x - 1.0 / 2 + x;
}
и да, это равносильно:
https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)=\frac{sinx}{x}+x-\frac{1}{2}
но не как не
https://www.cyberforum.ru/cgi-bin/latex.cgi?x=\frac{sinx}{x}+x-\frac{1}{2}

Добавлено через 6 минут
afront, и да, если существует некая функция:
https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)=x
то ее, ну не как нельзя прировнять к функции:
https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)=\frac{sinx}{x}-\frac{1}{2}
Да у них могут быть точки пересечения, но это разные функции...
А то, такими темпами, мы начнем утверждать что:
f(x)=lnx+lgx
и
https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)=2x
две одинаковые функции...
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
11.12.2016, 15:48
Цитата Сообщение от EveKS Посмотреть сообщение
а f(x) куда дели?
из выражения
f(x)=sin(x)/x - 1/2
получаем тождественное
f(x)+x=x

Добавлено через 5 минут
f(x)=sin(x)/x - 1/2=0
f(x)+x=x
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
11.12.2016, 16:12
Цитата Сообщение от afront Посмотреть сообщение
f(x)+x=x
Во первых f(x)+x=x + f(x)
иначе
куда денется https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) ?
в нашем случае https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x), это https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{2sinx-x}{2x}

Добавлено через 2 минуты
Цитата Сообщение от EveKS Посмотреть сообщение
f(x)+x=x
это утверждение равносильно: https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)=0

Добавлено через 15 минут
afront,
Цитата Сообщение от FrankRibery Посмотреть сообщение
(sin (x) / x) = (1/2)
я был изначально не прав, там не где нет не какого f(x)
А следовательно, это возможное решение.
0
-5 / 1 / 0
Регистрация: 17.11.2015
Сообщений: 64
11.12.2016, 17:03  [ТС]
EveKS, я так понял, что afront всё сделал правильно?
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
11.12.2016, 17:50
Лучший ответ Сообщение было отмечено FrankRibery как решение

Решение

FrankRibery, да, ответ верный.
Можно проверить подставив
C#
1
Console.WriteLine(Math.Sin(x)/x);
Добавлено через 38 минут
Кстати, из этого:
Цитата Сообщение от afront Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
          static double f(double x)
        {
            return Math.Sin(x) / x - 1.0 / 2 + x;
        }
        static void Main(string[] args)
        {
 
            double x0 = 0, x = 3, e = 1e-6;
            while (Math.Abs(x0 - x) >= e)
            {
                x0 = x;
                x = f(x0);
            }
            Console.WriteLine("x = {0:f5}", x);
            Console.WriteLine("sin(x)/x - 1/2 = {0:f5}", (f(x) - x));
            Console.ReadLine();
        }
и этого:
Цитата Сообщение от afront Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       static double f(double x)
        {
            return Math.Sin(x) / x - 1.0 / 2;
        }
        static void Main(string[] args)
        {
 
            double x0 = -2, x = -1, e = 1e-4;
            while (Math.Abs(x0 - x) >= e)
            {
                x0 = x;
                x = x0 - f(x0);
            }
            Console.WriteLine("x = {0:f5}", x);
            Console.WriteLine("sin(x)/x - 1/2 = {0:f5}", f(x));
            Console.ReadLine();
        }
Можно прийти к выводу:
Что:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{sinx}{x}=\frac{1}{2}
можно привести к:
https://www.cyberforum.ru/cgi-bin/latex.cgi?2sinx-x
И действительно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        static void Main(string[] args)
        {
            double x = -2, e = 1e-4; ;
            var tmp = 2 * Math.Sin(x) - x;
 
            while (Math.Abs(tmp) >= e)
            {
                x += e;
                tmp = 2 * Math.Sin(x) - x;
            }
 
            Console.WriteLine("x = {0:f5}", x);
            Console.WriteLine(Math.Sin(x) / x);  // 1/2
 
            Console.ReadLine();
        }
Добавлено через 3 минуты
ахаххаха - это очевидно,
а я приводил через
https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{0}-\frac{sinx}{x}+\frac{1}{2}=\frac{sinx}{x}-\frac{1}{2}+x
1
-5 / 1 / 0
Регистрация: 17.11.2015
Сообщений: 64
11.12.2016, 19:57  [ТС]
EveKS, Не могу понять, почему в коде вы взяли за x = -2
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
11.12.2016, 20:15
FrankRibery, на мой перебор -- не стоит обращать внимание, там просто "мысли вслух".
1
-5 / 1 / 0
Регистрация: 17.11.2015
Сообщений: 64
11.12.2016, 20:23  [ТС]
EveKS, а к этому всему, метод половинного деления можно применить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2016, 20:23
Помогаю со студенческими работами здесь

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

Метод простых итераций. Программа для решения этим методом
Всем привет :) Перед мною поставили задачу написать программу для решения уравнений методом простых итераций. К сожалению, ту базу, что...

Методом итераций решить систему линейных уравнений с точностью до 0.001
решение системы линейных уравнений методом простой итерации с# помоги пожалуйста переделать x_vector = (double)VectorB.Clone(); //...

Методом итераций решить систему линейных уравнений с точностью до 0.001
Методом итераций решить систему линейных уравнений с точностью до 0.001 Помогите исправить ошибку в коде, буду благодарен. using...

Решить уравнение модифицированным методом Ньютона
решить уравнение на заданном промежутке модифицированным методом Ньютона. f(x) = \sqrt{2{x}^{2} + 1,2 - ctg x} - 1 на участке x


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru