【问题标题】:Integration of expression with a function of two variables表达式与两个变量的函数的集成
【发布时间】:2018-01-29 23:00:31
【问题描述】:

我在下面有这段代码,它打印一个矩阵。矩阵的每一列代表一个光束,每一行代表一个特定点的光束高度。 (见图像)。

import numpy as np
import sympy

Fh = 3
E1 = 20 #(N/mm²)
t = 1
L = 5
h_base = 2
h_min = 0
hx = [] 

for x in range(0, L):
    for height_in_x in range(h_min, h_base + 1):
        h = h_base - ((h_base - height_in_x) / L * x)
        hx.append(h)

H_x = np.array(hx, dtype=np.float)
matrix_H_x = np.reshape(H_x, (L, h_base - h_min + 1))        
print (matrix_H_x)

"""
[[ 2.   2.   2. ]
 [ 1.6  1.8  2. ]
 [ 1.2  1.6  2. ]
 [ 0.8  1.4  2. ]
 [ 0.4  1.2  2. ]]

问题:现在我需要使用这个值进行积分:表达式是:

result = -1/E1 + sympy.integrate((-Fh * L + Fh * **x**) / (t * **H_x** / 12)) 

但我应该保持 3 个结果独立,对于每一列(梁)见图片

地点:

x 是一个整数,在这种情况下从 0 到 L

Hx 是每个 x 距离内的光束高度。

我不知道获取高度的 for 循环是否是一个好的解决方案,也许我可以只使用 SymPy 函数来完成所有事情。

【问题讨论】:

    标签: python function matrix sympy integral


    【解决方案1】:

    这里没有 SymPy 可做的事情,因为您没有要集成的符号函数。这些函数以采样数据的形式呈现。采样数据的集成可以通过 NumPy 或 SciPy 使用诸如trapz(用于梯形规则)等方法完成。在你的例子中,

    -1/E1 + np.trapz(-Fh*L + Fh*np.arange(0, L) / (t*matrix_H_x.T/12), axis=1)
    

    返回array([337.45, 142.09285714, 83.95]),它们是矩阵中三列的积分。

    解释:np.arange(0, L) 是 x 值(0 到 4)的数组。 matrix_H_x.T 是转置矩阵,需要此转置以将其轴与 L 元素与 x 值数组对齐。 NumPy 广播负责计算 -Fh*L + Fh*np.arange(0, L) / (t*matrix_H_x.T/12) 的值(最终是一个 3 x 5 矩阵)。最后,沿列维度 (axis=1) 应用的trapz 对三行中的每一行进行积分,为每一行返回一个数字。

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多