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
命令中,从而形成一个方程组。
我有一个欧拉-伯努利方程,我正在尝试求解其中:
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
命令中,从而形成一个方程组。