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

Numeric solve transcendental equation in python or Matlab

我有一个欧拉-伯努利方程,我正在尝试求解其中:

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

欧拉-伯努利方程:

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

我真的不知道这是否是先验的,但我有 E、I、a、b 并且也知道我的积分极限(0 到 H)。我有 E、I、a、b 和 H 的编号。

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

如果你想象征性地解决它,你可以,例如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 个未知系数。

让我使用 Matlab 中的 Symbolic 工具箱添加一个解决方案:

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 命令中,从而形成一个方程组。