Получение нулевого значения для переменной, которая явно не должна быть нулевой - PullRequest
0 голосов
/ 12 мая 2018

Я написал следующий код для расчета распределения температуры вдоль плавника.По некоторым причинам он продолжает вычислять определенные значения как ноль, даже если они не равны!

for t = 0:300:3000
for i = 2:L2
    if i ==2
        A(i)= 0.75*rhocp*DX/DT + 3*k/dx;
        B(i)= k/dx;
        C(i)= 2*k/dx;
        D(i)= 0.75*rhocp*(DX/DT)*T(i);
    elseif i == L2
        A(i)= 0.75*rhocp*DX/DT + 3*k/dx;
        B(i)= 2*k/dx;
        C(i)= k/dx;
        D(i)= 0.75*rhocp*(DX/DT)*T(i);
    else
        A(i)= 0.75*rhocp*DX/DT + 2*k/dx;
        B(i)= k/dx;
        C(i)= k/dx;
        D(i)= rhocp*(DX/DT)*T(i);
    end

    P(1) = 0;
    Q(1) = T(1);
    for i = 2:L2
        DENO = A(i) - C(i)*P(i-1);
        NUM = D(i)+ C(i)*Q(i-1);
        P(i) = B(i)/DENO;
        Q(i) = NUM/DENO;
    end

    for i =L2:-1:2
        if i == L2
            T(i) = Q(i);
        else
            T(i) = P(i)*T(i+1) + Q(i);
        end
    end
    T(L1) = ((2*k*T(L2) - h*DX*Tinf)/(2*k - h*DX));
end
disp (T);       

`

DENO и NUM вычисляется как ноль в первой итерации, даже если наРасчет их значений не равен нулю!Это приводит к ошибке «Деление на ноль».

A(2)-C(2)*P(1)

ans =

3750.

Аналитически оно имеет значение, хотя.

1 Ответ

0 голосов
/ 12 мая 2018

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

Наконец я нашел проблему: вы забыли конец, чтобы закрыть цикл
для i = 2: L2 конец должен быть поставлен непосредственно перед P (1) = 0

Кроме того, этот цикл не зависит от значения t, поэтому его можно поставить перед циклом для t = 0: 300: 3000

...