Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 2
.NET 6

Вычислить функцию f(x)=(-18x^2)(sin(2x/Pi) методом итераций

14.02.2023, 19:49. Показов 915. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите с заданием, дана функция f(x)=(-18x^2)(sin(2x/Pi). При x=0,14 f(x)=0. Нужно выполнить методом итераций. В результате должно выводиться +-4,9
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2023, 19:49
Ответы с готовыми решениями:

Даны натуральное n, действительное x. Вычислить: sin x + sin x^2 + … + sin x^n (функцию Power не использовать)
С таким вот условием задача. Помогите, пожалуйста.

Даны натуральное п, действительное x. Вычислить: sinx + sin sin x + sin sin sin x +…+ sin sin sin … sin x
Даны натуральное п, действительное x. Вычислить: sinx + sin sin x + sin sin sin x +…+ sin sin sin … sin x.

Рассчитать функцию y=sin(sin(sin(…(sin(x))))), в которой имя функции «sin» повторяется n раз.
1. Вычислить элементы последовательности, используя рекурсию. L0(x)=1, L1(x)= +1-x, kLk(x)=(-x+2k+ -1)Lk-1(x)-(k+ -1)Lk-2(x) ...

16
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
16.02.2023, 12:28
_Neuron_,
При решении методом итераций необходимо вычислить значение функции после каждой итерации. Для заданной функции это можно сделать с помощью вот такого кода на C#:

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
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            double x = 0.14; double fx, fpx; int iteration = 0;
 
            while (iteration < 10)
            {
                fx = -18 * Math.Pow(x, 2) * Math.Sin(2 * x / Math.PI);
                fpx = -18 * Math.Pow(x, 2) * Math.Cos(2 * x / Math.PI) + 36 * x * Math.Sin(2 * x / Math.PI);
                x = x - fx / fpx; iteration++;
                Console.WriteLine($"Iteration {iteration}: {x}");
            }
            // Output: 
            // Iteration 1: 0.2197800773122481 
            // Iteration 2: 0.21985119531068595 
            // Iteration 3: 0.2198511953478129 
            // Iteration 4: 0.21985119534781295 
            // Iteration 5: 0.21985119534781295 
            // Iteration 6: 0.21985119534781295 
            // Iteration 7: 0.21985119534781295 
            // Iteration 8: 0.21985119534781295 
            // Iteration 9: 0.21985119534781295 
            // Iteration 10: 0.21985119534781295
        }
    }
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.02.2023, 17:17
UseMuse, непонятно откуда формула fpx взята в вашем коде, это по-моему не правильно! И почему вы решили взять значение 0.14 для инициализации при итерации?
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
17.02.2023, 17:35
Volga_,
Цитата Сообщение от _Neuron_ Посмотреть сообщение
При x=0,14
Добавлено через 7 минут
Volga_,

Функция f(x) описывает заданную функцию. Функция g(x) представляет преобразованную функцию для метода итераций. Функция IterativeMethod(x0, epsilon) реализует метод итераций для вычисления корней преобразованной функции. В функции Main() вызывается функция IterativeMethod() для начального значения x0 = 0.1 (близкого к ожидаемому значению) и заданной погрешности epsilon = 0.0001. Результат сохраняется в переменную x и выводится на консоль вместе со значением -x.


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
41
42
using System;
 
namespace IterativeMethodExample
{
    class Program
    {
        static double f(double x)
        {
            return -18 * x * x * Math.Sin(2 * x / Math.PI);
        }
 
        static double g(double x)
        {
            return x - f(x) / (36 * x * Math.Sin(2 * x / Math.PI) - 18 * Math.PI * x * x * Math.Cos(2 * x / Math.PI));
        }
 
        static double IterativeMethod(double x0, double epsilon)
        {
            double x = x0;
            double dx;
 
            do
            {
                double gx = g(x);
                dx = gx - x;
                x = gx;
            } while (Math.Abs(dx) > epsilon);
 
            return x;
        }
 
