使用 sympy 展开索引符号方程

2023-12-11

下面我有一个使用索引符号编写的方程。这个方程可以用图中的六个方程来表示。

Equation using index notation

第一个方程使用索引符号(爱因斯坦符号:https://en.wikipedia.org/wiki/Einstein_notation)。 在 U_k,k 中,逗号是导数的约定。由于我们有重复的索引 (k,k),我们应用求和约定并得到 (du_1/dx_1 + du_2/dx_2 + du_3/dx_3)。图中,项 u_1、u_2 和 u_3 分别写为 u、v 和 w,它们通过 x_1、x_2 和 x_3(x、y 和 z)进行区分。

我是 python 和 Sympy 的新手,我看到有一个张量模块,但我看不到 Sympy 中是否已经实现了一些东西,我可以在其中编写第一个方程(带索引)并从中获得其他六个关系。


目前,没有直接的方法可以满足您的要求。

我将建议一个应该有效的技巧,通过使用索引库(即由其他符号索引的符号),然后进行替换。

声明你的符号:

U = IndexedBase("U")
l = symbols("lambda")
var("mu u v w x y z i j k")

声明你的表达式(没有爱因斯坦求和,所以明确地放置一个Sum):

sij = l*Sum(U[k, k], (k, 0, 2)) * KroneckerDelta(i, j) + mu*(U[i, j] + U[j, i])

定义替换函数:将匹配U[0, 0] to 导数(u, x)依此类推,根据索引:

def replace_U(uij):
    i1, i2 = uij.indices
    return Derivative([u, v, w][i1], [x, y, z][i2])

现在,跑遍所有i, j索引替换U[i, j]首先用整数值,然后替换表达式,如U[0, 0], ...

for ii in range(3):
    for ji in range(3):
        if ii < ji:
            continue
        pprint(sij.doit().xreplace({i: ii, j: ji}).replace(lambda v: v.base == U, replace_U))

记住:Sum.doit()展开求和。健康)状况ii >= ji用于避免打印相同的表达式两次(你的方程是对称的i, j).

注意U[i, j]上面的代码中只是一个符号,i and j除了作为索引之外没有特殊含义U。替换函数为它们分配导数。

我得到的输出是:

  ⎛d       d       d    ⎞       d    
λ⋅⎜──(u) + ──(v) + ──(w)⎟ + 2⋅μ⋅──(u)
  ⎝dx      dy      dz   ⎠       dx   
  ⎛d       d    ⎞
μ⋅⎜──(u) + ──(v)⎟
  ⎝dy      dx   ⎠
  ⎛d       d       d    ⎞       d    
λ⋅⎜──(u) + ──(v) + ──(w)⎟ + 2⋅μ⋅──(v)
  ⎝dx      dy      dz   ⎠       dy   
  ⎛d       d    ⎞
μ⋅⎜──(u) + ──(w)⎟
  ⎝dz      dx   ⎠
  ⎛d       d    ⎞
μ⋅⎜──(v) + ──(w)⎟
  ⎝dz      dy   ⎠
  ⎛d       d       d    ⎞       d    
λ⋅⎜──(u) + ──(v) + ──(w)⎟ + 2⋅μ⋅──(w)
  ⎝dx      dy      dz   ⎠       dz   

我是 python 和 Sympy 的新手,我看到有一个张量模块 但我看不到 Sympy 中是否已经实现了某些功能 我可以在其中写出第一个方程(带索引)并从中获得 其他六种关系。

sympy.张量.张量,它支持抽象索引符号(一种受限的爱因斯坦求和)。不幸的是,它不支持衍生品。

如果您想使用组件,最近添加了以下内容:sympy.张量.array。它提供多维数组、张量积和收缩以及数组的导数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sympy 展开索引符号方程 的相关文章

