如何设置s1与s2,使1-5000和5001-10000迭代段取值不同?
解决分段迭代中s1和s2的取值设置问题
Hey there! Let's fix up your code so that s1 and s2 use different calculations for the first 5000 iterations versus the next 5000 (5001 to 10000). I noticed a couple of small issues in your current code, so here's how to adjust it properly:
原代码的核心问题
- 第二个循环从
t1=5000开始,会重复计算第5000次迭代的s1/s2,应该从5001起步 s1和s2的维度定义不一致,而且是一维数组,会覆盖之前的迭代结果,没法保存每一步的取值- 缺少
x和y的迭代更新逻辑(原代码里没写,这部分你需要补充自己的动力学方程)
修改后的完整代码
% 初始值设置 x0 = 0.5; y0 = 0.6; dt = 0.01; time = 100; % 时长 num_iteration = ceil(time / dt); num_trajectory = 10000; % 轨迹数量 c = 1; % 常数 % 初始化轨迹数组:每行对应一个轨迹,每列对应一次迭代 y = zeros(num_trajectory, num_iteration) + y0; x = zeros(num_trajectory, num_iteration) + x0; % 初始化s1和s2:和x/y维度一致,保存每次迭代的取值 s1 = zeros(num_trajectory, num_iteration); s2 = zeros(num_trajectory, num_iteration); % 第一段迭代:1到5000次 for t = 1:5000 % 对每个轨迹,计算当前迭代的s1和s2 s1(:, t) = 2 * x(:, t).^2 ./ (y(:, t) + x(:, t) + c); s2(:, t) = 2 * y(:, t); % 👇 这里补充你的x和y更新逻辑(比如动力学方程) % 示例:x(:, t+1) = x(:, t) + dt * some_function(x(:,t), y(:,t), s1(:,t), s2(:,t)); % y(:, t+1) = y(:, t) + dt * another_function(x(:,t), y(:,t), s1(:,t), s2(:,t)); end % 第二段迭代:5001到10000次(用num_iteration更灵活) for t = 5001:num_iteration s1(:, t) = x(:, t) ./ y(:, t); s2(:, t) = y(:, t); % 👇 同样补充第二段的x和y更新逻辑 % x(:, t+1) = ...; % y(:, t+1) = ...; end
关键修改说明
- 维度统一:把
s1和s2改成(num_trajectory, num_iteration)的二维数组,这样能记录每个轨迹在每一次迭代的s1/s2值,不会覆盖之前的结果 - 循环范围修正:第二个循环从5001开始,确保两段迭代完全不重叠
- 灵活性优化:用
num_iteration代替硬编码的10000,后续调整time或dt时不需要手动修改循环上限 - 明确赋值:每个循环里给
s1(:, t)和s2(:, t)赋值,精准对应第t次迭代的所有轨迹取值
别忘了补充x和y的更新逻辑哦,不然所有迭代的x/y都会停留在初始值,s1/s2的分段差异也没法真正体现出来。
内容的提问来源于stack exchange,提问作者maryam john
相关产品推荐
相关产品推荐

