Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用同构法传递函数公式并求其值_Python_Sympy - Fatal编程技术网

Python 用同构法传递函数公式并求其值

Python 用同构法传递函数公式并求其值,python,sympy,Python,Sympy,我看到并试图对一个类似问题实施以下回答,但没有任何效果: 我还回顾了Symphy evalf的文档,大约在本文的一半: 我的代码: from sympy import sympify def test_function(a, b, c, d, funct): f = sympify(funct) dx = 0.2 J = int(2/dx) for i in range(J-1): x = -1 + (i * dx) pr

我看到并试图对一个类似问题实施以下回答,但没有任何效果:

我还回顾了Symphy evalf的文档,大约在本文的一半:

我的代码:

from sympy import sympify


def test_function(a, b, c, d, funct):

    f = sympify(funct)
    dx = 0.2
    J = int(2/dx)

    for i in range(J-1):
        x = -1 + (i * dx)
        print("f(", x, ") = ", f.evalf(x))

    print("Just for fun: ", a, b, c, d)

    return c + d


if __name__ == '__main__':

    print(test_function(1, 2, 3, 4, funct="pow(x, 4) - 2 * pow(x, 2) + 2"))

    print(test_function(1, 2, 3, 4, funct="x**4 - 2 * x**2 + 2"))
f( -1.0 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.8 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.6 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.3999999999999999 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.19999999999999996 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.0 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.20000000000000018 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.40000000000000013 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.6000000000000001 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 Just for fun: 1 2 3 4 7
f( -1.0 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.8 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.6 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.3999999999999999 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.19999999999999996 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.0 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.20000000000000018 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.40000000000000013 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.6000000000000001 ) = x**4 - 0.e+0*x**2 + 0.e+0 Just for fun: 1 2 3 4 7 结果为:

from sympy import sympify


def test_function(a, b, c, d, funct):

    f = sympify(funct)
    dx = 0.2
    J = int(2/dx)

    for i in range(J-1):
        x = -1 + (i * dx)
        print("f(", x, ") = ", f.evalf(x))

    print("Just for fun: ", a, b, c, d)

    return c + d


if __name__ == '__main__':

    print(test_function(1, 2, 3, 4, funct="pow(x, 4) - 2 * pow(x, 2) + 2"))

    print(test_function(1, 2, 3, 4, funct="x**4 - 2 * x**2 + 2"))
f( -1.0 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.8 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.6 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.3999999999999999 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( -0.19999999999999996 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.0 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.20000000000000018 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.40000000000000013 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 f( 0.6000000000000001 ) = -0.e+0*pow(x, 2) + pow(x, 4) + 0.e+0 Just for fun: 1 2 3 4 7
f( -1.0 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.8 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.6 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.3999999999999999 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( -0.19999999999999996 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.0 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.20000000000000018 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.40000000000000013 ) = x**4 - 0.e+0*x**2 + 0.e+0 f( 0.6000000000000001 ) = x**4 - 0.e+0*x**2 + 0.e+0 Just for fun: 1 2 3 4 7 f(-1.0)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(-0.8)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(-0.6)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(-0.3999999999)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(-0.1999999996)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(0.0)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(0.200000000000000018)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(0.40000000000000013)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 f(0.600000000000001)=-0.e+0*pow(x,2)+pow(x,4)+0.e+0 只是为了好玩:1234 7
f(-1.0)=x**4-0.e+0*x**2+0.e+0 f(-0.8)=x**4-0.e+0*x**2+0.e+0 f(-0.6)=x**4-0.e+0*x**2+0.e+0 f(-0.39999999999)=x**4-0.e+0*x**2+0.e+0 f(-0.1999999996)=x**4-0.e+0*x**2+0.e+0 f(0.0)=x**4-0.e+0*x**2+0.e+0 f(0.200000000018)=x**4-0.e+0*x**2+0.e+0 f(0.40000000000000013)=x**4-0.e+0*x**2+0.e+0 f(0.6000000000000001)=x**4-0.e+0*x**2+0.e+0 只是为了好玩:1234 7. 在阅读文档的基础上,我还尝试了
f.evalf(subs=x)
f.evalf(subs={x:x_i})
,其中我根据x_i重新定义了我的循环。在第一种情况下,我收到了关于“浮动不可下标”的投诉,在第二种情况下,我收到了关于“x未定义”的投诉


好的,到目前为止,这就是我所有的努力。如果有人好奇的话,我已经编写了求解三对角矩阵的Thomas算法,现在我正在创建一种方法,应用Thomas来求解PDE,初始条件由某个方程给出。我想把这个方程传递给我的算法,这样就可以动态地提供初始条件

当对字符串执行
sympify
时,子字符串“x”将被解释为符号,即
symbol(“x”)
。此对象与您可以调用x的任何Python变量无关。符号名和变量名是不同的

要用名为
x
的Python变量替换符号(“x”),需要

f.subs(Symbol('x'), x)
这个
subs
就足够了,因为您提供了一个浮点参数,所以浮点计算会自动进行。否则,
evalf
可能会被强制使用

f.evalf(subs={Symbol('x'): x})
顺便说一下,
f.evalf(x)
的意思是:计算f,返回x位小数;与替换无关

旁白 函数名:
x**4
Pow(x,4)
都可以工作,但是
Pow(x,4)
对SymPy没有意义

要查看变量名和符号名之间的差异,请尝试

b = Symbol("a") 
print(b)  # prints "a"
print(a)  # undefined

当对字符串执行
sympify
时,子字符串“x”将被解释为符号,即
symbol(“x”)
。此对象与您可以调用x的任何Python变量无关。符号名和变量名是不同的

要用名为
x
的Python变量替换符号(“x”),需要

f.subs(Symbol('x'), x)
这个
subs
就足够了,因为您提供了一个浮点参数,所以浮点计算会自动进行。否则,
evalf
可能会被强制使用

f.evalf(subs={Symbol('x'): x})
顺便说一下,
f.evalf(x)
的意思是:计算f,返回x位小数;与替换无关

旁白 函数名:
x**4
Pow(x,4)
都可以工作,但是
Pow(x,4)
对SymPy没有意义

要查看变量名和符号名之间的差异,请尝试

b = Symbol("a") 
print(b)  # prints "a"
print(a)  # undefined

sympify
ing之后,
f
是一个表达式。我们可以使用以下方法将
f
转换为sympy函数:


sympify
ing之后,
f
是一个表达式。我们可以使用以下方法将
f
转换为sympy函数: