首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算不确定度的函数

计算不确定度的函数
EN

Stack Overflow用户
提问于 2022-03-21 17:39:23
回答 2查看 165关注 0票数 0

您可能知道,也可能不知道,由某个函数定义的变量中不确定性的公式。

由以下机构提供:

我想要创建一个python函数来完成这个任务。这就是我目前的情况:

代码语言:javascript
复制
import sympy as sp
from sympy import lambdify, symbols,diff

L,g = symbols('L g', real=True) 
value_of_var = [5.4,9.8] # Arbitrary values for L and g
uncertainty_in_var = [0.3, 0.1] 
function = 2*sp.pi*sp.sqrt(L/g) #Period of pendulum (purely for test purposes)
variables = [L,g]

def uncertainty_calculator(function):
    partials = [diff(function,x) for x in variables] #Takes partial derivatives of variables
    partial_times_uncertainty = [(x*y)**2 for x,y in zip(uncertainty_in_var,partials)] #Squares the product of the uncertainty and its respective partial
    uncertainty = lambdify(variables, sp.sqrt(sum(partial_times_uncertainty)))
    number = uncertainty(value_of_var[0],value_of_var[1])
    return number

uncertainty = uncertainty_calculator(function)

print(uncertainty)

我很肯定这对于这个特定的函数很好,但是,我想把它概括得更多,我希望它包含一个值的列表,这些值的不确定性,以及一个函数,给我不确定性。问题是,如果我的变量已经有了一个值,那么这个函数就被求为一个数字,因此在计算偏导数时我得到了零,这是由symbols('L g', real=True)线固定的,它使函数保持未求值,直到它到达lamdify部分。有谁知道这是怎么做到的,拥有这样的功能对我的实验室确实有帮助,因为用手计算这个函数是件很痛苦的事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-22 20:27:41

如果函数不是一元函数,那么您必须始终指定函数,然后指定符号及其值。如果您是交互式地使用此方法,则可以通过将函数作为字符串传递给输入,并按照与变量排序顺序相对应的值来减少输入。然后,函数的返回可以是一个替换字典(因此您可以检查)和计算的不确定性。

代码语言:javascript
复制
>>> def ucalc(f, x, u):
...     f = S(f)
...     syms = list(ordered(f.free_symbols))
...     assert len(x) == len(u) == len(syms)
...     reps = dict(zip(syms, x))
...     ui = IndexedBase('u')
...     args = []
...     for i, xi in enumerate(syms):
...         reps[ui[xi]] = u[i]
...         args.append((ui[xi]*diff(f, xi))**2)
...     return reps, sqrt(Add(*args)).n(subs=reps)
...
>>> ucalc('2*pi*sqrt(L/g)',(9.8,5.4),(.1,.3))
({L: 9.8, g: 5.4, u[L]: 0.1, u[g]: 0.3}, 0.239055276534314)

请注意,IndexedBase符号用于为不确定性创建临时变量,因为这些变量不会出现在方程本身中。

票数 0
EN

Stack Overflow用户

发布于 2022-03-21 17:46:57

似乎您暗示symbols('L g', real=True)解决了这个问题,我不明白是什么问题。可能是因为我还没有使用过这个库,但是您能多指定一些问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71561834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档