使用对角线覆盖构建 Scipy 矩阵

2023-12-29

我想在偏移位置覆盖几个相同 4x4 大小的数组,创建一个大数组,其中重叠的元素添加在一起。

[a] 0 0 0
 0 [a+b] 0 0
 0 0 [b+c] 0
 0 0 0 [c+...

这是为了创建用于连续梁分析的刚度矩阵。使用循环创建这很容易,但是使用 Scipy 稀疏矩阵例程是否有更好的方法? block_diag 很接近,但没有提供覆盖的方法。

Members = [[100.0, 1000.0],[100.0, 2000.0],[200.0, 2000.0]]

SSM = np.zeros((2*M+2,2*M+2), dtype = float)
i=0
for mem in Members:
    a = SMX(mem)
    print a
    print "*"*40

    SSM[i:i+4,i:i+4] = SSM[i:i+4,i:i+4] + a
    print SSM
    i +=2

def SMX(member):
    """ Prismatic beam member stiffness function
    Purpose: Create a member stiffness matrix for a given set of member parameters.
    Input:  Modulus of elasticity - E
            Moment of inertia with respect to the z axis - Iz
            Length of the span - L

    Returns: 4 x 4 matrix representing the member stiffness with respect to end conditions    
"""

    L = member[0]
    Iz = member[1]

    pbms = np.zeros((4,4), dtype = float)

    pbms[0,0] = (12.0 * E * Iz)/L**2
    pbms[0,1] = (6.0 * E * Iz)/L**2
    pbms[0,2] = -pbms[0,0]
    pbms[0,3] = pbms[0,1]

    pbms[1,0] = pbms[0,1]
    pbms[1,1] = (4.0 * E * Iz)/L
    pbms[1,2] = -pbms[0,1]
    pbms[1,3] = (2.0 * E * Iz)/L

    pbms[2,0] = pbms[0,2]
    pbms[2,1] = -pbms[0,1]
    pbms[2,2] = pbms[0,0]
    pbms[2,3] = -pbms[0,1]

    pbms[3,0] = pbms[0,1]
    pbms[3,1] = pbms[1,3]
    pbms[3,2] = -pbms[0,1]
    pbms[3,3] = pbms[1,1]

    return pbms

结果输出:

[[  12000.    6000.  -12000.    6000.]
 [   6000.  400000.   -6000.  200000.]
 [ -12000.   -6000.   12000.   -6000.]
 [   6000.  200000.   -6000.  400000.]]
****************************************
[[  12000.    6000.  -12000.    6000.       0.       0.       0.       0.]
 [   6000.  400000.   -6000.  200000.       0.       0.       0.       0.]
 [ -12000.   -6000.   12000.   -6000.       0.       0.       0.       0.]
 [   6000.  200000.   -6000.  400000.       0.       0.       0.       0.]
 [      0.       0.       0.       0.       0.       0.       0.       0.]
 [      0.       0.       0.       0.       0.       0.       0.       0.]
 [      0.       0.       0.       0.       0.       0.       0.       0.]
 [      0.       0.       0.       0.       0.       0.       0.       0.]]
[[  24000.   12000.  -24000.   12000.]
 [  12000.  800000.  -12000.  400000.]
 [ -24000.  -12000.   24000.  -12000.]
 [  12000.  400000.  -12000.  800000.]]
****************************************
[[   12000.     6000.   -12000.     6000.        0.        0.        0.
         0.]
 [    6000.   400000.    -6000.   200000.        0.        0.        0.
         0.]
 [  -12000.    -6000.    36000.     6000.   -24000.    12000.        0.
         0.]
 [    6000.   200000.     6000.  1200000.   -12000.   400000.        0.
         0.]
 [       0.        0.   -24000.   -12000.    24000.   -12000.        0.
         0.]
 [       0.        0.    12000.   400000.   -12000.   800000.        0.
         0.]
 [       0.        0.        0.        0.        0.        0.        0.
         0.]
 [       0.        0.        0.        0.        0.        0.        0.
         0.]]
[[   6000.    3000.   -6000.    3000.]
 [   3000.  400000.   -3000.  200000.]
 [  -6000.   -3000.    6000.   -3000.]
 [   3000.  200000.   -3000.  400000.]]
****************************************
[[   12000.     6000.   -12000.     6000.        0.        0.        0.
         0.]
 [    6000.   400000.    -6000.   200000.        0.        0.        0.
         0.]
 [  -12000.    -6000.    36000.     6000.   -24000.    12000.        0.
         0.]
 [    6000.   200000.     6000.  1200000.   -12000.   400000.        0.
         0.]
 [       0.        0.   -24000.   -12000.    30000.    -9000.    -6000.
      3000.]
 [       0.        0.    12000.   400000.    -9000.  1200000.    -3000.
    200000.]
 [       0.        0.        0.        0.    -6000.    -3000.     6000.
     -3000.]
 [       0.        0.        0.        0.     3000.   200000.    -3000.
    400000.]]

刚刚注意到我遗漏了上面的 M = 3 。


我没有看到问题scipy.sparse.block_diag http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.block_diag.html,但我可能不太明白你所说的“覆盖”是什么意思。例如,您在问题中说明的输出可以这样形成:

In [41]: from scipy import sparse

In [42]: a = np.array([[1, 2], [3, 4]])

In [43]: b = np.array([[5, 6], [7, 8]])

In [44]: c = np.array([[9, 10], [11, 12]])

In [45]: m = sparse.block_diag([a, a+b, b+c])

In [46]: m.A
Out[46]: 
array([[ 1,  2,  0,  0,  0,  0],
       [ 3,  4,  0,  0,  0,  0],
       [ 0,  0,  6,  8,  0,  0],
       [ 0,  0, 10, 12,  0,  0],
       [ 0,  0,  0,  0, 14, 16],
       [ 0,  0,  0,  0, 18, 20]])

Edit:浏览了一些有关光束分析的材料后,我想我更好地理解了您想要如何覆盖矩阵。

例如,假设有四个 2x2 数组 a、b、c 和 d。 “覆盖”的示例如下:

a[0,0]     a[0,1]            0              0            0
a[1,0]  a[1,1]+b[0,0]     b[0,1]            0            0
  0        b[1,0]      b[1,1]+c[0,0]     c[0,1]          0
  0           0           c[1,0]      c[1,1]+d[0,0]  d[0,1]
  0           0              0           d[1,0]      d[1,1]

形成这个的一种方法是block_diag在这里进行了演示。它涉及一个表达式,每个 2x2 数组都有一个术语,可以将其重写为循环,因此它并不能真正回答您的问题。

In [92]: a,b,c,d
Out[92]: 
(array([[1, 2],
       [3, 4]]),
 array([[5, 6],
       [7, 8]]),
 array([[ 9, 10],
       [11, 12]]),
 array([[13, 14],
       [15, 16]]))

In [93]: bd = sparse.block_diag  # A convenient alias

In [94]: m = bd([a,0,0,0])+bd([0,b,0,0])+bd([0,0,c,0])+bd([0,0,0,d])

In [95]: m.A
Out[95]: 
array([[ 1,  2,  0,  0,  0],
       [ 3,  9,  6,  0,  0],
       [ 0,  7, 17, 10,  0],
       [ 0,  0, 11, 25, 14],
       [ 0,  0,  0, 15, 16]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用对角线覆盖构建 Scipy 矩阵 的相关文章

随机推荐

  • OpenCV 在函数内更改 Mat(Mat 范围)

    我将 Mat 传递给另一个函数并在被调用函数内更改它 我原以为作为一个更复杂的类型 它会自动通过引用传递 以便矩阵在调用函数中发生变化 但事实并非如此 有人可以向我指出如何从函数正确返回更改后的 Mat 的解释吗 这是代码片段 void c
  • 已弃用的 CLRegion 方法 - 如何获取半径?

    我正在使用geocodeAddressString completionHandler 方法 它返回 CLPlacemarks 数组 我必须获取纬度 经度 助记名和半径 虽然获得前 3 个很容易 double lat placemark l
  • OpenFire Server 中用户的 JID 应该是什么?

    您好 我对此很陌生 我已经设置了一个 Openfire 服务器并使用 Spark IM 来测试它 但对于 Android 应用程序代码 会话中用户的 JID 应该是 我尝试过 username ip address username ip
  • 在 Windows Phone 7 上将数据保存到独立存储的最佳方式是什么?

    我想将对象持久化到独立存储中 到目前为止我可以想到这些方法 保存时将它们序列化为 xml 文件 然后在保存时将它们序列化回来 使用对象数据库 对好的或推荐的怀疑比比皆是 例子是Perst http wmpoweruser com fully
  • 如何验证 okhttp 是否使用 http/2 进行请求?

    如何验证 okhttp 是否成功协商 http 2 并且没有使用 https 1 1 我可以检查回复中的一些信息吗 谢谢 托尼 仅供参考 从 okhttp 3 0 左右开始OkHttp Selected Protocol未打印 不过 可以在
  • 从服务 android 更新我的活动中的列表视图

    我有两节课 1 活动课 2 服务等级 当服务有任何更新时 我需要更新活动中的列表视图 实际上我尝试像聊天应用程序一样 我的服务总是检查我的数据库 如果它有任何新字符串 我需要在我的活动中更新而无需再次重建 只需刷新列表视图 我发现它将使用
  • 悬停时的原型 Element.toggle,禁用子元素

    我遇到以下情况 我有一个这样的表结构 tr td text td td text td td text td td a href img src a td td span style display hidden a href e a a
  • VRML 发生了什么?

    早在 20 世纪 90 年代末 当我在读研究生时 VRML 即将占领世界 我和我的同事通过将其连接到 Java 和 Javascript 代码 用它构建了各种有用且有趣的东西 当然 当时的计算机比现在慢很多倍 多核 CPU 很大程度上是科幻
  • 使用 CreateProcessWithLogonW 进行作业控制

    我正在编写的应用程序需要在主机系统上执行潜在的恶意代码 该代码仅与stdin stdout and stderr 并且不应尝试与文件系统或网络交互 我通过防火墙规则限制了网络访问 并通过以非特权用户身份运行该进程来限制文件系统访问NetUs
  • 子类中的 __slots__ 继承实际上是如何工作的?

    In the 关于槽的 Python 数据模型参考部分 http docs python org reference datamodel html slots有一个关于使用的注释列表 slots 我对第 1 条和第 6 条感到非常困惑 因为
  • VSS 到 Clearcase 的过渡,附加注释

    有没有办法执行 Clearcase 签入 其中签入注释直接附加到源文件中 这就像 VSS 所做的那样 请不要争论这是好事还是坏事 我在这里对这些事情的影响力为零 我需要将签入数据包括日期 用户和注释 通过 Clearcase 附加到文件末尾
  • 在 Window Phone 8.1 中从服务器收到原始推送通知后执行某些功能

    即使应用程序未运行 我也想在收到推送通知时执行我自己的函数 并且用户不需要单击操作栏中的通知 In the BackgroundTask cs我有以下代码片段 namespace BackgroundTasks public sealed
  • 地理位置成功回调 - 如何在此回调之外处理返回的对象?

    网络上大多数简单的 html5 地理定位示例都是这样的 if navigator geolocation navigator geolocation getCurrentPosition success error else no geol
  • iOS - watchOS 应用程序发布问题 CFBundleIdentifier 冲突

    应用程序上传后 我收到以下电子邮件 我们发现您的应用程序最近交付存在一个或多个问题 XXX 请更正以下问题 然后重新上传 ITMS 90806 CFBundleIdentifier 冲突 每个捆绑包必须有一个 唯一的包标识符 包标识符 捆绑
  • 如果容器隐藏,jQuery.validate 无效

    我有几个输入分成不同的容器 面板 我遇到的问题是 如果这些面板之一被隐藏 style display none jQuery validate 插件不会验证这些输入 我用一个小例子进行了测试 出现了同样的问题 view using Html
  • K&R 中的位计数功能 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 K R的 C程序设计语言 一书中 有一个位计数函数 int bitsCount unsigned x int b for b 0 x 0 x g
  • SQLite计算相同值不同结果

    我的表包含这个值 productName purchasePrice tax price Product 1 5099 16 10099 Product 1 5099 16 10099 Product 1 5099 16 10099 Pro
  • 来自 WSDL 的 SOAP Web 服务端点

    我是 SOAP Web 服务的新手 因此参考了使用 Spring 创建 SOAP Web 服务的教程之一 我已经从 xsd 创建了 wsdl 如下所示
  • 如何从 PDF 中提取文本并解码字符?

    我正在使用 itextsharp 使用以下代码从 pdf 文档中提取文本 public static bool does document text have keyword string keyword string pdf src Re
  • 使用对角线覆盖构建 Scipy 矩阵

    我想在偏移位置覆盖几个相同 4x4 大小的数组 创建一个大数组 其中重叠的元素添加在一起 a 0 0 0 0 a b 0 0 0 0 b c 0 0 0 0 c 这是为了创建用于连续梁分析的刚度矩阵 使用循环创建这很容易 但是使用 Scip