Решение краевой задачи для обыкновенного дифференциального уравнения с заданной точностью

Курсовой проект - Математика и статистика

Другие курсовые по предмету Математика и статистика

нельзя было бы разложить по данной системе базисных функций.

Функция y(x) должна удовлетворять краевым условиям, то есть должно выполняться:

 

 

Краевые условия должны быть справедливы для любого набора констант , поэтому запишем:

 

 

По условию курсовой работы получим:

 

(4.3)

 

В качестве функций будем выбирать функции, принадлежащие к классу полиномов. Тогда, учитывая краевые условия, запишем полином Лагранжа для получим:

 

 

В качестве базисных функций выбираем:

 

При таком подборе базисных функций функция y(x), удовлетворяет краевым условиям, при любом наборе констант .

Введем следующее определение: невязка - разность между левой и правой частями уравнения:

 

 

Для точного решения функция , поэтому для получения решения, близкого к точному, нам надо подобрать коэффициенты так, чтобы функция была мала. Потребуем, чтобы невязка была ортогональна к базисным функциям то есть интеграл

Таким образом, для определения коэффициентов (i=1,2,...,n) приходим к системе линейных уравнений:

 

, (i=1,2,...,n)

 

или более подробно запишем данную систему в матричном виде:

= (4.4)

 

Система уравнений (4.4) разрешается относительно по методу Гаусса. По полученным значениям и функциям определяем столбец значений функции y(x) согласно формуле (4.2).

Определенные интегралы системы уравнений (4.4) можно вычислить по методу Симпсона, общая формула которого имеет вид:

 

 

где n - количество разбиений отрезка [a, b].

Общая погрешность метода Симпсона составляет где .

Подынтегральные функции в системе (4.4) имеют видили Тогда из однородных краевых условий (4.3) получим или , что упрощает формулу Симпсона.

Чтобы достичь заданную точность вычисляем y(x) двумя способами: один раз с числом базисных функций i, другой раз с i+1, получая при этом значения более точные. Если расхождение полученных значений не превышает заданной точности Е = то выбранное число функций можно считать достаточным и полученная функция y(x) удовлетворяет заданной точности. Иначе увеличиваем i, пока не будет достигнута заданная точность.

4.2 Описание результатов

 

При решении данного дифференциального уравнения второго порядка с заданными краевыми условиями (1.3) методом Галёркина, получены следующие результаты представленные в таблице 3. В столбце Х приведено разбиение отрезка [1.3; 1.8] с шагом h = 0.02, в столбце Y(X) - значение функции (n=1,…,26) в соответствующих точках в столбце E - значения найденных абсолютных погрешностей.

В результате работы программы, листинг которой приведен в приложении 3, точность была достигнута при количестве базисных функций равных 5, максимальная погрешность как видно из таблицы 3 при n=24.

Легко заметить, что полученная максимальная погрешность меньше заданной точности следовательно, проверка точности выполнена и полученная точность удовлетворяет заданной.

коши краевой задача точность

Таблица 3

X Y(X) E

1)1.30 2.200000 0.00e+000

)1.32 2.029193 8.78e-007

)1.34 1.859826 9.65e-007

)1.36 1.692047 6.87e-007

)1.38 1.526000 3.23e-007

)1.40 1.361814 3.49e-008

)1.42 1.199613 1.03e-007

)1.44 1.039511 8.21e-008

)1.46 0.881613 6.72e-008

)1.48 0.726016 2.90e-007

)1.50 0.572810 5.25e-007

)1.52 0.422076 7.15e-007

)1.54 0.273886 8.18e-007

)1.56 0.128308 8.13e-007

)1.58 -0.014600 7.01e-007

)1.60 -0.154786 5.07e-007

)1.62 -0.292205 2.77e-007

)1.64 -0.426817 6.75e-008

)1.66 -0.558591 5.80e-008

)1.68 -0.687500 4.71e-008

)1.70 -0.813523 1.28e-007

)1.72 -0.936644 4.51e-007

)1.74 -1.056855 8.38e-007

24)1.76 -1.174150 1.11e-006

)1.78 -1.288530 9.85e-007

)1.80 -1.400000 0.00e+000

Выводы

 

