Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2019, 16:31   #1
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию Полином Лагранжа на c#

Нужно посчитать погрешность двумя путями, не могу понять как это сделать, ведь я х задаю сама, преподаватель писала:x(k)=x(0)+k*h, Max|y(x)-Pn(x)|, x(j)!=x(k) и x(j)=(x(k)+x(k+1))/2, max|y(x(j)-Pn(x(j))|=r
Код:
class Program
    {
        static void Main()
        {
            const int n = 10;
            double[] X = new double[n] ;
            double[] Y = new double[X.Length];
            double x = Math.PI / 4;

            for (int i = 0; i < n; i++)
            {
                Y[i] = F(X[i]);
            }
            Lagrange lagrange = new Lagrange();
            double y = lagrange.GetValue(X, Math.PI / 2, Y, x);
            Console.WriteLine($"Y={y},X={x}");
            Console.WriteLine($"Y={F(x)}");
            Console.WriteLine($"dY={Math.Abs(F(x) - y)}");
            Console.ReadKey();
        }

        static double F(double x)
        {
            return Math.Sin(x);
        }
    }
Код:
 class Lagrange
    {
        private double l(int i, double[] X, double h, double x)
        {
            double l = 1;
            for (int j = 0; j < X.Length; j++)
            {
                if (j != i)
                {
                    l *= (x - X[0] - j * h) / (i - j);
                }
            }
            return l / Math.Pow(h, X.Length - 1);
        }

        public double GetValue(double[] X, double h, double[] Y, double x)
        {
            double y = 0;
            for (int j = 0; j < X.Length; j++)
            {
                y += Y[j] * l(j, X, h, x);
            }
            return y;
        }
    }
Сетка равномерная, по крайней мере должна быть....
plktre вне форума Ответить с цитированием
Старый 28.10.2019, 16:40   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от plktre Посмотреть сообщение
не могу понять как это сделать, ведь я х задаю сама
Прогуляли что ли пары? Сходите хотя бы в вики и прочитайте, что это такое.

Код:
double[] X = new double[n] ;
Где вы его заполняете?
p51x вне форума Ответить с цитированием
Старый 28.10.2019, 16:47   #3
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

Код:
for (int i = 0; i < n; i++)
            {
                X[i] = X[0] + i * h;
                Y[i] = F(X[i]);
            }
?
plktre вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графика(Полином Лагранжа) SkreII4ik Общие вопросы Delphi 3 22.12.2013 22:15
полином лагранжа Вероника92 Помощь студентам 6 23.03.2013 20:04
Полином Ньютона в VBa Batton Помощь студентам 1 23.04.2012 21:04
канонический полином littlefella Помощь студентам 0 11.04.2011 19:17
полином лагранжа milate Общие вопросы C/C++ 10 24.05.2009 13:44