鱼C论坛

 找回密码
 立即注册
查看: 2215|回复: 16

[已解决]python求解复杂函数

[复制链接]
发表于 2023-7-23 15:12:56 | 显示全部楼层 |阅读模式
20鱼币

有一组数据,比如1,2,3……,9,这9个数据是已知的,现在多了一个未知数X,见参考图片,其中,x拔(即上面有一个横杆的那个X)是这一组数据(含未知数X)的平均数,n=10(共10个数据嘛),y通过某种方式已知了,请问如何用python算出X。
虽然表面上是两个未知数(x和x拔),实际上是一个,因为x拔可以通过x和其他9个数据算出来。
最佳答案
2023-7-23 15:12:57
做这个写LaTeX挺累的,希望能得到最佳,有什么问题可以追问。
求助图片1.jpg

最佳答案

查看完整内容

做这个写LaTeX挺累的,希望能得到最佳,有什么问题可以追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:12:57 | 显示全部楼层    本楼为最佳答案   
做这个写LaTeX挺累的,希望能得到最佳,有什么问题可以追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:13:17 | 显示全部楼层
这个问题可以用python的数学计算来解决。首先我们知道,x拔是这组数据的平均数,也就是所有数据之和除以数据的数量。这样我们就可以得到一个方程,然后通过这个方程来求解x。

以下是python代码:
# 已知的9个数据
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 已知的y值
y = # 这里填入你已知的y值

# 计算已知数据的总和
sum_data = sum(data)

# 计算x的值
x = (y * 10) - sum_data

# 输出x的值
print(x)

这段代码首先计算了已知数据的总和,然后根据平均数的定义,我们知道所有数据的总和除以数据的数量等于平均数,即y = (sum_data + x) / 10,然后我们就可以通过这个方程求出x的值。

注意:在实际问题中,你需要将代码中的y值替换为实际已知的y值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:13:29 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-7-23 15:30 编辑

要求解未知数X,我们可以根据已知条件进行计算。根据题目描述,已知的数据为1, 2, 3, ..., 9,一共10个数据,且x拔是这10个数据(包括未知数X)的平均数。
假设已知数据之和为sum,则有 sum = 1 + 2 + 3 + ... + 9 + X。
由于x拔是这10个数据的平均数,我们可以得到以下等式:
x拔 = (sum + X) / 10
另外,题目中提到y通过某种方式已知了,但具体方式未给出。如果我们能确定y与X之间的关系,就可以进一步求解X。
请提供y与X之间的关系或者相关方程式,我可以帮您使用Python进行求解。


为什么不给我设置一个最佳答案呢?点它 ->

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:13:31 | 显示全部楼层
根据你的描述,问题可以简化为如何通过已知数据和一个未知数X来计算出平均数x拔。

首先,我们知道平均数是一组数据求和后再除以数据个数。假设已知数据的总和为sum_known,数据个数为n_known,平均数x拔为avg_known。根据这个信息,我们可以列出以下等式:

sum_known + X = avg_known * (n_known + 1)

在已知数据中,sum_known是已知的,n_known也是已知的。而avg_known也可以通过sum_known和n_known计算得出:

avg_known = sum_known / n_known

将这两个等式结合起来,我们可以解出未知数X:

X = avg_known * (n_known + 1) - sum_known

通过上述公式,你可以使用Python编程来计算出未知数X的值。

下面是一个示例代码:
known_data = [1, 2, 3, 4, 5, 6, 7, 8, 9]  # 已知数据
n_known = len(known_data)  # 已知数据的个数
sum_known = sum(known_data)  # 已知数据的总和
avg_known = sum_known / n_known  # 已知数据的平均数

X = avg_known * (n_known + 1) - sum_known  # 计算未知数X

print("未知数X的值为:", X)

请注意,这段代码假设已知数据中不包含未知数X。如果已知数据中包含未知数X的值,那么我们需要根据具体情况对公式进行修改,以求得正确的结果。

希望这个答案能够解决你的问题!如果有任何进一步的疑问,请随时提出。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:15:37 | 显示全部楼层
isdkz 发表于 2023-7-23 15:13
这个问题可以用python的数学计算来解决。首先我们知道,x拔是这组数据的平均数,也就是所有数据之和除以数 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:18:01 | 显示全部楼层
陶远航 发表于 2023-7-23 15:13
根据你的描述,问题可以简化为如何通过已知数据和一个未知数X来计算出平均数x拔。

首先,我们知道平均数 ...

你看我的脚本什么bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:18:40 | 显示全部楼层

你脚本发我,我给你看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 15:21:20 | 显示全部楼层
陶远航 发表于 2023-7-23 15:18
你脚本发我,我给你看看

