我已经用多项式回归创建了一个公式来计算输入的阻力点.我使用输入在单独的文件中测试了公式,输出似乎可以正常工作.然而,在实际的文件中,它似乎输出了非常错误的数字.我的第一个 idea 是,OpenCV的输出样式对于数字来说是某种奇怪的格式,但当我打印这些值时,它们就很好了.它对较小的公式似乎工作得很好,但为我创建的公式提供了狂野的值.任何帮助都将不胜感激.下面是使用测试输入和正确输出计算x和y的公式,与我在实际文件中得到的结果进行比较.谢谢.

def triang_x(x1):
    x2 = (-6.8808613455609384e+005) + (3.2312735687925651e+003 * x1)
            + (-6.0019455279289815e+000 * x1**2) + (1.0786025430222985e-002 * x1**3)
           + (-2.8031333306353576e-005 * x1**4) + (4.7125204049478773e-008 * x1**5)
           + (-3.8733353649642116e-011 * x1**6) + (1.4733899082497896e-014 * x1**7)
           + (-5.1033986030610612e-018 * x1**8) + (2.7445807881521161e-021 * x1**9)
           + (1.4039325861603808e-024 * x1**10) + (-7.8303365296494140e-027 * x1**11)
           + (2.0700235162417034e-029 * x1**12) + (-2.5633522287710555e-032 * x1**13)
           + (1.4236656075804622e-035 * x1**14) + (-2.9388878284829885e-039 * x1**15)
    return x2

def triang_y(y1):
    y2 = ((2.9536073194970668e+004) + (-7.2584981060026985e+002 * y1)
            + (5.9991721893954519e+000 * y1**2) + (-1.4273839368311947e-002 * y1**3)
           + (-6.1205911580247642e-005 * y1**4) + (4.1603526512587676e-007 * y1**5)
           + (-6.9546008738218303e-010 * y1**6) + (-1.1072665851528698e-013 * y1**7)
           + (-6.4446469064614884e-016 * y1**8) + (8.0190196135612936e-018 * y1**9)
           + (-8.8768139841444641e-021 * y1**10) + (-1.3685149110264805e-023 * y1**11)
           + (1.3193560897991867e-026 * y1**12) + (5.4138560249698032e-029 * y1**13)
           + (-9.5141032455036651e-032 * y1**14) + (4.4497796299711634e-035 * y1**15))
    return y2
        
# Test Values are x:1116 y:398
#Correct Output is x:900.892612375319 y:889.0486684303542
#Output received in main is 10415680.385044796 -167144.0485716732

推荐答案

你的问题目前提出的方式,我完全搞不懂.

我可以告诉您,您的第一个函数有一个错误:您试图分配16个求和,但当您打破这一行时,后面的所有内容都将不是该和的一部分.你的should分得了IndentationError分...除非您问题中的代码缩进方式与您在自己的计算机上实际运行的代码不同.如果缩进just right,只会有一堆2加数加法没有结果,因为在Python中,表达式的值不赋值是完全合法的.要解决此问题,请将括号()放在赋值右侧的整个表达式两边.

您的第二个函数看起来没有问题,并且看起来像您想要的那样工作.我不能重复你在问题中所说的"错误的价值观".

除此之外...与其编写如此庞大的Python表达式,只需使用numpy来表示系数和多项式的计算:

import numpy as np

coeffs_x = np.float64([
    -6.8808613455609384e+005,  # 0
    +3.2312735687925651e+003,  # 1
    -6.0019455279289815e+000,  # 2
    +1.0786025430222985e-002,  # 3
    -2.8031333306353576e-005,  # 4
    +4.7125204049478773e-008,  # 5
    -3.8733353649642116e-011,  # 6
    +1.4733899082497896e-014,  # 7
    -5.1033986030610612e-018,  # 8
    +2.7445807881521161e-021,  # 9
    +1.4039325861603808e-024,  # 10
    -7.8303365296494140e-027,  # 11
    +2.0700235162417034e-029,  # 12
    -2.5633522287710555e-032,  # 13
    +1.4236656075804622e-035,  # 14
    -2.9388878284829885e-039,  # 15
])
triang_x = np.polynomial.Polynomial(coeffs_x)

coeffs_y = np.float64([
    +2.9536073194970668e+004, # 0
    -7.2584981060026985e+002, # 1
    +5.9991721893954519e+000, # 2
    -1.4273839368311947e-002, # 3
    -6.1205911580247642e-005, # 4
    +4.1603526512587676e-007, # 5
    -6.9546008738218303e-010, # 6
    -1.1072665851528698e-013, # 7
    -6.4446469064614884e-016, # 8
    +8.0190196135612936e-018, # 9
    -8.8768139841444641e-021, # 10
    -1.3685149110264805e-023, # 11
    +1.3193560897991867e-026, # 12
    +5.4138560249698032e-029, # 13
    -9.5141032455036651e-032, # 14
    +4.4497796299711634e-035, # 15
])
triang_y = np.polynomial.Polynomial(coeffs_y)

print(triang_x(1116), triang_y(398))
# => 900.8926123741549 889.0486684304415

Python相关问答推荐

如何在msgraph.GraphServiceClient上进行身份验证?

我从带有langchain的mongoDB中的vector serch获得一个空数组

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

图像 pyramid .难以创建所需的合成图像

如何列举Pandigital Prime Set

C#使用程序从Python中执行Exec文件

如何更改分组条形图中条形图的 colored颜色 ?

在Django admin中自动完成相关字段筛选

Django RawSQL注释字段

下三角形掩码与seaborn clustermap bug

为什么Python内存中的列表大小与文档不匹配?

Polars map_使用多处理对UDF进行批处理

在用于Python的Bokeh包中设置按钮的样式

如何使用matplotlib查看并列直方图

每次查询的流通股数量

python3中np. divide(x,y)和x/y有什么区别?'

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

在一个数据帧中,我如何才能发现每个行号是否出现在一列列表中?

Stats.ttest_ind:提取df值

Pandas 数据框自定义排序功能