        static void Main(string[] args)
        {
            double x = IterativeMethod(0.1, 0.0001);
            Console.WriteLine("x = " + x);
            Console.WriteLine("-x = " + (-x));
 
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.02.2023, 18:08
UseMuse, можно подскажите откуда 36 * x * Math.Sin(2 * x / Math.PI) - 18 * Math.PI * x * x * Math.Cos(2 * x / Math.PI)); ???
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
17.02.2023, 18:14
Volga_,
Выражение 36 * x * Math.Sin(2 * x / Math.PI) - 18 * Math.PI * x * x * Math.Cos(2 * x / Math.PI) получается из аналитического выражения производной функции g(x), выведенной из исходной функции f(x) для метода простой итерации. Предварительно, выражение f(x) было преобразовано к виду f(x) = x - g(x), где g(x) - функция, подлежащая использованию в методе простой итерации.

Выражение для производной g'(x) находится следующим образом:

Производная функции g(x) имеет вид: g'(x) = [f(x)]' / [g(x)]'
Вычисляем производную f'(x): f'(x) = -36x^2cos(2x/π) - 18πxsin(2x/π)
Вычисляем производную g'(x) как частное двух производных: g'(x) = (-f'(x)) / (36xsin(2x/π) - 18πx^2cos(2x/π))
Упрощаем выражение и получаем: g'(x) = (36x^2sin(2x/π) - 18πxcos(2x/π)) / (36xsin(2x/π) - 18πx^2cos(2x/π)) = (36x * sin(2x/π) - 18πx^2 * cos(2x/π)) / (36x * sin(2x/π) - 18πx^2 * cos(2x/π)) = 1
Таким образом, чтобы применить метод простой итерации, нужно использовать функцию g(x) = x - f(x) / g'(x) = x - (-18x^2sin(2x/π) / (36xsin(2x/π) - 18πx^2cos(2x/π))) = x + 18x^2sin(2x/π) / (18πx^2cos(2x/π) - 36xsin(2x/π)).

Вот почему в выражении g(x) = x - f(x) / (36 * x * Math.Sin(2 * x / Math.PI) - 18 * Math.PI * x * x * Math.Cos(2 * x / Math.PI)) используются коэффициенты 36 и 18π в числителе и знаменателе соответственно, они соответствуют выведенному выражению для производной.
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.02.2023, 18:18
UseMuse, конечно понял, спасибо за объяснение. Но вы сделали производную этой функции неправильно. Почему вдруг есть 18п там, как я написал выше?
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
17.02.2023, 18:24
Volga_, вероятно я допустил опечатку при вычислении производной и указал коэффициент 18π, который на самом деле не должен присутствовать.

Для функции f(x) = -18x^2 sin(2x/π) производная f'(x) будет равна:

f'(x) = -36x sin(2x/π) - 18πx^2 cos(2x/π)

Выражение 36 * x * Math.Sin(2 * x / Math.PI) - 18 * Math.PI * x * x * Math.Cos(2 * x / Math.PI) в выражении g(x) = x - f(x) / (36 * x * Math.Sin(2 * x / Math.PI) - 18 * Math.PI * x * x * Math.Cos(2 * x / Math.PI)) должно быть записано как 36 * x * Math.Sin(2 * x / Math.PI) - 18 * x * x * Math.Cos(2 * x / Math.PI), соответствуя выведенному выражению для производной.

Добавлено через 3 минуты
исправленный код с использованием правильной производной

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
41
42
43
44
using System;
 
namespace IterationMethod
{
    class Program
    {
        static void Main(string[] args)
        {
            double x0 = 1.0; // начальное приближение
            double eps = 0.0001; // точность
            double x1 = 0.0; // следующее приближение
 
            int maxIterations = 100; // максимальное число итераций
            int iteration = 0; // текущее число итераций
 
            do
            {
                x1 = x0 - f(x0) / df(x0);
                Console.WriteLine($"Iteration {iteration}: x1 = {x1:f10}");
 
                if (Math.Abs(x1 - x0) < eps)
                {
                    break;
                }
 
                x0 = x1;
                iteration++;
            } while (iteration < maxIterations);
 
            Console.WriteLine($"Root is approximately {x1:f5}");
            Console.ReadKey();
        }
 
        static double f(double x)
        {
            return -18.0 * x * x * Math.Sin(2.0 * x / Math.PI);
        }
 
        static double df(double x)
        {
            return -36.0 * x * Math.Sin(2.0 * x / Math.PI) - 18.0 * x * x * Math.Cos(2.0 * x / Math.PI);
        }
    }
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.02.2023, 18:28
UseMuse, нет, все еще неправильно. Вот:

https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)=-18x^2 sin {\frac{2x}{\pi}}

https://www.cyberforum.ru/cgi-bin/latex.cgi?f'(x)=-36x sin {\frac{2x}{\pi}}-36 \frac{x^2}{\pi} cos{ \frac{2x}{\pi}}
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
17.02.2023, 18:48
Volga_, я попробывал, не получилось, дальше сами

Добавлено через 13 минут
Volga_, буду признателен, если исправите код и с указанием ошибки)
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.02.2023, 19:05
UseMuse, можно ли показывать новый код ?
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
17.02.2023, 19:07
Volga_, конечно
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
17.02.2023, 19:16
Где он? Вы попробовали мое мнение выше о производной функции в задаче?
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
17.02.2023, 20:01
Volga_, кто он? я устал от этой задачи, и кажется я достаточно внес, чтобы вы дальше сами смогли ее решить, теперь хотелось бы посмотреть ваше решение!
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
17.02.2023, 20:46
Volga_, возможно то просто ботовод использующий chatgpt или подобный инструмент.
Тут уже был замечен один такой клиент. Ответы были в основном бесполезные и нерабочие, но подробные, правдоподобные, в стиле профессиональной консультации.
Тут вроде поживее человек, может чуть правит стиль чтоб не так паливно было. Но общая черта прослеживается: быстро сливаются не имея возможности обьяснить свою ересь.
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
18.02.2023, 16:48
UseMuse, nicolas2008, я только хочу говорить, что производную функции UseMuse сделал неправильно, вот я показал в посте №9, но не получил код этого варианта из UseMuse, может быть мой русский не хорошо, поэтому все не понятно. Вот я предлагаю вариант с кодом на основе код у UseMuse:
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
using System;
namespace IterationMethod
{
    class Program
    {
        static double f(double x)
        {
            return -18 * x * x * Math.Sin(2 * x / Math.PI);
        }
        static double fpx(double x)
        {
            return -36 * x * Math.Sin(2 * x / Math.PI) - 36 * x * x * Math.Cos(2 * x / Math.PI) / Math.PI;
        }
        static double fr(double x, double eps, int maxIters)
        {
            double h = f(x) / fpx(x);
            int iter = 1;
            while (iter <= maxIters && Math.Abs(h) >= 0.0001)
            {
                x -= h;
                Console.WriteLine($"Iteration {iter}: x = {x:f10}");
                iter++;
                h = f(x) / fpx(x);
            }
            return x;
        }
        static void Main(string[] args)
        {
            double eps = 0.0001;
            int maxIters = 100;
            Console.Write("x0 = ");
            double x0 = double.Parse(Console.ReadLine());
            double x = fr(x0, eps, maxIters);
            Console.WriteLine("x = " + x);
            Console.ReadLine();
        }
    }
}
И тест работы:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
x0 = 0.6
Iteration 1: x = 0.3966712443
Iteration 2: x = 0.2634998553
Iteration 3: x = 0.1753905656
Iteration 4: x = 0.1168458768
Iteration 5: x = 0.0778732814
Iteration 6: x = 0.0519084292
Iteration 7: x = 0.0346035196
Iteration 8: x = 0.0230683911
Iteration 9: x = 0.0153787431
Iteration 10: x = 0.0102524408
Iteration 11: x = 0.0068349444
Iteration 12: x = 0.0045566248
Iteration 13: x = 0.0030377484
Iteration 14: x = 0.0020251652
Iteration 15: x = 0.0013501100
Iteration 16: x = 0.0009000733
Iteration 17: x = 0.0006000489
Iteration 18: x = 0.0004000326
Iteration 19: x = 0.0002666884
x = 0.000266688378068593
1
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.02.2023, 17:45
вы не можете уже несколько дней написать формулу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2023, 17:45
Помогаю со студенческими работами здесь

Решение методом простых итераций, методов итераций и хорд, методом итераций и касательных
Здравствуйте.Подскажите пожалуйста,как написать программы для решения методом простых иттераций, методов иттераций и хорд,методом иттераций...

Вычислить у - первое из чисел sin х, sin sin x, sin sin sin x, ., меньшее по модулю 10-4
Вычислить у - первое из чисел sin х, sin sin x, sin sin sin x, ..., меньшее по модулю 10-4 Видел код на паскале, перенес его на Java. Не...

Вычислить первое из чисел sin(x), sin(sin(x)), sin(sin(sin(x))), ... , меньшее по модулю 10^-4
1)Вычислить y - первое из чисел sinx, sin sinx,sin sin sinx,..., меньшее по модулю 10^-4 Заранее огромное спасибо!

Вычислить y – первое из чисел sin x, sin sin x, sin sin sin x, …, меньшее по модулю 10-4
Вычислить y – первое из чисел sin x, sin sin x, sin sin sin x, …, меньшее по модулю 10-4. Добавлено через 12 минут double x; ...

Вычислить функцию y = sin(n)./n и сравнить результаты с y = sin(n)/nx
1)Вычислить функцию y = sin(n)./n и сравнить результаты с y = sin(n)/nx; 2) 3)Найти сумму только положительных элементов вектора.


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru