Добрый день. Помогите, пожалуйста, исправить программу. Не верно считает коэффициенты матрицы, хотя все вроде должно быть пучком.
Есть задание
Решить краевую задачу для обыкновенных дифференциальных уравнений методом конечных разностей.Краевая задача:
![$y''+p(x)y'+q(x)y=f(x)$ $y''+p(x)y'+q(x)y=f(x)$](https://dxdy-01.korotkov.co.uk/f/8/4/3/843dfcad32e824bc3289f5491aaa84b282.png)
![$
\left\{ \begin{array}{l}
\alpha_0y(a)+\alpha_1y'(a) = A,\\
\beta_0y(b)+\beta_1y'(b)=B,
\end{array} \right.
$ $
\left\{ \begin{array}{l}
\alpha_0y(a)+\alpha_1y'(a) = A,\\
\beta_0y(b)+\beta_1y'(b)=B,
\end{array} \right.
$](https://dxdy-03.korotkov.co.uk/f/a/1/d/a1ded15687746ebb599bb949711495d782.png)
где
![$k_2=-4,8$ $k_2=-4,8$](https://dxdy-02.korotkov.co.uk/f/d/6/6/d66f151faa170acc3fc8632f86b7ed5e82.png)
![$p(x)= \sqrt{x^2+k_2^2}$ $p(x)= \sqrt{x^2+k_2^2}$](https://dxdy-02.korotkov.co.uk/f/1/2/5/125f6ed5365f15ec84dee0320242a51f82.png)
![$b=3$ $b=3$](https://dxdy-01.korotkov.co.uk/f/c/4/0/c40018d3e75c7dbfa1925e357dc5c7b082.png)
![$h = 0.1$ $h = 0.1$](https://dxdy-02.korotkov.co.uk/f/9/c/3/9c335d42b7f0382c1e455ec6abeead3d82.png)
- шаг разбиения, нужен для программы.
Для решения
конкретно этих условий, я написал программу, которая находит коэффициенты СЛАУ (и пишет их в D:\1.TXT).
arr[i,j] - матрица; brr[i] - столбец свободных коєфициентов.
Код:
const k1=-1;
k2=-4.8;
a0=5;
a1=0;
b0=0;
b1=-5;
AA=1;
BB=0.5;
var h:real;
a,b:integer;
arr:array [0..20,0..20] of real;
brr:array [0..20] of real;
i,j:integer;
x:array [0..20] of real;
y:array [0..20] of real;
n:integer;
fil:text;
function p (var cof:real):real;
begin
p:=k1-cof;
end;
function q (var cof:real):real;
begin
q:=k2+(cof*cof*cof);
end;
function f (var cof:real):real;
begin
f:=sqrt(cof*cof+k2*k2);
end;
BEGIN
assign(fil,'d:\1.txt');
rewrite(fil);
a:=2;
b:=3;
h:=0.1;
n:=(b-a)*10;
for i:=0 to n do begin
for j:=0 to n do begin
arr[i,j]:=0; end;end;
arr[0,0]:=a0-3.0*a1/(2.0*h);
arr[0,1]:=2.0*a1/h;
arr[0,2]:=a1/(2.0*h);
brr[0]:=AA;
for i:=1 to (n-1) do
begin
x[i]:=a+i*h;
arr[i,i-1]:=1.0/(h*h)-p(x[i])/(2.0*h);
arr[i,i]:=-2.0/(h*h)+q(x[i]);
arr[i,i+1]:=1.0/(h*h)+p(x[i])/(2.0*h);
brr[i]:=f(x[i]);
end;
arr[n,n-2]:=b1/(2.0*h);
arr[n,n-1]:=-b1/h;
arr[n,n]:=b0+3.0*b1/(2.0*h);
brr[n]:=BB;
for i:=0 to n do begin
for j:=0 to n do begin
write (fil,{'arr[',i,',',j,']:= ',}arr[i,j]:4:2,#09,#09);
end;
writeln(fil,#13);
end;
writeln(fil,#13);
writeln(fil,#13);
writeln(fil,#13);
for i:=0 to n do begin
writeln (fil,'brr[',i,']= ',brr[i]:4:2,' ');
end;
END.
Писал по вот этой блок-схеме:
![Изображение](http://pic.ipicture.ru/uploads/090514/oVS1FrdTzd.jpg)
В данной блок-схеме:
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
- количество отрезков разбиения,
![$a$ $a$](https://dxdy-01.korotkov.co.uk/f/4/4/b/44bc9d542a92714cac84e01cbbb7fd6182.png)
,
![$b$ $b$](https://dxdy-01.korotkov.co.uk/f/4/b/d/4bdc8d9bcfb35e1c9bfb51fc69687dfc82.png)
- левая и правая граница отрезка,
![$\alpha_0, \beta_0, \alpha_1, \beta_1, A, B$ $\alpha_0, \beta_0, \alpha_1, \beta_1, A, B$](https://dxdy-02.korotkov.co.uk/f/5/1/6/516ef785b65a32134e52b9afc157f88782.png)
- константы из краевых условий,
![$h$ $h$](https://dxdy-03.korotkov.co.uk/f/2/a/d/2ad9d098b937e46f9f58968551adac5782.png)
- шаг разбиения,
![$x (0), ... , x (n)$ $x (0), ... , x (n)$](https://dxdy-04.korotkov.co.uk/f/f/6/3/f63b5c21ec19d7cec4fcf2cb8e4e17da82.png)
- система равноудалены точек,
![$y (0), ..., y (n)$ $y (0), ..., y (n)$](https://dxdy-03.korotkov.co.uk/f/a/4/f/a4fa8db7dbb72868d58baac1af48b20482.png)
- приближенные значения решения краевой задачи,
![$p (x (i)), q (x (i)), f (x ( i))$ $p (x (i)), q (x (i)), f (x ( i))$](https://dxdy-03.korotkov.co.uk/f/e/c/9/ec93c1fb71e56e36d897ce8dbf965f5182.png)
- значение функций
![$p (x), q (x), f (x)$ $p (x), q (x), f (x)$](https://dxdy-03.korotkov.co.uk/f/e/2/f/e2f7c4dcbf41cf64ea149dabe51cb4ba82.png)
из дифференциального уравнения в точке
![$x (i), gauss (a, m, b, y)$ $x (i), gauss (a, m, b, y)$](https://dxdy-01.korotkov.co.uk/f/8/a/8/8a8a77080035628fbbaab1766b82289c82.png)
- подпрограмма решения системы линейных алгебраических уравнений методом Гаусса (
![$a$ $a$](https://dxdy-01.korotkov.co.uk/f/4/4/b/44bc9d542a92714cac84e01cbbb7fd6182.png)
- матрица постоянных коэффициентов,
![$m$ $m$](https://dxdy-01.korotkov.co.uk/f/0/e/5/0e51a2dede42189d77627c4d742822c382.png)
- количество уравнений,
![$b$ $b$](https://dxdy-01.korotkov.co.uk/f/4/b/d/4bdc8d9bcfb35e1c9bfb51fc69687dfc82.png)
- вектор-столбец свободных членов,
![$y$ $y$](https://dxdy-02.korotkov.co.uk/f/d/e/c/deceeaf6940a8c7a5a02373728002b0f82.png)
- вектор-столбец неизвестных.
Единственное, что не совпадает, так это нет подпрограммы решения СЛАУ методом Гауса (gaus()). У меня есть отдельная программа, работающая 100% и мне лень переписывать текст каждый раз, как она нужна где-то в др. программе:).
Ответы не совпадают с ответами у преподавателя.
Так же, если у вас, вдруг, есть программа, которая мне поможет, я ее с удовольствием использую. Т.к. преподавателя интересует конкретно ответ, а не то, каким образом я к нему пришел.