gpt4 book ai didi

wolfram-mathematica - 如何在 Mathematica 中替换函数和完全简化?

转载 作者:行者123 更新时间:2023-12-01 01:41:18 25 4
gpt4 key购买 nike

我有以下功能 -((A N1 P (A B k (a N1 + aa P - r) + a aa (b B - bb) k R + 2 A B r R))/k) -- (1)
这个函数可以改写为:- A R P N1 d/k --- (2)
在哪里:

R is (k (aa B m - a mm + A B r))/(a aa (b B - bb) k + A B r)

P is (-a^2 b k mm - A B m r +
a k (aa bb m + A b B r))/(A (a aa (b B - bb) k + A B r))

N1 is (-aa^2 bb k m + A mm r +
aa k (a b mm - A bb r))/(A (a aa (b B - bb) k + A B r))

d is a aa (b B - bb) k + A B r

如何在 (1) 中进行这些替换以到达 Mathematica 中的 (2)?

编辑:我在“d”的编码中犯了一个小错误。我现在已经编辑了等式。

根据建议,我已经评估了 (1) 和 (2) 中的两个表达式,以确保其大小相等。
{a, A, aa, b, B, bb, k, m, mm, r} = RandomReal[{0, 20}, 10];
R = (k (aa B m - a mm + A B r))/(a aa (b B - bb) k + A B r);
P = (-a^2 b k mm - A B m r +
a k (aa bb m + A b B r))/(A (a aa (b B - bb) k + A B r));
N1 = (-aa^2 bb k m + A mm r +
aa k (a b mm - A bb r))/(A (a aa (b B - bb) k + A B r));
d = a aa (b B - bb) k + A B r;
{-((A N1 P (A B k (a N1 + aa P - r) + a aa (b B - bb) k R +
2 A B r R))/k), -A R P N1 d/k}
{-39976.5, -39976.5}

最佳答案

我不能保证以下工作流程会普遍成功,但在这里效果很好。它结合了三个想法:(1)多项式代数更接近一个好的结果; (2) 代入扩大变量; (3) 将变量(“术语”)的组合“折叠”为单个变量。

设置
首先建立输入: variables只是原子变量名称的列表; terms是要扩展的值列表 R , P , N1 , 和 d进入;和 x是原始多项式。

variables = {a, aa, b, bb, d, k, mm, r, A, B, R, P, N1};
terms = {(k (aa B m - a mm + A B r))/(a aa (b B - bb) k + A B r),
(-a^2 b k mm - A B m r + a k (aa bb m + A b B r))/(A (a aa (b B - bb) k + A B r)),
(-aa^2 bb k m + A mm r + aa k (a b mm - A bb r))/(A (a aa (b B - bb) k + A B r)),
a aa (b B - bb) k + A B r};
x = ((A N1 P (A B k (a N1 + aa P - r) + a aa (b B - bb) k R + 2 A B r R))/k);
从这个信息 我们可以为术语构建一个替换规则列表。 这些将执行替换步骤。
rules = (Rule @@ #) & /@ Transpose[{{R, P, N1, d}, terms}]
例如, Rules 的第四个组件是

d -> a aa (b B - bb) k + A B r


前三个分量是 R 的可比较表达式, P , 和 N1 , 分别。
分析 PolynomialReduce让我们第一次尝试表达 x作为 terms 的(有理)线性组合加上任何可能脱落的剩余部分。
{parts, remainder} = PolynomialReduce[x, terms, variables]

{{0, 0, 0, (A N1 P R)/k}, a A^2 B N1^2 P + A^2 aa B N1 P^2 - A^2 B N1 P r + (A^2 B N1 P r R)/k}


第一张, parts , 包含系数 {0, 0, 0, (A N1 P R)/k} :前三项的系数为零,最后一项的系数(最终将表示为 d )为 A N1 P R/k ,因此结果是 x已扩展为线性组合 0(R) + 0(P) + 0(N1) + (A N1 P R/k) d加上剩下的。
我们已经取得了进展,但现在是与其余部分合作的时候了。 为此,请应用替换规则: Simplify[remainder /. rules] .重新创建 x ,这个余数需要加到前面的线性组合中。让我们一次性完成:
parts . rules [[;; , 1]] + Simplify[remainder /. rules]

(A d N1 P R)/k


注意如何使用 rules 中的目标模式已隐式崩溃 a aa (b B - bb) k + A B r进入 d而规则本身将余数简化为 0。一般来说,余数不会那么简单——但至少它可能比你开始时更简单。

结束评论
我相信对这种代数表达式的一般操作以将一种形式扭曲成另一种在某种意义上“简单”的形式是一个 NP-hard 问题,所以 YMMV。我的经验是,你必须尝试简化复杂的表达式,并用你自己的代数技能以及你对简化可能采取的形式的感觉来增强它。

关于wolfram-mathematica - 如何在 Mathematica 中替换函数和完全简化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com