Доброго времени суток знатоки! У меня есть код на PascalABC, который я пытаюсь перевести на JS, я вроде ка его переделал, но ответы выходят разные, не могу понять в чем дело. Может кто помочь, выяснить в чем проблема, или хотя бы натолкнуть на решение. Буду благодарен! Ссылка на результат выполнение кода на Pascal: https://drive.google.com/open?id=1Wjy0KnodoWu3TcEJDKEridKqUbwujRpZ Код на PascalABC
uses crt;
const mf=500;
type
vector=array[1..mf] of real;
var {раздел описания переменных, которые мы будем использовать в
программе}
i, j, N : integer;
T, alfa, beta : vector;
ai, bi, ci, fi : real;
a, lamda, ro, c, h, tau : real;
kapa1, kapa2, Te1, Te2 : real;
T0, L, t_end, time : real;
f, g : text;
begin
clrscr;
{с клавиатуры вводим все необходимые входные параметры}
Writeln('Введите количество пространственных узлов, N');
Readln(N);
Writeln('Введите окончание по времени, t_end');
Readln(t_end);
Writeln('Введите толщину пластины, L');
Readln(L);
Writeln('Введите коэффициент теплопроводности материала пластины,lamda');
Readln(lamda);
Writeln('Введите плотность материала пластины, ro');
Readln(ro);
Writeln('Введите теплоемкость материала пластины, c');
Readln(c);
Writeln('Введите коэффициент теплообмена на границе х = 0, kapa1');
Readln(kapa1);
Writeln('Введите коэффициент теплообмена на границе х = L, kapa2');
Readln(kapa2);
Writeln('Введите температуру внешней среды относительно границы х= 0, Te1');
Readln(Te1);
Writeln('Введите температуру внешней среды относительно границы х= L, Te2');
Readln(Te2);
Writeln('Введите начальную температуру, T0');
Readln(T0);
{определяем расчетный шаг сетки по пространственной координате}
h:=L/(N-1);
{определяем коэффициент температуропроводности}
a:=lamda/(ro*c);
{определяем расчетный шаг сетки по времени}
tau:=t_end/100.0;
{определяем поле температуры в начальный момент времени}
for i:= 1 to N do
T[i]:=T0;
Writeln('beta = ', (lamda*sqr(h)*T[1]+2.0*a*tau*kapa1*h*Te1)
/(2.0*a*tau*(lamda+kapa1*h)+lamda*sqr(h)));
{проводим интегрирование нестационарного уравнения
теплопроводности}
time:=0;
while time<t_end do {используем цикл с предусловием}
begin
{увеличиваем переменную времени на шаг τ}
time:=time+tau;
{определяем начальные прогоночные коэффициенты на основе левого
граничного условия, используя соотношения (24)}
alfa[1]:=2.0*a*tau*lamda/(2.0*a*tau*(lamda+kapa1*h)+lamda*sqr(h));
beta[1]:=(lamda*sqr(h)*T[1]+2.0*a*tau*kapa1*h*Te1)
/(2.0*a*tau*(lamda+kapa1*h)+lamda*sqr(h));
{цикл с параметром для определения прогоночных коэффициентов по
формуле (8)}
for i:= 2 to N-1 do
begin
{ai, bi, ci, fi – коэффициенты канонического представления СЛАУ с
трехдиагональной матрицей}
ai:=lamda/sqr(h);
bi:=2.0*lamda/sqr(h)+ro*c/tau;
ci:=lamda/sqr(h);
fi:=-ro*c*T[i]/tau;
{alfa[i], beta[i] – прогоночные коэффициенты}
alfa[i]:=ai/(bi-ci*alfa[i-1]);
beta[i]:=(ci*beta[i-1]-fi)/(bi-ci*alfa[i-1]);
end;
{определяем значение температуры на правой границе, используя
соотношение (25)}
T[N]:=(lamda*sqr(h)*T[N]+2.0*a*tau*(lamda*beta[N-1]+kapa2*h*Te2))
/(lamda*sqr(h)+2.0*a*tau*(lamda*(1-alfa[N-1])+kapa2*h));
{используя соотношение (7) определяем неизвестное поле
температуры}
for i:= N-1 downto 1 do
T[i]:=alfa[i]*T[i+1]+beta[i];
end; {цикл с предусловием окончен}
{выводим результат в файл}
Assign(f,'res.txt');
Rewrite(f);
Writeln(f,'Толщина пластины L = ',L:6:4);
Writeln(f,'Число узлов по координате N = ',N);
Writeln(f,'Коэффициент теплопроводности материала пластины lamda =',lamda:6:4);
Writeln(f,'Плотность материала пластины ro = ',ro:6:4);
Writeln(f,'Теплоемкость материала пластины с = ',c:6:4);
Writeln(f,'Начальная температура T0 = ',T0:6:4);
Writeln(f,'Коэффициент теплообмена kapa1 = ',kapa1:6:4);
Writeln(f,'Коэффициент теплообмена kapa2 = ',kapa2:6:4);
Writeln(f,'Температура внешней среды Te1 = ',Te1:6:4);
Writeln(f,'Температура внешней среды Te2 = ',Te2:6:4);
Writeln(f,'Результат получен с шагом по координате h = ',h:6:4);
Writeln(f,'Результат получен с шагом по времени tau = ',tau:6:4);
Writeln(f,'Температурное поле в момент времени t = ',t_end:6:4);
close(f);
Assign(g,'tempr.txt');
Rewrite(g);
for i:=1 to N do
writeln(g,' ',h*(i-1):10:8,' ',T[i]:8:5);
close(g);
end.
Мой код на JS
let N = 50;
let i,j;
let T = [], alfa = [], beta = [];
let ai, bi, ci, fi;
let a, lamda, ro, c, h, tau;
let kapa1, kapa2, Te1, Te2;
let T0, L, t_end, time;
t_end = 180.0000;
L = 0.3000;
lamda = 384.000;
ro = 8800.000;
c = 381.000;
kapa1 = 1000.000;
kapa2 = 500.000;
Te1 = -30.000;
Te2 = 10.00;
T0 = 50.000;
h = L / (N - 1);
a = lamda / (ro * c);
tau = t_end / 100.0;
for(i = 0; i < N; i++) {
T[i] = T0;
}
console.log(T);
let Bi = (kapa1 * h) / lamda;
time = 0.0;
while(time < t_end) {
time = time + tau;
alfa[0] = (2 * a * tau * lamda) / (2 * a * tau * (lamda + kapa1*h) + lamda * Math.pow(h,2));
beta[0] = (lamda * Math.pow(h,2) * T[0] + 2 * a * tau * kapa1 * h * Te1) /
(2 * a * tau * (lamda + kapa1 * h) + lamda * Math.pow(h,2));
for (i = 1; i < N - 1; i++) {
ai = lamda / h ** 2;
bi = 2 * lamda / h ** 2 + ro * c / tau;
ci = lamda / h ** 2;
fi = - ro * c * T[i] / tau;
alfa[i] = ai / (bi - ci * alfa[i -1]);
beta[i] = (ci * beta[i - 1] - fi) / (bi - ci * alfa[i-1]);
}
T[N] = (lamda * h ** 2 * T[N] + 2 * a * tau * (lamda * beta[N-1] + kapa2*h*Te2))/
(lamda * h ** 2 + 2 * a * tau * (lamda * (1 - alfa[N-1] + kapa2 * h)));
for(i = N - 1; i > 0; i--) {
T[i] = alfa[i] * T[i] + beta[i];
}
}
ТО что выводиться в файл на Pascal ТО что я получаю на JS]2
Спасибо всем, кто натолкнул на решение проблемы! На всякий случай оставлю тут, мало кому понадобиться
function test() {
let N = 50;
let i,j;
let T = [], alfa = [], beta = [];
let ai, bi, ci, fi;
let a, lamda, ro, c, h, tau;
let kapa1, kapa2, Te1, Te2;
let T0, L, t_end, time;
t_end = 180.0000;
L = 0.3000;
lamda = 384.000;
ro = 8800.000;
c = 381.000;
kapa1 = 1000.000;
kapa2 = 500.000;
Te1 = -30.000;
Te2 = 10.00;
T0 = 50.000;
h = L / (N - 1);
a = lamda / (ro * c);
tau = t_end / 100.0;
for(i = 0; i < N; i++) {
T[i] = T0;
}
time = 0.0;
while(time < t_end) {
time += tau;
alfa[0] = 2 * a * tau * lamda / (2 * a * tau * (lamda + kapa1*h) + lamda*Math.pow(h,2));
beta[0] = (lamda * Math.pow(h,2) * T[0] + 2 * a * tau * kapa1*h*Te1) /
(2 * a * tau * (lamda + kapa1*h)+lamda*Math.pow(h,2));
for(i = 1; i < N - 1; i++) {
ai = lamda / Math.pow(h,2);
bi = 2.0*lamda/Math.pow(h,2)+ro*c/tau;
ci = lamda / Math.pow(h, 2);
fi = -ro*c*T[i]/tau;
alfa[i] = ai/(bi-ci*alfa[i-1]);
beta[i] = (ci*beta[i-1]-fi) / (bi-ci*alfa[i-1]);
}
T[N-1] = (lamda * Math.pow(h,2) * T[N-1] + 2 * a * tau*(lamda*beta[N-2]+kapa2*h*Te2))
/(lamda * Math.pow(h,2) + 2 * a * tau*(lamda*(1-alfa[N-2])+kapa2*h));
for(i = N - 2; i >= 0; i--) {
T[i] = alfa[i] * T[i+1] + beta[i];
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При нажатие на кнопку должна произойти функция которая будет выводить значение input в массив, а массив в divКак вывести массив в div ?
Почему при добавление в массив значение под элемента - logKeyForView, а не его значение? Как это исправитьПолучается что он не видит эту константу
Подскажите, пожалуйста, как разделить js код на несколько файлов и импортировать их в этот файл