Мне нужно управлять этим циклом в Matlab

#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,:)