Обыкновенное дифференциальное уравнение второго порядка было решено тремя методами: сведением краевой задачи к задаче Коши, методом конечных разностей, методом Галёркина. Для получения решения были написаны программы на языке программирования C++.

Максимальная погрешность в методе сведения краевой задачи к задаче Коши равна , в методе конечных разностей: , в методе Галёркина: .

Требуемая точность E=была достигнута. При использовании методов сведения к задаче Коши и конечных разностей точность достигалась путём уменьшения шага, при использовании метода Галёркина - путём увеличения количества базисных функций.

 

Приложение 1

 

Листинг программы Метод сведения краевой задачи к задаче Коши

 

#include "stdafx.h"

#include "math.h"int N_max=100;double a=1.3, b=1.8, A=2.2, B=-1.4, epsel=0.00001;F(double x)

{ return (1.8/(x*x)-4);}Q(double x)

{ return (2.3/x);}P(double x)

{ return (0.9*x);}Runge_Kutt(double h,int n,double U[],double V[],double z[],double t[],double a)

{k1z,k2z,k3z,k4z,v,k2v,k3v,k4v,t,k2t,k3t,k4t,u,k2u,k3u,k4u; x=a;[0]=0;[0]=A;[0]=1;[0]=0;(int i=0;i<=n;i++){ =a+i*h;v=z[i];z=F(x) - P(x)*z[i]-Q(x)*V[i];v=z[i]+h/2*k1z;z=F(x+h/2) - P(x+h/2)*(z[i]+h/2*k1z)-Q(x+h/2)*(V[i]+h/2*k1v); v=z[i]+h/2*k2z;z=F(x+h/2) - P(x+h/2)*(z[i]+h/2*k2z)-Q(x+h/2)*(V[i]+h/2*k2v);v=z[i]+h*k3z;z=F(x+h) - P(x+h)*(z[i]+h*k3z)-Q(x+h)*(V[i]+h*k3v);u=t[i];t=-P(x)*t[i]-Q(x)*U[i];u=t[i]+h/2*k1t;t=-P(x+h/2)*(t[i]+h/2*k1t)-Q(x+h/2)*(U[i]+h/2*k1u);u=t[i]+h/2*k2t;t=-P(x+h/2)*(t[i]+h/2*k2t)-Q(x+h/2)*(U[i]+h/2*k2u); u=t[i]+h*k3t;t=-P(x+h)*(t[i]+h*k3t)-Q(x+h)*(U[i]+h*k3u);[i+1]=V[i]+h/6*(k1v+2*k2v+2*k3v+k4v);[i+1]=z[i]+h/6*(k1z+2*k2z+2*k3z+k4z); [i+1]=U[i]+h/6*(k1u+2*k2u+2*k3u+k4u);[i+1]=t[i]+h/6*(k1t+2*k2t+2*k3t+k4t);

}

}Proverka_Tochnosti(double y[],double y_tochnoe[],int n,double delta,double eps[])

{i=0;=0;(i=0;i<=n/2;i++)

{[i]=fabs(y[2*i]-y_tochnoe[i]);(eps[i]>delta)=eps[i];}delta;}Nahozdenie_y(double y[],double U[],double V[],int n,double C)

{i;(i=0;i<=n;i++)[i]=C*U[i]+V[i];

}Prisvoenie_y_Tochnoe(double y[],double y_tochnoe[],double y_vivodimoe[],int n)

{i;(i=0;i<=n;i++){_vivodimoe[i]=y_tochnoe[i];_tochnoe[i] = y[i];}

}Pechat(double y_vivodimoe[],double a,double eps[],int n,int N,double delta)

{i,j=1,k;h,x=a;=n/N;=(b-a)/n; ("n = %d\nh = %1.2f\nMax_Delta = %1.2e\n\n",n,h,delta);("\tx\ty\t\tE\n"); (i=0;i<=n;i+=k)

{

printf("%d)\t%1.2f\t%f\t%1.2e\n",j++,x,y_vivodimoe[i],eps[i]);=x+k*h;

}

}()

{i=0,j=0,N=25,n=0;U[N_max],V[N_max],z[N_max],y[N_max],y_tochnoe[N_max],y_vivodimoe[N_max];h=0,x=0,delta=0,t[N_max],eps[N_max],C=0;=N;

{(n>=N_max)

{("Vihod za predeli massiva"