21.03.2019, 18:18 | #1 (permalink) |
Новичок
Регистрация: 21.03.2019
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Переделать написанную функцию
Код:
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; } |
21.03.2019, 18:18 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Подскажу вам, что можно прочитать похожие обсуждения Как вернуть привычную функцию? Помогите порешать функцию Вычислить функцию |
21.03.2019, 21:20 | #2 (permalink) |
Новичок
Регистрация: 21.03.2019
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Собственной сам себе отвечаю...Написал программу но при степени полинома 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; } |
21.03.2019, 21:39 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
К сожалению, на СИ не пишу (был бы Паскаль — повозился бы), замечу лишь, что первый полином Лагранжа (n=1) — это прямая, а потому, мне кажется, естественно, что вторая производная — ноль.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|