标签: computer-algebra-systems

最大值的任意大小矩阵

我想用任意大小的矩阵进行一些计算.简单的例子 - 使用两个矩阵NxM和MxK,使用任意元素,并将产品元素视为总和.

但我无法找到一种方法来进行这种符号计算,而无需将矩阵大小指定为整数.

matrix()想要整数,makelist()想要整数.

有没有办法在maxima中做这样的事情?还是CAS?

matrix computer-algebra-systems maxima

5
推荐指数
1
解决办法
282
查看次数

如何在 Sympy 中找到函数的最大值?

这些天我正在尝试使用 Sympy 重做单自由度系统的冲击谱。这个问题可以减少寻找函数最大值的问题。以下是两种情况,我不知道该怎么做。

第一个是

tau,t,t_r,omega,p0=symbols('tau,t,t_r,omega,p0',positive=True)
h=expand(sin(omega*(t-tau)))
f=simplify(integrate(p0*tau/t_r*h,(tau,0,t_r))+integrate(p0*h,(tau,t_r,t)))
Run Code Online (Sandbox Code Playgroud)

f最终目标是获得(变量为)的最大绝对值t。直接的方法是

df=diff(f,t)
sln=solve(simplify(df),t)
simplify(f.subs(t,sln[1]))
Run Code Online (Sandbox Code Playgroud)

这是结果,我尝试了很多方法,但无法进一步简化。

结果

因此,我尝试了另一种方式。因为我需要最大绝对值和abs(f)最大值出现的位置与 的平方相同的位置f,所以我们可以先计算 的平方f

df=expand_trig(diff(expand(f)**2,t))
sln=solve(df,t)
simplify(f.subs(t,sln[2]))
Run Code Online (Sandbox Code Playgroud)

看来答案几乎是一样的,只是换了一种形式。

结果

预期的答案是一个sinc函数加一个常数,如下所示:

预期的

因此,问题是如何得到最终的呈现。

第二个可能有点难。这个问题可以简化为找到 的最大值f=sin(pi*t/t_r)-T/2/t_r*sin(2*pi/T*t),其中t_rT是两个参数。t_r当和的比值变化时,最大值位于不同的峰值处T。我在 Sympy 中没有找到解决它的方法。有什么建议吗?答案可以用下图来表示。

最大限度

max sympy computer-algebra-systems

5
推荐指数
1
解决办法
1万
查看次数

是否存在执行分层权限检查的算法?

我有一个代表层次结构的数据结构。

  • 文件夹
    • 文件夹
      • 文件夹
      • 文件
    • 文件
    • ETC。

权限存储在一个平面表中:

| pKey | type | bitperms |
Run Code Online (Sandbox Code Playgroud)

当执行搜索等全局操作时,我们需要在树中递归地检查权限。

检查与树结构的各个叶子内联的权限很容易。然而,考虑节点上的权限需要两种已知方法之一:

  • 获取过滤后的叶子后,对每个叶子进行后期处理以检查其父项权限
    • 费用被推迟到之后
    • 可能会发现很多最初的叶子,但处理完父母后,什么也没有留下,导致做无用的工作
  • 提前预先计算所有根(授予权限的节点),并在获取叶子时将其用作查询过滤器

    • 如果存在许多根,则可能会产生巨大的查询,从而导致处理每个叶子花费过多的时间

    是否存在任何算法可以更有效地做到这一点?也许重新组织权限数据或向层次结构添加更多信息?

    也许添加一些启发式方法来应对极端情况?

algorithm permissions computer-science computer-algebra-systems

5
推荐指数
1
解决办法
1288
查看次数

算法得到正弦波的幅度和相位?

我试图找出一种方法来算法获得在千里马计算机代数系统中具有正弦项的函数的幅度和相位.这仅适用于稳态(t - >无穷大和瞬态衰减).例如,一个简单的案例是:

f(t) = 1 / w * sin(w * t + theta) + exp(-a * t) + 8
Run Code Online (Sandbox Code Playgroud)

