2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 И снова МКР...
Сообщение01.04.2016, 07:03 


28/02/15
52
Неделю бьюсь с конечно-разностной аппроксимацией 2 производной. Дело в том, что на начале отрезка, где рассматриваются производные, аналитическая и численная 2-е производные различаются на 10-15 единиц! Препод упорно настаивает: не может такого быть! А формула правильная:
$$f''_i=\frac{f_{i-1}-2f_i+f_{i+1}}{h^2};$$
и программная реализация вроде тоже:
Используется синтаксис C++
    double h=(b-a)/n;
    for (int i=0; i<=n; i++){
        x[i]=a+i*h;
        //std::cout<<x[i]<<std::endl;
        f[i]=3*cbrt((x[i]+1)/powr(x[i]-1,2));
    }
    for (int i=1; i<n; i++) {
        f2nd[i]=(f[i-1]-2*f[i]+f[i+1])/powr(h,2);
    }
    f2nd[0] = (f[0]-2*f[1]+f[2])/powr(h,2);
    f2nd[n] = (f[n-2]-2*f[n-1]+f[n])/powr(h,2);
 

(powr - это моя собственная функция для вычисления степени)
Вот как выглядят аналитическая и численная производные при N=50:
Изображение
при N=100:
Изображение
при N=200:
Изображение
То есть эта разница ещё и растёт с уменьшением шага! В чём проблема?

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 07:13 
Заслуженный участник
Аватара пользователя


11/03/08
9874
Москва
Для начальной и конечной точки функции неправильные, здесь они просто дублируют соседние (1 и $n-1$) точки.
И как считается аналитическая производная? Ну и на функцию powr хотелось бы посмотреть...

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 08:23 


28/02/15
52
Евгений Машеров в сообщении #1110983 писал(а):
Для начальной и конечной точки функции неправильные, здесь они просто дублируют соседние (1 и $n-1$) точки.

А как правильно? При аппроксимации полиномом Лагранжа по 3 точкам и вычислении 2-й производной от выражения получилось именно так. Я сам удивился.
Евгений Машеров в сообщении #1110983 писал(а):
И как считается аналитическая производная?

Используется синтаксис C++
for (int i=0; i<n; i++) f2ad[i]=4*(powr(x[i],2)+6*x[i]+3)/(9*powr(x[i]-1,4)*(x[i]+1)*powr(cbrt(x[i]+1/powr(x[i]-1,2)),2));

Евгений Машеров в сообщении #1110983 писал(а):
Ну и на функцию powr хотелось бы посмотреть...

Используется синтаксис C++
double powr (double x, int n) {
    double y = 1;
    for(int i=1;i<=n;i++){
        y *= x;
    }
    return y;

Сравнивал с результатами pow из cmath - сходится.

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 09:08 
Заслуженный участник
Аватара пользователя


11/03/08
9874
Москва
По powr особых претензий нет (не работает для отрицательных n, и неоптимально для больших n, но в частном случае всё хорошо).
По функциям - cbrt это что?
А с концевыми точками - Вы используете полином второго порядка. Для которого вторая производная постоянна. То есть, взяв три точки, Вы получите одну и ту же оценку её на всём отрезке, включающем эти точки. Поскольку ясно, что она меняется - надо бы использовать полином, вторая производная которого зависит от x, то есть не ниже третьей степени (и точек уже 4). В литературе готовых формул для такого дифференцирования немало, но обычно рассматривается случай, когда дифференцируется некая эмпирическая величина, измеренная с ошибкой, так что полином не проводится по точкам, а приближается методом наименьших квадратов. у Вас, возможно, Лагранжем будет проще.

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 10:11 


28/02/15
52
Евгений Машеров в сообщении #1110998 писал(а):
По функциям - cbrt это что?

Кубический корень.

Евгений Машеров в сообщении #1110998 писал(а):
А с концевыми точками

А что вы так прицепились к концевым точкам? Видно же, что на середине ситуация не лучше.

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 11:12 
Заслуженный участник


09/05/12
25179
Описали бы Вы задачу полностью. Вместе с функцией, для которой надо считать производную.

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

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 11:30 


28/02/15
52
Pphantom в сообщении #1111024 писал(а):
Описали бы Вы задачу полностью. Вместе с функцией, для которой надо считать производную.

Задача - найти 2 производную с помощью конечно - разностной схемы.
А функция же ещё в первом сообщении написана: $$3\sqrt[3]{\frac{x+1}{(x-1)^2}}$$

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 12:25 
Заслуженный участник
Аватара пользователя


11/03/08
9874
Москва
А аналитически как считаете?

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 13:29 
Заслуженный участник


09/05/12
25179
byulent в сообщении #1111029 писал(а):
А функция же ещё в первом сообщении написана:
Ищите ошибку в аналитическом выражении для производной. :-)

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 13:40 
Заслуженный участник
Аватара пользователя


11/03/08
9874
Москва
Да, очень похоже, что где-то попросту потеряли коэффициент.

 Профиль  
                  
 
 Re: И снова МКР...
Сообщение01.04.2016, 16:25 
Заслуженный участник
Аватара пользователя


11/03/08
9874
Москва
Посчитал. Аналитическое и численно решения совпадают с разумной погрешностью.
Ищите ошибку в выражении для второй производной.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group