知道了,是markdown转换出现了bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-23 15:24:29 | 显示全部楼层
isdkz 发表于 2023-7-23 15:13
这个问题可以用python的数学计算来解决。首先我们知道,x拔是这组数据的平均数,也就是所有数据之和除以数 ...

你这明显不对啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-23 15:27:14 | 显示全部楼层
isdkz 发表于 2023-7-23 15:13
这个问题可以用python的数学计算来解决。首先我们知道,x拔是这组数据的平均数,也就是所有数据之和除以数 ...

不对。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-23 15:33:07 | 显示全部楼层
陶远航 发表于 2023-7-23 15:13
根据你的描述,问题可以简化为如何通过已知数据和一个未知数X来计算出平均数x拔。

首先,我们知道平均数 ...

不对,avg_known = sum_known / n_known,这里的 avg_known和
sum_known + X = avg_known * (n_known + 1)的avg_known不是一个,你搞混淆了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-23 15:38:38 | 显示全部楼层
陶远航 发表于 2023-7-23 15:13
根据你的描述,问题可以简化为如何通过已知数据和一个未知数X来计算出平均数x拔。

首先,我们知道平均数 ...

sum_known + X = avg_known * (n_known + 1)这个条件成立,意味着avg_known是含未知数X的所有样本的平均数,显然不是“avg_known = sum_known / n_known”这个里面的avg_known,这是不含未知数X的平均数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-23 15:47:39 | 显示全部楼层
歌者文明清理员 发表于 2023-7-23 15:13
要求解未知数X,我们可以根据已知条件进行计算。根据题目描述,已知的数据为1, 2, 3, ..., 9,一共10个数据 ...

那比如y=0.235x+0.33,如何求解呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-23 16:08:57 | 显示全部楼层
歌者文明清理员 发表于 2023-7-23 15:13
要求解未知数X,我们可以根据已知条件进行计算。根据题目描述,已知的数据为1, 2, 3, ..., 9,一共10个数据 ...

其实y和x关系在这里面用不到,直接用y=0.04去计算,主要是代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 20:15:06 | 显示全部楼层
本帖最后由 hellomyprogram 于 2023-7-23 20:44 编辑

以只有10个数为例。我们先假定x1到x9存储在一个列表中:姑且叫做“x_list”,并将其的和设做“xsum”。
需要注意,x10是多解的。

我们可以用以下代码算出x10的值(假定我们已经知道x_list与xsum):
import math
#先创建一些暂时的变量
y2 = y**2
a = - 9*xsum*y2 - 729*xsum
b = 729*xsum**2
c = 9*(y**2 - 729)
for xi in x_list:
        a += 10 * xi * y2
        b -= 1458 * xi * xsum + 8 * xi ** 2 * y2
        b += 6561 * xi ** 2
for i in range(9):
        for j in range(i + 1, 9):
                b += 2 * x_list[i] * x_list[j] * y2
