• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Переделать написанную функцию

observersilent

Ученик
Регистрация
21 Мар 2019
Сообщения
2
Реакции
0
Баллы
0
Переделать написанную функцию

По формулам которые ниже на картинке надо написать функцию, которая на входе получает массив со значениями x, массив со значениями функции в точках х - у, степень полинома Лагранжа - n, и число _x в котором надо найти производную. Функцию для первой производной я написал, а поправить ее чтоб она находила производную второй никак не могу. Помогите пожалуйста. Функция для нахождения первой производной:


Код:
double diff(double* x, double* y, int n, const double _x) 
{
    double result = 0;
    for(int i = 0; i < n + 1; i++)
    {
        double result_2 = 0;
        for(int j = 0; j < n + 1; j++)
        {
            if(j != i)
            {
                double  P = 1;
                for(int k = 0; k < n + 1; k++)
                {
                    if(k != i && k != j)
                    {
                        P *= (_x - x[k]) / (x[i] - x[k]);
                    }
                    
                }
                result_2 += P / (x[i] - x[j]);
            }
 
        }
        result += y[i] * result_2;
    }
    return result;
}
 

Вложения

  • Безымянный.png.jpg
    Безымянный.png.jpg
    22 KB · Просмотры: 30
Собственной сам себе отвечаю...Написал программу но при степени полинома 1 вторая производная вообще не считается(возвращает 0), а при степени 2 огромная погрешность. Корректные значения получаются только при n=3 или больше. Если кто-то знает причину прошу ответьте)

Код:
double diff_2(double* x, double* y, int n, const double _x) //функция возвращает значение производной функции в точке _x
{
    double result = 0;
    for (int i = 0; i < n + 1; i++)
    {
        double result_3 = 0;
        for (int j = 0; j < n + 1; j++)
        {
            double result_2 = 0;
            if (j != i)
            {
                for (int l = 0; l < n + 1; l++) 
                {
                    if (l != i && l != j)
                    {
                        double  P = 1;
                        for (int k = 0; k < n + 1; k++)
                        {
                            if (k != i && k != j && k != l)
                            {
                                P *= (_x - x[k]) / (x[i] - x[k]);
                            }
 
                        }
                        result_2 += P / (x[i] - x[l]);
                    }
                    
                }
                result_3 += result_2/ (x[i] - x[j]);
            }
 
        }
        result += y[i] * result_3;
    }
    return result;
}
 
Написал программу но при степени полинома 1 вторая производная вообще не считается(возвращает 0)
К сожалению, на СИ не пишу (был бы Паскаль — повозился бы), замечу лишь, что первый полином Лагранжа (n=1) — это прямая, а потому, мне кажется, естественно, что вторая производная — ноль.
 
Назад
Сверху