【问题标题】:loop over expression in MathematicaMathematica 中的循环表达式
【发布时间】:2021-11-16 07:52:30
【问题描述】:

我有一个包含 3 个变量的表达式。其中两个是数据集(p 和 k) 我想为每个 p 和 k 计算这个表达式,并有一个 sigma 列表。 我在 Mathematica 非常基础。我怎样才能在这个表达式上写一个循环,让数据集有一个 sigma 列表?

p = Import["C:\\Users\\Maryestein\\onlyp.csv", "Dataset"]
K = Import["C:\\Users\\Maryestein\\onlyk.csv", "Dataset"]

Sigma_i^2 = 
 9/(2*Pi^2)* [Sin[K_i*R] - K_i*R*Cos[K_i*R]]^2/(K_i*R)^6*p_i*
  K_i^2*(K_i - K_ (i - 1))

【问题讨论】:

  • [ and ] 仅用于 Mathematica 中的函数参数,不用于以与 ( and ) 不同的方式对表达式进行分组 Next _ 仅用于 Mathematica 中的模式匹配,而不用于使变量名称看起来不同。如果您可以包含读取两个 .csv 文件的非常小的简单示例的输出,这可能有助于确保答案更可能正确,甚至可能包括您希望这些非常简单的输入文件的输出。这样,某人可能会编写一行代码来满足您的需求。
  • 另一种可能达到你的意思的方式p={a,b,c,d,e,f,g};k={t,u,v,w,x,y,z};sigma=Table[ 9/(2*Pi^2)*(Sin[k[[i]]*r]-k[[i]]*r*Cos[k[[i]]*r])^2/(k[[i]]*r)^6*p[[i]]*k[[i]]^2*(k[[i]]-k[[i-1]]),{i,2,Length[p]}] 列表/数据集索引从 1 开始,而不是从零开始,我认为你是从 k 中的前一个项目中减去 k 中的当前项目,所以这从 p 和 k 中的第二个项目开始,以提供前一个项目来减去第一次。我用字母代替了您的数据,因此您可以查看结果以尝试查看它执行了哪些步骤。如果这仍然不正确,请告诉我

标签: loops for-loop wolfram-mathematica


【解决方案1】:

这里有两个玩具工作示例,具体取决于您到底想要什么。 它们应该很容易适应您的 精确的功能。 pi 和 Ki 是用于易读性的虚拟变量。

如果您想对所有可能的情况进行计算 p中的一些东西和K中的一些东西

p = {10, 20, 30};
K = {.1, .2, .3, .4};
Outer[Function[{pi, Ki}, Ki + pi ], p, K, 1]

输出

{{10.1, 10.2, 10.3, 10.4}, {20.1, 20.2, 
  20.3, 20.4}, {30.1, 30.2, 30.3, 30.4}}

如果您的两个列表长度相同并且旨在 并行使用(正如您使用通用索引所暗示的那样)

p = {10, 20, 30, 30};
K = {.1, .2, .3, .4};
MapThread[Function[{pi, Ki}, Ki + pi], {p, K}, 1]

输出

{10.1, 20.2, 30.3, 30.4}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多