鱼C论坛

 找回密码
 立即注册
查看: 2678|回复: 4

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

[复制链接]
发表于 2023-3-18 00:44:03 | 显示全部楼层 |阅读模式

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

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

x
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()
最佳答案
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 值,以便在图上显示拟合曲线。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 值,以便在图上显示拟合曲线。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-18 07:04:39 | 显示全部楼层
《鸡你太没》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-18 07:24:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-18 09:20:17 | 显示全部楼层
小黑子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-31 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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