Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536

Найти корень методом простых итераций

17.03.2012, 21:29. Показов 4095. Ответов 1
Метки нет (Все метки)

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

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace KYPCOBUKSHARP
{
    class Program
    {
        static double F(double x)// Наша функция Фи от икс
        {
            return 1 / (3 + Math.Sin(3.6 * x));
        }
        static double prF(double x)//Производная Фи от икс
        {
            return -3.6 * Math.Cos(3.6 * x) / ((3 + Math.Sin(3.6 * x)) * (3 + Math.Sin(3.6 * x)));
        }
 
        public class TOneIter //Базовый класс
        {
            public double a, b; //Границы промежутка
            public double x1, x2;
            public TOneIter() { a = 0; b = 1; }//Конструктор по умолчанию
            public TOneIter(double a1, double b1) { a = a1; b = b1; }//Конструктор с параметрами
            public TOneIter(TOneIter d) { a = d.a; b = d.b; }//Конструктор копирования
            ~TOneIter() { Console.WriteLine("Все подчищено"); }//Деструктор
            public static double OneIt(double x2)  //Метод реализации одной итерации      
            {
                double x1;
                x1 = x2;
                x2 = F(x1);
                return 0;
            }
        };
 
            public class TIter : TOneIter
            {
                public double Eps;//Требуемая точность
                public int maxn; //Максимальное кол-во итераций
                public double minq;//Минимальное значение производной
                public double Eps0;//Откоррект. значение точности
                public void Input() //Метод для ввода данных
                {
                    int ch;
                    Console.WriteLine("Выберите вариант ввода:\n    1. Ввод с клавиатуры\n   2. Ввод из потока");
                    ch = Convert.ToInt32(Console.ReadLine());
                    switch (ch)
                    {
                        case 1:
                            {
                                Console.WriteLine("Введите максимально допустимое количество итераций:\n");
                                maxn = Convert.ToInt32(Console.ReadLine());
                                Console.WriteLine("Введите нижнюю границу промежутка:\n");
                                a = Convert.ToDouble(Console.ReadLine());
                                Console.WriteLine("Введите верхнюю границу промежутка:\n");
                                b = Convert.ToDouble(Console.ReadLine());
                                Console.WriteLine("Введите требуемую точность вычислений:\n");
                                Eps = Convert.ToDouble(Console.ReadLine());
                            };
                            break;
                        case 2:
                            {   };
                            break;
                    }
                }
                public double Findminq() //Вычисление минимальной производной
                {
                    double qa = prF(a);
                    double qb = prF(b);
                    if (qa < qb) minq = qa;
                    else minq = qb;
                    return minq;
                }
                public double FindEps0()  //Вычисление откоррект. значения точности
                {
                    Eps0 = (1 - minq) * Eps / minq;
                    return Eps0;
                }
                public double Findx() //Вычисление корня
                {
                    x2 = a;
                    int n = 0;//Счетчик итераций
                    if (minq <= 0.5 && minq > -1)
                    {
                        do
                        {
                            TOneIter.OneIt(x2);
                            n++;
                            if (Math.Abs(x1 - x2) <= Eps || n > maxn) break;
                        }
                        while (Math.Abs(x1 - x2) < Eps || n < maxn);
                        if (n < maxn)
                            Console.WriteLine("Корень {0} Вычислен за {1} итераций\n", x2, n);
                        else
                            Console.WriteLine("Превышено число допустимых итераций.\nПри числе допустимых итераций {0} Корень равен {1}\n", maxn, x2);
                    }
                    else
                    {
                        do
                        {
                            TOneIter.OneIt(x2);
                            n++;
                            if (Math.Abs(x1 - x2) <= Eps0 || n > maxn) break;
                        }
                        while (Math.Abs(x1 - x2) < Eps0 || n < maxn);
                        if (n < maxn)
                            Console.WriteLine("Корень {0} Вычислен за {1} итераций\n", x2, n);
                        else
                            Console.WriteLine("Превышено число допустимых итераций.\nПри числе допустимых итераций {0} Корень равен {1}\n", maxn, x2);
                    }
                    return x2;
                }
            };            
 
            static void Main(string[] args)
            {
                
                TOneIter z;
                TOneIter:TIter zz=new TIter(); 
                zz.Input();
                zz.Findminq();
                zz.FindEps0();
                zz.Findx();
                Console.ReadKey();
                
            }
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2012, 21:29
Ответы с готовыми решениями:

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

Решить уравнение методом простых итераций
Помогите пожалуйста решить методом решения простых итераций (sin (x) / x) = (1/2); Синус x / x = Одна-вторая . Вообще не догоняю что да как.

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

1
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
17.03.2012, 23:26  [ТС]
Вобщем посмотрите плиз. я так понял неправильно у меня OneIt сделано.
допустим если возвращать Math.Abs(x1-x2) и сразу сравнивать его с точностью...
только вот не пойму как это реализовать....

Добавлено через 44 минуты
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace KYPCOBUKSHARP
{
    class Program
    {
        static double F(double x)// Наша функция Фи от икс
        {
            return 1 / (3 + Math.Sin(3.6 * x));
        }
        static double prF(double x)//Производная Фи от икс
        {
            return -3.6 * Math.Cos(3.6 * x) / ((3 + Math.Sin(3.6 * x)) * (3 + Math.Sin(3.6 * x)));
        }
 
        public class TOneIter //Базовый класс
        {
            public double a, b; //Границы промежутка
            public double x1, x2;
            public TOneIter() { a = 0; b = 1; }//Конструктор по умолчанию
            public TOneIter(double a1, double b1) { a = a1; b = b1; }//Конструктор с параметрами
            public TOneIter(TOneIter d) { a = d.a; b = d.b; }//Конструктор копирования
            ~TOneIter() { Console.WriteLine("Все подчищено"); }//Деструктор
            public static double OneIt()  //Метод реализации одной итерации      
            {
                x1 = x2;
                x2 = F(x1);
                return Math.Abs(x1 - x2); 
            }
        };
 
            public class TIter : TOneIter
            {
                public double Eps;//Требуемая точность
                public int maxn; //Максимальное кол-во итераций
                public double minq;//Минимальное значение производной
                public double Eps0;//Откоррект. значение точности
                public void Input() //Метод для ввода данных
                {
                    int ch;
                    Console.WriteLine("Выберите вариант ввода:\n    1. Ввод с клавиатуры\n   2. Ввод из потока");
                    ch = Convert.ToInt32(Console.ReadLine());
                    switch (ch)
                    {
                        case 1:
                            {
                                Console.WriteLine("Введите максимально допустимое количество итераций:\n");
                                maxn = Convert.ToInt32(Console.ReadLine());
                                Console.WriteLine("Введите нижнюю границу промежутка:\n");
                                a = Convert.ToDouble(Console.ReadLine());
                                Console.WriteLine("Введите верхнюю границу промежутка:\n");
                                b = Convert.ToDouble(Console.ReadLine());
                                Console.WriteLine("Введите требуемую точность вычислений:\n");
                                Eps = Convert.ToDouble(Console.ReadLine());
                            };
                            break;
                        case 2:
                            {   };
                            break;
                    }
                }
                public double Findminq() //Вычисление минимальной производной
                {
                    double qa = prF(a);
                    double qb = prF(b);
                    if (qa < qb) minq = qa;
                    else minq = qb;
                    return minq;
                }
                public double FindEps0()  //Вычисление откоррект. значения точности
                {
                    Eps0 = (1 - minq) * Eps / minq;
                    return Eps0;
                }
                public double Findx() //Вычисление корня
                {
                    x2 = a;
                    int n = 0;//Счетчик итераций
                    if (minq <= 0.5 && minq > -1)
                    {
                        do
                        {
                            TOneIter.OneIt();
                            n++;
                            if (TOneIter.OneIt() <= Eps || n > maxn) break;
                        }
                        while (TOneIter.OneIt() < Eps || n < maxn);
                        if (n < maxn)
                            Console.WriteLine("Корень {0} Вычислен за {1} итераций\n", x2, n);
                        else
                            Console.WriteLine("Превышено число допустимых итераций.\nПри числе допустимых итераций {0} Корень равен {1}\n", maxn, x2);
                    }
                    else
                    {
                        do
                        {
                            TOneIter.OneIt();
                            n++;
                            if (TOneIter.OneIt() <= Eps0 || n > maxn) break;
                        }
                        while (TOneIter.OneIt() < Eps0 || n < maxn);
                        if (n < maxn)
                            Console.WriteLine("Корень {0} Вычислен за {1} итераций\n", x2, n);
                        else
                            Console.WriteLine("Превышено число допустимых итераций.\nПри числе допустимых итераций {0} Корень равен {1}\n", maxn, x2);
                    }
                    return x2;
                }
            };            
 
            static void Main(string[] args)
            {
                
                TOneIter z;
                TOneIter:TIter zz=new TIter(); 
                zz.Input();
                zz.Findminq();
                zz.FindEps0();
                zz.Findx();
                Console.ReadKey();
                
            }
        }
    }
Сделал по-другому. выдает ошибку(вернее 6) Error 3 An object reference is required for the non-static field, method, or property 'KYPCOBUKSHARP.Program.TOneIter.x1'
так же для х2.
как объявлять и где х1 и х2 чтобы не было этой ошибки? чет не догоняю....




Все. понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2012, 23:26
Помогаю со студенческими работами здесь

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

Методом итераций найти решения уравнений с заданной точностью
Задание такое: x^4+5*x-7=0 методом итераций найти решения уравнений с точностью E=10^(-2) Я написал а что не так не пойму...

Найти корень уравнения методом половинного деления
найти корень уравнения F(x)=0 методом половинного деления построить график f(x)=x-9sinx помогите пожалуйста найти ошибку. корень...

Метод простых итераций
Нужно найти корни уравнения f(x) методом простых итераций. У меня получается зацикливание и значения уходят в Infinity. Как можно это дело...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Загрузка 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