在这种情况下,增益为1/w,相位偏移为θ,我们将忽略瞬态项exp(-a*t),因为我们只关心稳态增益和相位延迟,以及exp( - a*t) - > 0为t - >无穷大.我们也会忽略"+ 8"项,因为它只是一个DC偏移.我在我的工程课程中被教导的方式需要大量的启发式和繁琐的方程式重新排列,以使它们以类似于上面的形式得到它们,其中答案很明显只是从它看起来.

有没有人知道一种通用的算法方法,假设它们存在,找到增益和相位延迟,因为我拥有计算机代数系统的全部功能(以及人们期望CAS拥有的标准功能)抛出它?虽然我可能会在Maxima中实现它,但我肯定会欣赏通过数学方面解释的通用答案.

编辑: 我认为从我的例子中可以清楚地看出,我想用符号来表达答案.w实际上应该是欧米茄,并代表输入的频率.我真正想问的是,是否有任何标准的数学运算可以产生增益和相位项而无需一堆启发式,手动方程式重新排列.

algorithm math computer-algebra-systems maxima

4
推荐指数
1
解决办法
2584
查看次数

在maxima中使用lisp代码

我想(make-array '(4 3 8))在maxima中使用,这基本上是生成multi-d矩阵,因为我无法找到API来创建包含的多d矩阵array(name,d1,d2...dm).

我可以使用它来执行它,:lisp (make-array '(4 3 8))但我不知道如何将它标记为类似的东西,

arr: :lisp(make-array '(4 3 8))

我还想知道是否可以在maxima函数中使用lisp代码.任何形式的帮助都应得到高度重视.

lisp common-lisp computer-algebra-systems maxima

4
推荐指数
1
解决办法
841
查看次数

Mathematica-like(LaTeX)排版用于自己的CAS应用程序

当我使用Mathematica时,我想到了一个小而免费的CAS,它只暴露了一小部分必要的函数和包,我希望以适当的方式向用户呈现结果,如Mathematica (忽略后台的Facebook徽标:D):

Mathematica的输出

我的第一个想法是在后台和pdflatex源代码中创建LaTeX代码,然后在视图中包含PDF ...但是这似乎有点太过分了!我想用C++或C#编写这个CAS,我想知道是否有任何推荐的解决方案来输出这样的好公式.

我的第一个想法是"实时公式编辑视图",但是输入框可以输入命令和公式,上部视图只是不可编辑的输出.

math latex wolfram-mathematica formula computer-algebra-systems

3
推荐指数
1
解决办法
1244
查看次数

如何在Sympy中做功能组合?

我想做类似的事情h = f(g(x))并且能够区分h,比如h.diff(x).对于这样的一个函数h = cos(x)实际上是可能的,并且文档清楚地说明了.

但对于功能组合,它并不是那么清楚.如果您已经这样做了,请告诉我一个示例或将我链接到相关文档.

(如果Sympy不能这样做,你知道其他任何包这样做,即使它是非python)

谢谢.

python sympy computer-algebra-systems

3
推荐指数
1
解决办法
1147
查看次数

maxima CAS - 如何用变量替换表达式?

在maxima中,有没有办法为子表达式应用变量替换?例如,替换x+ywith的实例z.

subst 适用于琐碎的案件,但不仅限于此.

(%i92) subst(x + y = foo, x + y);
(%o93) foo
(%i94) subst(x + y = foo, x + y + z);
(%o95) z + y + x
Run Code Online (Sandbox Code Playgroud)

symbolic-math computer-algebra-systems maxima

2
推荐指数
1
解决办法
2107
查看次数

符号计算的反思语言

我正在寻找一种以该语言编写的程序语言.这是一种语言,其程序是该语言的主要(可能是唯一的)对象.

像自编程转换语言这样的东西,仅仅考虑到这种观点.

动机如下:

有一个程序P1意味着计算Real - > Real我希望有一个程序P2,它将采用P1并将其转换为P1的符号衍生物(或反衍生物).显然,P2可能无法对大多数输入做正确的工作.

有人可能将其视为与lambdas匹配的模式.但是一个非常方便的模式匹配.

reflection programming-languages symbolic-math computer-algebra-systems

0
推荐指数
1
解决办法
97
查看次数