如何在Matlab中测试数组内不同参数取值并完成多轮运算
Matlab多轮批量计算实现代码
你需要实现的6轮运算本质是遍历6组动力学参数,每轮固定一组参数后代入10组底物浓度计算比生长速率,两种实现方式如下:
方式1:for循环实现(逻辑清晰易调试)
适合需要对每轮运算结果做额外处理的场景,调试成本低:
% 定义基础参数 mumax = [0.48 0.47 0.51 0.49 0.49 0.43]; Sphe = linspace(40,60,10); Sglu = linspace(85,115,10); Sser = linspace(350,400,10); Sthr = linspace(180,220,10); Ksphe = [25 20 17 18 27 40]; Ksglu = [50 47 56 51 40 30]; Ksser = [175 150 200 22 175 120]; Ksthr = [100 80 120 90 110 100]; % 初始化结果存储矩阵:6行对应6轮运算,10列对应每轮10组测试值 mu_all = zeros(6,10); % 遍历6组参数完成计算 for i = 1:6 % 提取当前轮次的动力学参数 cur_mumax = mumax(i); cur_Ksphe = Ksphe(i); cur_Ksglu = Ksglu(i); cur_Ksser = Ksser(i); cur_Ksthr = Ksthr(i); % 代入10组底物浓度计算当前轮的全部mu值 mu_all(i,:) = cur_mumax .* (Sphe./(Sphe+cur_Ksphe)) .* (Sglu./(Sglu+cur_Ksglu)) .* (Sser./(Sser+cur_Ksser)) .* (Sthr./(Sthr+cur_Ksthr)); end % 示例:查看第1轮的10组运算结果 disp('第1轮运算结果:') disp(mu_all(1,:))
方式2:向量化广播实现(代码简洁运行快)
利用Matlab的自动广播机制无需写循环,适合仅需要批量得到所有结果的场景:
% 定义基础参数 mumax = [0.48 0.47 0.51 0.49 0.49 0.43]; Sphe = linspace(40,60,10); Sglu = linspace(85,115,10); Sser = linspace(350,400,10); Sthr = linspace(180,220,10); Ksphe = [25 20 17 18 27 40]; Ksglu = [50 47 56 51 40 30]; Ksser = [175 150 200 22 175 120]; Ksthr = [100 80 120 90 110 100]; % 将动力学参数转为6行1列的列向量,触发Matlab自动广播运算 mumax_col = mumax(:); Ksphe_col = Ksphe(:); Ksglu_col = Ksglu(:); Ksser_col = Ksser(:); Ksthr_col = Ksthr(:); % 一次性完成所有轮次、所有测试值的计算 mu_all = mumax_col .* (Sphe./(Sphe+Ksphe_col)) .* (Sglu./(Sglu+Ksglu_col)) .* (Sser./(Sser+Ksser_col)) .* (Sthr./(Sthr+Ksthr_col));
结果说明
两种方式计算得到的mu_all都是6行10列的矩阵:
mu_all(i,:)对应第i轮运算的10组测试值结果- 两种计算逻辑完全符合你描述的参数代入规则
内容的提问来源于stack exchange,提问作者pandaprotector
相关产品推荐
相关产品推荐

