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
9911
Москва
Для начальной и конечной точки функции неправильные, здесь они просто дублируют соседние (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
9911
Москва
По 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
9911
Москва
А аналитически как считаете?

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


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

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


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

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


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

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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