![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
в общем есть программа, но я не знаю правильно она работает или нет. и надо в ней кусок проверить
Код:
R:=Rs*(1+q);
for i:=1 to N - 1 do // цикл по сетке
begin
R[i]:=Rs*q^(i);
R[i-0.5]:=0.5*(R[i]+R[i-1]);
R[i+0.5]:=0.5*(R[i+1]+R[i]);
V:=0.5*((R[i+0.5])*(R[i+0.5])-(R[i-0.5])*(R[i-0.5]));
A[i]:=pepr*dT*((R[i-0.5])/(R[i]-R[i-1]));
C[i]:=(V+pepr*dT*(((R[i-0.5])/(R[i]-R[i-1]))-((R[i+0.5])/(R[i+1]-R[i]));
B[i]:=Pepr*dT*((R[i+0.5])/(R[i+1]-R[i]);
F[i]:=V*P2[i];
R:=R+(R[i]-R[i-1]);
end;Последний раз редактировалось lmikle, 17.06.2013 в 10:17. |
|
#2
|
||||
|
||||
|
Либо вы невнимательно скопировали, либо одно из двух.
Сначала у вас R используется как число, а далее уже как массив. q^(i) - это вообще непонятно что. R[i+0.5] - такого быть вообще не может. Индекс массива целое число. |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
frankinvini (17.06.2013)
| ||
|
#3
|
|||
|
|||
|
надо как-то так
Код:
var
R:Real;
R_i:Real;
R_i_p1:Real;
R_i_m1:Real;
R_i_p05:Real;
R_i_m05:Real;
begin
R := Rs*(1+q);
R_i := Rs;
for i:=1 to N-1 do begin
R_i_m1 := R_i;
R_i := R_i * q;
R_i_p1 := R_i * q;
R_i_m05 := 0.5*(R_i + R_i_m1);
R_i_p05 := 0.5*(R_i_p1 + R_i);
// далее заменяем
V:=0.5*((R_i_p05)*(R_i_p05)-(R_i_m-05)*(R_i_m05));
A[i]:=pepr*dT*((R_i_m05)/(R_i-R_i_m1));
C[i]:=(V+pepr*dT*(((R_i_m05)/(R_i-R_i_m1))-((R_i_p05)/(R_i_p1-R_i));
B[i]:=Pepr*dT*((R_i_p05)/(R_i_p1-R_i);
F[i]:=V*P2[i];
R:=R+(R_i-R_i_m1);
end; |
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
frankinvini (17.06.2013)
| ||
|
#4
|
|||
|
|||
|
R это не массив, это просто расстояние вдоль координатно-временной сетки
переделал как то так: R:=Rs; for i:=1 to N - 1 do begin V[i]:=0.125*Rs*Rs*(q^(2*i))*((q*q+2*q-(2/q)-(1/(q*q))); A:=0.5*pepr*dT*((q+1)/(q-1)); C[i]:=(V[i]+pepr*dT*((q+1)/(q-1))); B:=0.5*pepr*dT*((q+1)/(q-1)); F[i]:=V[i]*P2[i]; R:=R+Rs*(q^(i))*(1-(1/q)); end; здесь избавился от всех непонятных значений типа R(i+-1/2). в этом случае V[i] это просто число, которое меняется в зависимости от i. q^(2*i) это как бы q в степени 2i. C[i] и F[i] также числа. они нужны длф нахождения прогоночных коэффициентов альфа и бетта p.s. есть полный код программы. в нем как раз таки разобраться не могу. если бы кто нибудь объяснил что там такое, был бы очень благодарен p.p.s. программа эта моделирует давление, если что=) Последний раз редактировалось frankinvini, 17.06.2013 в 13:47. |