常用算法——解析算法

解析算法,即解析法(analysis algorithm)是指用解析的方法找出表示问题的前提条件与结果之间关系的数学表达式,并通过表达式的计算来实现问题求解,其解题流程见图1。 

解析算法流程图

例1 使用一根长度为l厘米的铁丝,制作一个面积为s平方厘米的矩形框,要求计算该矩形框应有的高h和宽w。

 

铁丝制作矩形框参数关系图

分析:设矩形框的高为h、宽为w,则根据几何关系(参考图2)可得:

 所以h=h1,则w=h2;或者h=h2,则w=h1

d=l^{2}-16s,则当d<0时无解,当d=0时有两个相同解,当d>0时有两个不同解。程序流程如图3所示。

铁丝制作矩形框程序设计流程图

完整程序如下:

##############################################
# 设计 Zhang Ruilin    创建 2022-10-30 14:21 #
# 已知矩形周长(l)和面积(s),求其高(h)和宽(w) #
##############################################
l = float(input('请输入铁丝的长度'))
s = float(input('请输入矩形框面积'))
d = l * l - 16 * s
if d < 0:
    print(f'无实数解(长度为{l}厘米的铁丝制作'\
          f'不了面积为{s}平方厘米的矩形框)')
elif d == 0:
    h = w = l / 4
    print(f'长度为{l}厘米的铁丝制作面积为{s}平方厘米的'\
          f'矩形框,高为{h}厘米宽为{w}厘米')
else:
    h = (l - d ** 0.5) / 4
    w = (l + d ** 0.5) / 4
    print(f'长度为{l}厘米的铁丝制作面积为{s}平方厘米的'\
          f'矩形框,高为{h:.2f}厘米宽为{w:.2f}厘米')

执行结果如下:

 2 古代有个聪明人给国王送来了一种棋子,叫做象棋,棋盘上有六十四个格子,棋子上刻着皇帝”“皇后”“”“”“”……。下棋的人按照规则走动棋子,双方对阵,像打仗一样,看谁能把谁打败。国王玩得没有够,这象棋真的太好玩了。于是,国王把发明象棋的聪明人找来,高兴地说:这玩意儿确实使人玩不厌,我要重重赏你,你希望得到什么,我都能满足你的要求。

聪明人说:“我只要些米粒。”“米粒,几颗米粒算什么?”国王说:“你要多少?”聪明人说,“这样吧,您在第一格棋盘上放一粒,第二格棋盘上放两粒,第三格放上四粒……照这样放下去,每格比前一格加一倍,把八八六十四格棋盘都放满了,我也就满足了。”(参见图4)。

 64格棋盘上每格应放米粒数示意图

国王叫管粮食的大臣来计算,他一粒、两粒、四粒、八粒、十六粒……才放到二十格,一口袋大米就放完了,以后是二袋、四袋、八袋、十六袋……还没有放到棋盘的一半。粮仓里的粮食全放完了,他马上去报告国王:“不得了,不得了!”“什么事大惊小怪?”国王问。请计算放满64格棋盘需要多少粮食(1 千克大米约50000粒),以至于管粮食的大臣大喊“不得了,不得了!”。

解法一:如图4所示,总数s=2^{0}+2^{1}+2^{2}+2^{3}+...+2^{62}+2^{63}。计算程序如下:

#############################################
# 设计 Zhang Ruilin   创建 2022-10-31 09:01 #
# 棋盘上的米粒。64 格棋盘,第 1 格放 1 粒, #
# 第 2 格放 2 粒,程序后一格是前一格的一倍,#
# 求放满64格需要多少大米(1 千克约 50000 粒) #
#############################################
s = 0
for i in range(64):
    s += 2**i
print(f'{s}粒,约{s/50000:.2f}千克\n约{s/5e7:.2f}吨)')

运行结果为:

18446744073709551615粒,约368934881474191.06千克

约368934881474.19吨。

解法二:式s=2^{0}+2^{1}+2^{2}+2^{3}+...+2^{62}+2^{63}明显是个等比数列求和等比数列求和,设

 

 计算程序如下:

#############################################
# 设计 Zhang Ruilin   创建 2022-10-31 12:50 #
# 棋盘上的米粒。64 格棋盘,第 1 格放 1 粒, #
# 第 2 格放 2 粒,程序后一格是前一格的一倍,#
# 求放满64格需要多少大米(1 千克约 50000 粒) #
#############################################
a1 = 1
q = 2
n = 64
s = 2 ** 64 - 1
print(f'{s}粒,约{s/50000:.2f}千克\n约{s/5e7:.2f}吨)')

运行结果为:

18446744073709551615粒,约368934881474191.06千克

约368934881474.19吨

2021年度中国大米产量约为1.49亿吨

即需要按中国2021年的产量,2476.07年生产的大米才能满足要求。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数学建模中,常用算法有很多。其中一些常见的算法包括: 1. 线性回归:通过拟合一条直线来预测因变量和自变量之间的关系。 2. 最小二乘法:通过求解一个最小二乘问题来拟合数据。 3. 插值:通过已知数据点推导出在这些点之间的值。 4. 数值积分:通过数值方法计算函数的定积分。 5. 数值微分:通过数值方法计算函数的导数。 6. 非线性方程求解:通过数值方法求解无法用解析方法求解的方程。 7. 最优化问题:通过数值方法找到使目标函数取得最大或最小值的变量值。 8. 蒙特卡洛模拟:通过随机抽样的方法模拟实验结果,用于分析概率和统计问题。 Python中有许多第三方库可以用于实现这些算法,如NumPy、SciPy、Pandas、Matplotlib等。这些库提供了丰富的函数和方法来支持各种数学建模任务。通过使用这些库,你可以轻松地实现各种数学建模算法,并进行相应的数据分析和可视化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python interpolate_如何使用python完成数学建模常用算法](https://blog.csdn.net/weixin_39974958/article/details/110251180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【Python数学建模常用算法代码——蒙特卡洛模型】](https://blog.csdn.net/m0_56694518/article/details/130445996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值