#matlab #loops #matrix #iteration #literate-programming
#matlab #петли #матрица #итерация #грамотное программирование
Вопрос:
function stainless_steel(~,~,~) clear,clc T_i = [0 0 12.5 25 37.5 50 0]; k = 0.0162; cp = 0.5; rho = 8000; dt = 3; dx = 0.0125; t = 120; q = 20000; Fo = (k*dt)/(((dx)^2)*rho*cp); e_gen = q*(dt)/(rho*cp); n = t/dt; p = n; T = zeros(n,7); for iteration = 1:p for x = 2:6 T(iteration,x) = [Fo*(T_i(1,x 1) 273.15 T_i(1,x-1) 273.15) (T_i(1,x) 273.15)*(1-2*Fo) e_gen - 273.15]; end end T_i = T; disp(T) end
Я получаю это в результате:
0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0 0 15.9720 27.5000 40.0000 52.5000 60.1400 0
Но мне нужно, чтобы матрица T_i менялась каждый раз. Например, если T_i в начале был
[0 0 12.5 25 37.5 50 0]
Мне нужно, чтобы мой второй T_i был
[ 0 15.9720 27.5000 40.0000 52.5000 60.1400 0]
это результат, который я получил от исходного T_i
И мой третий T_i будет тем результатом, который я получу от второго T_i, являющегося T_i, и так далее в течение 40 итераций. Но я не знаю, как этого добиться 🙁
Комментарии:
1. Вы вычисляете одно и то же для каждой строки, потому что ваши вычисления не зависят от
iteration
и больше ничего не меняется в вашем цикле. Возможно, вам захочется переместитьT_i = T;
линию так, чтобы она находилась внутри цикла.
Ответ №1:
Вы можете решить эту проблему, используя следующие строки:
T_i = zeros(n,7); T_i(1,:) = [0 0 12.5 25 37.5 50 0]; for iteration = 1:p-1 for x = 2:6 T_i(iteration 1,x) = [Fo*(T_i(iteration,x 1) 273.15 T_i(iteration,x-1) 273.15) (T_i(iteration,x) 273.15)*(1-2*Fo) e_gen - 273.15]; end end
Это гарантирует, что для каждой строки, которую вы опускаете в своей матрице, информация из приведенной выше строки используется в качестве входных данных. Я определил его как T_i, но вы, возможно, захотите изменить это, так как это предполагает, что это начальное значение. Фактическое начальное значение в моем примере равно T_i(1,:)