acllib 2021-01-16 07:20 采纳率: 60%
浏览 45

用Python验证卡尔丹公式出错,怎么解决

代码如下:
 

import random

p = random.randint(1,10)
q = random.randint(1,10)

#p = 0
#q = 1

print("p = ", p)
print("q = ", q)

#dr为判别式
dr = (q/2)**2 + (p/3)**3
print("dr = ", dr)


u = (-q/2 + dr**0.5)**(1/3)
v = (-q/2 - dr**0.5)**(1/3)
print("u = ", u)
print("v = ", v)

x = u + v
print("x = ", x)

#zero用于判断所求x是否为 x**3 + p * x + q的根
zero = x**3 + p * x + q
print("zero = ", zero)

运行结果如下:

当p = 0,q = 1时效果还好,但是换其他数字时偏差就很大了

请问为什么会这样,如何解决?

  • 写回答

2条回答 默认 最新

  • 皛心 2021-01-16 11:21
    关注

    你应该学会封装,将算法封装成函数,我只能帮你整理程序,算法你自己检查一下有没有问题!

    def operation(p, q):
        p = float(p)
        q = float(q)
        def check_dr():
            dr = (q/2)**2 + (p/3)**3
            return dr
        dr = check_dr()
        u = (-q/2 + dr**0.5)**(1/3)
        v = (-q/2 - dr**0.5)**(1/3)
        x = u + v
        zero = x**3 + p * x + q
        return zero
    
    p = input('请输入数字p:')
    q = input('请输入数字q:')
    print(f'运算结果是:{operation(p,q)}')
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 关于无人驾驶的航向角
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了