《三体》小问题——燃烧绳子计时

我的个人网站:http://riun.xyz


问题一:一根粗细不均匀的绳子,从一头点燃,要烧一个小时烧尽。那如何用它计时15分钟?

首先一根绳子是没法计时15分钟的。

正确的问题是这样:

问题二:有两根不同且都是粗细不均匀的绳子,都是一小时烧完,怎样计时15分钟和45分钟?
(上述问题中其他外部环境保持一致,比如氧气浓度,绳子组成物质等等)

我们先说问题一为什么没法计时15分钟。
首先取绳子的1/4烧,肯定是不对的😂,因为绳子是不均匀的。

其次,正常分析起来,这个问题很容易陷入一个想当然的思路:一根绳子从一头烧,是1小时。那从两端点燃,烧完肯定是30分钟。如果将绳子对折,然后再从两端点燃,就是15分钟了。
这个思路前半部分是正确的,后面是错误的。
“从两端点燃,烧完肯定是30分钟”,之所以这个对,是因为绳子从两头烧,能保证最终两端一定会在一个点烧完,不管这个点在哪里,从开始点燃到最终烧完火都在燃烧这根绳子;又因为两头都有火烧,所以时间是减半的,是30分钟。
而“将绳子对折后从两头烧”,不能保证烧完是15分钟。因为对折后从两头烧,将对折端烧断后,一根绳子会有4个着火点在烧,且4个着火点两两分开,将一根绳子变为了两根绳子,这样,若有一根绳子烧的快,马上就烧完了,剩下的时间就只是两个着火点在烧另一半绳子,没有将时间作用在一根绳子上,所以时间不是等分,不能保证是15分钟。
最简单的例子:想象一根100米长的绳子,前50米都是像针线那样细的,后50米是像汉堡那样粗的。对折后从两端烧,50米细的那部分很快烧完,而剩下的时间只在烧50米粗的那部分,是不是显而易见了呢?

问题二正确的做法是:
需要两个粗细不均匀的绳子,一根从两头烧,另一根从一头烧;当从两头烧的绳子烧完时,(此时30分钟过去了,记作时间点A)再将另一根绳子的另一端也点燃一起烧,这样两个着火点就能在同一根绳子上平分剩下的30分钟;当这根绳子也烧完(记作时间点B),从时间点A到时间点B就是15分钟,从开始到时间点B就是45分钟。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab是一种强大的数值计算和科学编程软件,可以用于解决各种数学和科学问题,包括三体问题三体问题是一个经典的天体力学问题,研究的是三个质点之间的相互作用和运动。 在Matlab中,可以使用数值积分方法来求解三体问题。一种常用的方法是使用ODE(Ordinary Differential Equation)求解器,例如ode45或ode113。这些求解器可以用来求解常微分方程组,其中包括描述三体问题的牛顿运动方程。 首先,需要定义三个质点的质量、初始位置和初始速度。然后,可以编写一个函数来描述牛顿运动方程,并将其作为输入传递给ODE求解器。求解器将根据初始条件和运动方程,计算出三个质点的位置和速度随时间的变化。 以下是一个简单的示例代码,演示了如何使用Matlab解决三体问题: ```matlab function dydt = three_body(t, y) % 定义质点的质量 m1 = 1; m2 = 1; m3 = 1; % 解析输入向量 x1 = y(1); y1 = y(2); x2 = y(3); y2 = y(4); x3 = y(5); y3 = y(6); % 计算质点之间的距离 r12 = sqrt((x2-x1)^2 + (y2-y1)^2); r13 = sqrt((x3-x1)^2 + (y3-y1)^2); r23 = sqrt((x3-x2)^2 + (y3-y2)^2); % 计算加速度 ax1 = (m2*(x2-x1))/(r12^3) + (m3*(x3-x1))/(r13^3); ay1 = (m2*(y2-y1))/(r12^3) + (m3*(y3-y1))/(r13^3); ax2 = (m1*(x1-x2))/(r12^3) + (m3*(x3-x2))/(r23^3); ay2 = (m1*(y1-y2))/(r12^3) + (m3*(y3-y2))/(r23^3); ax3 = (m1*(x1-x3))/(r13^3) + (m2*(x2-x3))/(r23^3); ay3 = (m1*(y1-y3))/(r13^3) + (m2*(y2-y3))/(r23^3); % 返回速度向量 dydt = [y(7); y(8); y(9); y(10); y(11); y(12); ax1; ay1; ax2; ay2; ax3; ay3]; end % 设置初始条件 tspan = [0 10]; % 时间范围 y0 = [1; 0; -1; 0; 0; 0; 0; 0; 0; 0; 0; 0]; % 初始位置和速度 % 使用ODE求解器求解三体问题 [t, y] = ode45(@three_body, tspan, y0); % 绘制质点的轨迹 plot(y(:,1), y(:,2), 'r'); % 质点1的轨迹 hold on; plot(y(:,3), y(:,4), 'g'); % 质点2的轨迹 plot(y(:,5), y(:,6), 'b'); % 质点3的轨迹 xlabel('x'); ylabel('y'); legend('质点1', '质点2', '质点3'); ``` 这段代码定义了一个名为`three_body`的函数,用于描述三体问题的运动方程。然后,使用`ode45`求解器求解该方程,并绘制了三个质点的轨迹。 希望这个示例能帮助你理解如何使用Matlab解决三体问题。如果你有更多相关问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值