鱼C论坛

 找回密码
 立即注册
查看: 3224|回复: 7

[已解决]如何用python解方程

[复制链接]
发表于 2023-2-22 12:06:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
公式是
z =2000000*x+50000000+1000000/0.8
z= 2000000*y+50000000+1000000/0.7

z的值在什么范围时2000000/(2000000+50000000/x+1000000/0.8x) < 2000000/(2000000+50000000/y+1000000/0.7y)


我现在想用while函数嵌套z=z+10000之类的,但失败了...求大佬解答....
最佳答案
2023-5-14 17:12:10
首先,需要明确的是使用 while 循环中需要有一个终止条件来停止循环。另外,需要注意的是 for 循环和 while 循环的区别,for 循环适合已知循环次数,而 while 循环可以用于未知循环次数的场景。

根据公式,我们可以得到: z 的取值范围为 [2,50000000]。

如果想以步长为10000进行遍历,代码如下所示:
x = 1
y = 1
z = 0

while z >= 2 and z <= 50000000:
    while z >= 2 and z <= 50000000:
        fx = 2000000 / (2000000 + 50000000/x + 1000000/0.8*x)
        fy = 2000000 / (2000000 + 50000000/y + 1000000/0.7*y)
        if fx < fy:
            print(f"当 x={x}, y={y} 时,f(x)={fx}, f(y)={fy}")
        z = 2000000 * x + 50000000 + 1000000 / 0.8
        y += 1
        
    x += 1
    y = 1
    z = 0
上述代码中,首先对变量进行赋值,并进行了两层循环。在第二层循环中,进行了变量值的计算,并根据条件进行判断并输出结果。然后加上步长再更新变量值。

无论是在 for 循环还是 while 循环中,都需要注意循环次数或循环终止条件的判断。同时,对于嵌套循环,也要注意内外层变量值的处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 14:14:33 | 显示全部楼层
是z的值在什么范围时,x<y吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 18:07:22 | 显示全部楼层
不是x<y,而是x和y各自公式的数字作对比,x公式的得出的数字比y公式的小。x的公式是2000000/(2000000+50000000/x+1000000/0.8x),y的公式是2000000/(2000000+50000000/y+1000000/0.7y)。其实这道题还是二元一次方程,只不过是z是自己按照上面的要求慢慢试出来的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 18:08:09 | 显示全部楼层
未泯 发表于 2023-2-22 14:14
是z的值在什么范围时,x


不是x<y,而是x和y各自公式的数字作对比,x公式的得出的数字比y公式的小。x的公式是2000000/(2000000+50000000/x+1000000/0.8x),y的公式是2000000/(2000000+50000000/y+1000000/0.7y)。其实这道题还是二元一次方程,只不过是z是自己按照上面的要求慢慢试出来的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 18:33:29 | 显示全部楼层
未泯 发表于 2023-2-22 14:14
是z的值在什么范围时,x

我目前的垃圾想法是这样的...求大佬解答

from sympy import symbols, Eq, solve


while equation_3 < equation_4:
    z = 1000000
    z = str(z)
   
    x, y = symbols("x y")
    equation_1 = Eq(2000000*x+50000000+1000000/0.8, z)
    equation_2 = Eq(2000000*y+50000000+1000000/0.7, z)
    solution = solve((equation_1, equation_2), (x, y))

    equation_3 = Eq(2000000/(2000000+50000000/x+1000000/0.8*x))
    equation_4 = Eq(2000000/(2000000+50000000/y+1000000/0.7*y))
   
z = z + 100000

return z
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 17:12:10 | 显示全部楼层    本楼为最佳答案   
首先,需要明确的是使用 while 循环中需要有一个终止条件来停止循环。另外,需要注意的是 for 循环和 while 循环的区别,for 循环适合已知循环次数,而 while 循环可以用于未知循环次数的场景。

根据公式,我们可以得到: z 的取值范围为 [2,50000000]。

如果想以步长为10000进行遍历,代码如下所示:
x = 1
y = 1
z = 0

while z >= 2 and z <= 50000000:
    while z >= 2 and z <= 50000000:
        fx = 2000000 / (2000000 + 50000000/x + 1000000/0.8*x)
        fy = 2000000 / (2000000 + 50000000/y + 1000000/0.7*y)
        if fx < fy:
            print(f"当 x={x}, y={y} 时,f(x)={fx}, f(y)={fy}")
        z = 2000000 * x + 50000000 + 1000000 / 0.8
        y += 1
        
    x += 1
    y = 1
    z = 0
上述代码中,首先对变量进行赋值,并进行了两层循环。在第二层循环中,进行了变量值的计算,并根据条件进行判断并输出结果。然后加上步长再更新变量值。

无论是在 for 循环还是 while 循环中,都需要注意循环次数或循环终止条件的判断。同时,对于嵌套循环,也要注意内外层变量值的处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 17:48:59 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 17:50:36 | 显示全部楼层
题目设置就有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 02:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表