x10 = [(a - 10*y*math.sqrt(b)) / c, (a + 10*y*math.sqrt(b)) / c]
需要声明,我的以上式子经过优化,可能出现少了一项的情况,如果确实是如此,请试试下方的未优化的式子:
[(10*x1*y**2 + 10*x2*y**2 + 10*x3*y**2 + 10*x4*y**2 + 10*x5*y**2 + 10*x6*y**2 + 10*x7*y**2 + 10*x8*y**2 + 10*x9*y**2 - 9*xsum*y**2 - 729*xsum - 10*y*math.sqrt(-8*x1**2*y**2 + 6561*x1**2 + 2*x1*x2*y**2 + 2*x1*x3*y**2 + 2*x1*x4*y**2 + 2*x1*x5*y**2 + 2*x1*x6*y**2 + 2*x1*x7*y**2 + 2*x1*x8*y**2 + 2*x1*x9*y**2 - 1458*x1*xsum - 8*x2**2*y**2 + 6561*x2**2 + 2*x2*x3*y**2 + 2*x2*x4*y**2 + 2*x2*x5*y**2 + 2*x2*x6*y**2 + 2*x2*x7*y**2 + 2*x2*x8*y**2 + 2*x2*x9*y**2 - 1458*x2*xsum - 8*x3**2*y**2 + 6561*x3**2 + 2*x3*x4*y**2 + 2*x3*x5*y**2 + 2*x3*x6*y**2 + 2*x3*x7*y**2 + 2*x3*x8*y**2 + 2*x3*x9*y**2 - 1458*x3*xsum - 8*x4**2*y**2 + 6561*x4**2 + 2*x4*x5*y**2 + 2*x4*x6*y**2 + 2*x4*x7*y**2 + 2*x4*x8*y**2 + 2*x4*x9*y**2 - 1458*x4*xsum - 8*x5**2*y**2 + 6561*x5**2 + 2*x5*x6*y**2 + 2*x5*x7*y**2 + 2*x5*x8*y**2 + 2*x5*x9*y**2 - 1458*x5*xsum - 8*x6**2*y**2 + 6561*x6**2 + 2*x6*x7*y**2 + 2*x6*x8*y**2 + 2*x6*x9*y**2 - 1458*x6*xsum - 8*x7**2*y**2 + 6561*x7**2 + 2*x7*x8*y**2 + 2*x7*x9*y**2 - 1458*x7*xsum - 8*x8**2*y**2 + 6561*x8**2 + 2*x8*x9*y**2 - 1458*x8*xsum - 8*x9**2*y**2 + 6561*x9**2 - 1458*x9*xsum + 729*xsum**2))/(9*(y**2 - 729)), (10*x1*y**2 + 10*x2*y**2 + 10*x3*y**2 + 10*x4*y**2 + 10*x5*y**2 + 10*x6*y**2 + 10*x7*y**2 + 10*x8*y**2 + 10*x9*y**2 - 9*xsum*y**2 - 729*xsum + 10*y*math.sqrt(-8*x1**2*y**2 + 6561*x1**2 + 2*x1*x2*y**2 + 2*x1*x3*y**2 + 2*x1*x4*y**2 + 2*x1*x5*y**2 + 2*x1*x6*y**2 + 2*x1*x7*y**2 + 2*x1*x8*y**2 + 2*x1*x9*y**2 - 1458*x1*xsum - 8*x2**2*y**2 + 6561*x2**2 + 2*x2*x3*y**2 + 2*x2*x4*y**2 + 2*x2*x5*y**2 + 2*x2*x6*y**2 + 2*x2*x7*y**2 + 2*x2*x8*y**2 + 2*x2*x9*y**2 - 1458*x2*xsum - 8*x3**2*y**2 + 6561*x3**2 + 2*x3*x4*y**2 + 2*x3*x5*y**2 + 2*x3*x6*y**2 + 2*x3*x7*y**2 + 2*x3*x8*y**2 + 2*x3*x9*y**2 - 1458*x3*xsum - 8*x4**2*y**2 + 6561*x4**2 + 2*x4*x5*y**2 + 2*x4*x6*y**2 + 2*x4*x7*y**2 + 2*x4*x8*y**2 + 2*x4*x9*y**2 - 1458*x4*xsum - 8*x5**2*y**2 + 6561*x5**2 + 2*x5*x6*y**2 + 2*x5*x7*y**2 + 2*x5*x8*y**2 + 2*x5*x9*y**2 - 1458*x5*xsum - 8*x6**2*y**2 + 6561*x6**2 + 2*x6*x7*y**2 + 2*x6*x8*y**2 + 2*x6*x9*y**2 - 1458*x6*xsum - 8*x7**2*y**2 + 6561*x7**2 + 2*x7*x8*y**2 + 2*x7*x9*y**2 - 1458*x7*xsum - 8*x8**2*y**2 + 6561*x8**2 + 2*x8*x9*y**2 - 1458*x8*xsum - 8*x9**2*y**2 + 6561*x9**2 - 1458*x9*xsum + 729*xsum**2))/(9*(y**2 - 729))]
我们可以通过优化过的代码,大概推算出这样的逻辑(数据量用n表示):
import math
#先创建一些暂时的变量
y2 = y**2
a = - n*xsum*y2 - n**3*xsum
b = n**3*xsum**2
c = n*(y**2 - n**3)
for xi in x_list:
        a += (n+1) * xi * y2
        b -= 2*n**3 * xi * xsum + 8 * xi ** 2 * y2
        b += n**4 * xi ** 2
for i in range(n):
        for j in range(i + 1, 9):
                b += 2 * x_list[i] * x_list[j] * y2
x_result = [(a - (n+1)*y*math.sqrt(b)) / c, (a + (n+1)*y*math.sqrt(b)) / c]
需要再次说明,我的推算仅仅是基于我的优化而得到的,如果我的优化出现了问题,那么这个计算方式也是一定错误的。

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
歌者文明清理员 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-24 01:22:47 | 显示全部楼层
化简成二次方程,用求根公式。

屏幕截图 2023-07-24 011522.png

也可以看这个链接

https://www.luogu.com.cn/paste/nf4wmv5f

最终代码:
import math
y=int(input())
a=216-3*y*y
b=-2160-30*y
c=5400-95*y*y
delta=b*b-4*a*c
if delta<0:
    print('no answer')
else:
    print((-b+math.sqrt(delta))/2/a,(-b-math.sqrt(delta))/2/a)#请自行取舍答案。

记得给最佳噢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 08:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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