MrPencil 发表于 2023-3-18 00:44:03

有个问题,如何通过确认3个点来找函数图像,我设计了个程序,但感觉画出的图有问题

import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
a = input("请输入线的名称:")
b = input("请输入点的名称:")
c = input("请输入x坐标的名称:")
d = input("请输入y坐标的名称:")
f = input("请输入标题的名称: ")
z = int(input("请输入函数的次数: "))
n = int(input("请输入点的个数:"))
i = 0
x = []
y = []
for i in range(n):
    a = int(input("请输入一点的x坐标:"))
    b = int(input("请输入一点的y坐标:"))
    x.append(a)
    y.append(b)
    i = i + 1
x = np.array(x)
y = np.array(y)
plot = plt.plot(x, y, 'b-', label=a)
fit = np.polyfit(x, y, z)
print(fit)
pl = np.poly1d(fit)
print("拟合曲线", pl)
yvals = pl(x)
plot2 = plt.plot(x, yvals, 'r*', label=b)
plt.xlabel(c)
plt.ylabel(d)
plt.title(f)
plt.legend()
plt.savefig("鸡你太没.png")
plt.show()

isdkz 发表于 2023-3-18 00:50:29

这个程序的主要问题在于使用 np.polyfit 函数拟合多项式时,选择的拟合次数可能不合适。当你要求用户输入函数的次数时,这可能会导致不正确的图像。为了修复这个问题,你可以使用更合适的拟合次数。由于你提到了有三个点,所以我们可以使用二次多项式来拟合这些点。

此外,程序中的一些变量名与输入值混淆了,我对程序做了一些修改,使其更清晰易懂。以下是修复后的程序:

import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
line_name = input("请输入线的名称:")
point_name = input("请输入点的名称:")
x_axis_name = input("请输入x坐标的名称:")
y_axis_name = input("请输入y坐标的名称:")
title_name = input("请输入标题的名称: ")
n = int(input("请输入点的个数:"))
assert n == 3, "请输入3个点"

x = []
y = []
for i in range(n):
    a = int(input("请输入一点的x坐标:"))
    b = int(input("请输入一点的y坐标:"))
    x.append(a)
    y.append(b)

x = np.array(x)
y = np.array(y)
plt.plot(x, y, 'bo', label=point_name)
fit = np.polyfit(x, y, 2)# 使用二次多项式拟合
print(fit)
pl = np.poly1d(fit)
print("拟合曲线", pl)
xvals = np.linspace(min(x), max(x), 100)
yvals = pl(xvals)
plt.plot(xvals, yvals, 'r-', label=line_name)
plt.xlabel(x_axis_name)
plt.ylabel(y_axis_name)
plt.title(title_name)
plt.legend()
plt.savefig("鸡你太没.png")
plt.show()


这个修复后的程序将会为给定的三个点生成一个二次多项式拟合曲线。注意我使用了 np.linspace 函数在 x 轴的范围内创建了一个等间隔的点集,并计算了这些点对应的 y 值,以便在图上显示拟合曲线。

歌者文明清理员 发表于 2023-3-18 07:04:39

《鸡你太没》

liuhongrun2022 发表于 2023-3-18 07:24:15

歌者文明清理员 发表于 2023-3-18 07:04


你干嘛哈哈哎呦

MrPencil 发表于 2023-3-18 09:20:17

{:10_277:}小黑子
页: [1]
查看完整版本: 有个问题,如何通过确认3个点来找函数图像,我设计了个程序,但感觉画出的图有问题