数值解决python或Matlab中的超越方程

时间:2015-01-14 18:40:25

标签: python matlab numeric

我有一个Euler-Bernoulli方程我试图解决其中:

q(x) = a*x + b + w(x)

Euler-Bernoulli方程:

E * I * diff(w(x), x, x, x, x) = q(x) 

我真的不知道这是否是Transcendental,但我有E,I,a,b并且也知道我的积分限制(0到H)。我有E,I,a,b和H的数字。

如何从0到H获得w(x),x变化x的点?

2 个答案:

答案 0 :(得分:3)

如果你想象征性地解决它,你可以用例如sympy

from __future__ import division
from sympy import *
x = symbols('x')
w = symbols('w', cls=Function)
a,b,E,J =  symbols('a b E J')
equ = E*J*diff(w(x),x,4) - a*x -b - w(x)
dsolve(equ, w(x))
# This generates a function that is too generic and too big to copy-paste
# Let's make some assumptions
J = Symbol('J', real=True, positive=True)
E = Symbol('E', real=True, positive=True)
equ = E*J*diff(w(x),x,4) - a*x -b - w(x)
dsolve(equ, w(x))

导致:

               -x                 x                                                           
           ───────────       ───────────                                                      
           4 ___ 4 ___       4 ___ 4 ___                                                      
           ╲╱ E ⋅╲╱ J        ╲╱ E ⋅╲╱ J          ⎛     x     ⎞         ⎛     x     ⎞          
w(x) = C₁⋅ℯ            + C₂⋅ℯ            + C₃⋅sin⎜───────────⎟ + C₄⋅cos⎜───────────⎟ - a⋅x - b
                                                 ⎜4 ___ 4 ___⎟         ⎜4 ___ 4 ___⎟          
                                                 ⎝╲╱ E ⋅╲╱ J ⎠         ⎝╲╱ E ⋅╲╱ J ⎠          

鉴于有关边界条件的额外信息,您甚至可以进一步简化。在任何情况下你都需要它们,因为你仍然有4个未知系数。

答案 1 :(得分:0)

让我使用Matlab中的符号工具箱添加解决方案:

syms q x w(x) a b E I
q = a*x+b+w(x);
sol = dsolve(E*I*diff(diff(diff(diff(w)))) == q)
sol_part = subs(sol,[E I],[2e5 100]) % etc.

您可以将边界条件作为单独的方程式添加到dsolve命令中,从而形成方程组。