随机推荐

  • 边框 CSS HTML 中的文本

    我想要一个看起来像这样的 div 这可以用 HTML CSS 实现吗 我还将使用 jQuery 为这个 div 制作动画 当 div 隐藏时 我希望显示标题和顶行 是的 但这不是一个div 它是fieldset fieldset borde
  • Android Studio - 构建错误 - Android 任务已创建

    构建项目时出现如下错误 错误 2 0 Android 任务已创建 调用 android applicationVariants 时会发生这种情况 android libraryVariants 或 android testVariants
  • NSLocalizedString()的第二个参数是什么?

    是什么 comment参数在 NSString NSLocalizedString NSString key NSString comment 如果我这样做 NSLocalizedString Hello World Key Hello W
  • 如何防止 Spyne 包装我的回复?

    这是示例服务 NS my app namespace class MyMethodRS ComplexModel tns NS Version XmlAttribute Unicode class MyService ServiceBase
  • Django Haystack 和 Whoosh 搜索工作正常,但 SearchQuerySet 返回 0 个结果

    编辑 更多信息在帖子底部 原问题 我似乎遇到了与这个 未解决的 问题相同的问题 django haystack Whoosh SearchQuerySet all 始终无 我已经在我的 Django 项目上使用 Whoosh 设置了 Hay
  • 使用ffmpeg丢弃容器中的数据流

    我正在尝试使用 ffmpeg 删除 Mp4 容器内的数据 字幕 流 这是 ffprobe 的屏幕截图 Input 0 mov mp4 m4a 3gp 3g2 mj2 from test m4v Metadata major brand is
  • Ansible,如何在主机清单中定义列表?

    我有一个剧本 我想在我的主机文件中定义一个字符串列表 这是我的主机文件 dashboard 1 2 3 4 dashboard domain test site domain one two foo bar 这是我尝试使用以下方法编写的剧本
  • WCF 中的 Owin 中间件替代品是什么?

    我正在尝试在 WCF 应用程序中实现多租户 但面临一些问题 所以我已经在应用程序中配置了 Autofac 并且 Autofac 也支持多租户与WCF 现在我的情况略有不同 我有一个正在使用此 WCF 服务的移动应用程序 该服务部署在 Azu
  • Microsoft Office 365 组:来宾用户无法使用图形端点进行驱动器调用[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我们的应用程序通过对驱动器项执行 Get 调用来读取组驱动器内容 这对于内部成员和来宾用户来说过去都工作得很好 它现在适用于内部成员 但不再适用于来宾用户 以下是示例调用 h
  • 网页抓取协助

    我必须从这个网页中提取一些信息 我知道有更简单的方法来获取这些信息 但这就是我的任务 到目前为止 我一直在尝试这样做 import pandas as pd import requests from bs4 import Beautiful
  • 为什么这两个正则表达式的行为不一样?

    我正在尝试使用这样的构造函数语法创建正则表达式new RegExp bword b g 但它的行为并不符合预期 相反 它似乎创建了一个如下所示的正则表达式 bwor b g缺少最后一个字母 我必须使用构造函数语法来创建正则表达式 因为我是从
  • R data.table 如果另一列为 NA,则删除一列重复的行

    这是一个示例 data table dt lt data table col1 c A A B C C D col2 c NA dog cat jeep porsch NA col1 col2 1 A NA 2 A dog 3 B cat
  • Linq To Sql - SQL 默认约束问题

    我在数据库中有一个 USER 表 该表有一个 RegistrationDate 列 该列的默认约束为 GETDATE 使用 LINQ 时 我不为 RegistrationDate 列提供任何数据以将其设置为默认值 但 SQL Server
  • 并非所有代码路径都会返回值,for 循环

    这段代码将比较用户名 and 密码存储在文本文件中 我认为这是因为 for 循环 它可能很简单 但我看不到它 public int loginCheck string users File ReadLines Username Passwo
  • 如何将 Crashlytics 与 iMessage 扩展一起使用?

    我的 iOS 应用程序中有一个 iMessage 扩展 Crashlytics 能否捕获其崩溃情况 我尝试添加相同的Fabric来自我的主应用程序的条目Info plist进入我的 iMessage 扩展程序Info plist 并将以下内
  • Libsvm 中的决策值

    我是 SVM 新手 我使用 Libsvm for Matlab 在预测阶段之后我得到了一个决策值数组 根据 SVM 理论 每个测试记录 z 被指定为正 如果 f z 1 其中 f z 定义为 f z 符号 w z b 那么如何将实例 z 的
  • 在 JBoss 中替换 Websphere 的 WorkManager?

    我们正在从 Websphere 迁移到 JBoss 但某些代码依赖于 Websphere 的 WorkManager com ibm websphere asyncbeans WorkManager 有没有人以前处理过这个问题 并对如何替换
  • 具有两个 Y 轴的图:置信区间

    我试图用误差线和两个 y 轴绘制几个点 然而 在每次调用plotCI 或errbar 函数时 都会初始化一个新的绘图 无论是否有par new TRUE 调用 require plotrix x lt 1 10 y1 lt x rnorm
  • CustomControl DependencyProperty 绑定无法正常工作

    我写了一个自定义控件 它是一个带有按钮的文本框 可打开 OpenFileDialog TextBox 的 Text 属性绑定到我的依赖属性 FileName 如果用户通过 OpenFileDialog 选择文件 我会将结果设置为此属性 Te
  • 使用 sympy 展开索引符号方程

    下面我有一个使用索引符号编写的方程 这个方程可以用图中的六个方程来表示 第一个方程使用索引符号 爱因斯坦符号 https en wikipedia org wiki Einstein notation 在 U k k 中 逗号是导数的约定