2014 dxdy logo

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

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




 
 И снова МКР...
Сообщение01.04.2016, 07:03 
Неделю бьюсь с конечно-разностной аппроксимацией 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 
Аватара пользователя
Для начальной и конечной точки функции неправильные, здесь они просто дублируют соседние (1 и $n-1$) точки.
И как считается аналитическая производная? Ну и на функцию powr хотелось бы посмотреть...

 
 
 
 Re: И снова МКР...
Сообщение01.04.2016, 08:23 
Евгений Машеров в сообщении #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 
Аватара пользователя
По powr особых претензий нет (не работает для отрицательных n, и неоптимально для больших n, но в частном случае всё хорошо).
По функциям - cbrt это что?
А с концевыми точками - Вы используете полином второго порядка. Для которого вторая производная постоянна. То есть, взяв три точки, Вы получите одну и ту же оценку её на всём отрезке, включающем эти точки. Поскольку ясно, что она меняется - надо бы использовать полином, вторая производная которого зависит от x, то есть не ниже третьей степени (и точек уже 4). В литературе готовых формул для такого дифференцирования немало, но обычно рассматривается случай, когда дифференцируется некая эмпирическая величина, измеренная с ошибкой, так что полином не проводится по точкам, а приближается методом наименьших квадратов. у Вас, возможно, Лагранжем будет проще.

 
 
 
 Re: И снова МКР...
Сообщение01.04.2016, 10:11 
Евгений Машеров в сообщении #1110998 писал(а):
По функциям - cbrt это что?

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

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

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

 
 
 
 Re: И снова МКР...
Сообщение01.04.2016, 11:12 
Описали бы Вы задачу полностью. Вместе с функцией, для которой надо считать производную.

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

 
 
 
 Re: И снова МКР...
Сообщение01.04.2016, 11:30 
Pphantom в сообщении #1111024 писал(а):
Описали бы Вы задачу полностью. Вместе с функцией, для которой надо считать производную.

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

 
 
 
 Re: И снова МКР...
Сообщение01.04.2016, 12:25 
Аватара пользователя
А аналитически как считаете?

 
 
 
 Re: И снова МКР...
Сообщение01.04.2016, 13:29 
byulent в сообщении #1111029 писал(а):
А функция же ещё в первом сообщении написана:
Ищите ошибку в аналитическом выражении для производной. :-)

 
 
 
 Re: И снова МКР...
Сообщение01.04.2016, 13:40 
Аватара пользователя
Да, очень похоже, что где-то попросту потеряли коэффициент.

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

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group