python编程解数学方程(纯字符串格式)

用Python编程来解数学方程(纯字符串格式),没想到出人意料的简单。
我们的目标是从字符串直接求解,而不是输入参数。
例如:
一次方程:3x+5=0
二次方程:x^2+2x+1=0
方程组:
3x+5y=11
6x+5y=23

解一次方程

这是最简单的一种情况,这样一个简单的函数就可以实现

def solv(func):
    p1, p2= func.split('=')
    a1, a2= p1.split('x')
    if a2=='':
        a2= '0'
    x= (float(p2)-float(a2))/  float(a1)
    return x

调用测试:

str1= '3x+5=0'
str1= '19x-38=0'
str1= '3x=9'
x= solv(str1)
print(f'{x=}')

解一次方程组

也很简单,这里增加了一个参数读取函数

def getParm(func):
    p1, p2= func.split('=')
    a1, a2= p1.split('x')
    b1, b2= a2.split('y')
    if b2=='':
        b2= '0'
    return float(a1), float(b1), float(b2), float(p2)
    
def solv2(func1, func2):
    a1, b1, c1, d1= getParm(func1)
    a2, b2, c2, d2= getParm(func2)
    x= ((d1-c1)*b2-(d2-c2)*b1)/(a1*b2- a2*b1)
    y= ((d1-c1)*a2-(d2-c2)*a1)/(-a1*b2+ a2*b1)
    return x,y

调用测试:

str1= '3x+5y=11'
str2= '6x+5y=23'
x,y= solv2(str1,str2)
print(f'{x=},{y=}')

解二次方程

记得求根公式就没问题


def getParm(func):
    p1, p2= func.split('=')
    a1, a2= p1.split('x^2')
    b1, b2= a2.split('x')
    if a1=='':
        a1= '1'
    if b2=='':
        b2= '0'
    return float(a1), float(b1), float(b2), float(p2)

def solv3(func):
    a, b, c, d= getParm(func)
    dt= b*b- 4*a*(c-d)
    if dt>=0:
        x1= (-b+ dt**(1/2))/(2*a)
        x2= (-b- dt**(1/2))/(2*a)
        return x1, x2
    else:
        return None,None

调用测试:

str1= '3x^2-10x-8=0'
# str1= 'x^2-2x+1=0'
# str1= '3x^2+14x+8=0'
x1,x2= solv3(str1)
print(f'{x1=},{x2=}')

扩展

进一步的扩展,是针对缺项的时候做相应的处理;对取参数的函数做通用化;对变量的位置甚至与字母的限制放宽,等等。
应该说,数学学习到这个程度的初中同学,完全可以编写这样的python程序,起到很好的python+数学的互相辅助,互相促进的作用。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣手书生肖让

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值