标签: symbolic-math

程序可以用来简化代数表达式吗?

我们知道1+2+...+n等于n(n+1)/2.

但是如果我们事先不知道它,我们可以以编程方式获得相同的结果吗?

关于为什么我有这样的问题.

想想更复杂的情况:

X1 + X2 + ... + Xk = n,其中Xi是整数且> = 0.

什么是期望X1^2+...Xk^2

结果并不明显只是一目了然,一旦我们弄清楚期望的(详细的)数学表示,我们就会想要将它提供给程序来减少代数. X1^2+...Xk^2

algorithm math expression algebra symbolic-math

6
推荐指数
1
解决办法
3118
查看次数

C#库重载^运算符.如何使用**代替?

象征库重载算术运算符.虽然它是用C#编写的,但我可以在F#中使用它:

open Symbolism

let x = new Symbol("x")
let y = new Symbol("y")
let z = new Symbol("z")

printfn "%A" (2*x + 3 + 4*x + 5*y + z + 8*y)
Run Code Online (Sandbox Code Playgroud)

输出:

3 + 6 * x + 13 * y + z
Run Code Online (Sandbox Code Playgroud)

但是,它也会超负荷^.这当然不适合F#.

作为解决方法的一步,我导出了一个权限的方法组:

printfn "%A" (Aux.Pow(x, 2) * x)
Run Code Online (Sandbox Code Playgroud)

输出:

x ^ 3
Run Code Online (Sandbox Code Playgroud)

如何重载**以使用Aux.Pow方法组?

我可以这样做:

let ( ** ) (a: MathObject) (b: MathObject) = Aux.Pow(a, b)
Run Code Online (Sandbox Code Playgroud)

这对MathObject价值观有效:

> …
Run Code Online (Sandbox Code Playgroud)

f# symbolic-math computer-algebra-systems symbolic-computation

6
推荐指数
2
解决办法
440
查看次数

漂亮的MuPad:分配,表达和结果输出在一行 - 如何创建该功能?

我试图让Matlabs的MuPad像MathCad一样漂亮和方便.

假设两个变量赋值:

x_a:=2*unit::mm;
y_b:=5*unit::mm;
Run Code Online (Sandbox Code Playgroud)

我想要一个漂亮的(带有Tex的排版)输出

z = x_a + y_b = 7 mm
Run Code Online (Sandbox Code Playgroud)

我已经设法通过使用output::mathText(...):

output::mathText(hold(z)," = " , (z:=hold(x_a+y_b)) , " = " , z)
Run Code Online (Sandbox Code Playgroud)

看起来像所希望的:

在此输入图像描述

但这不是很方便,也不易读.所以我试图将它包装成宏或函数:

evalPrint(z,x_a+y_b)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?


我尝试了什么:

我写了一个程序如下:

evalPrint :=
proc(x,y) begin
  output::mathText(hold(x)," = " , (x:=hold(y)) , " = " , x)
end_proc:
Run Code Online (Sandbox Code Playgroud)

但我得到了

在此输入图像描述

我错过了什么?


关于霍希勒的答案:他的第一个解决方案确实不起作用,而第二个解决方案确实如此:

程序:

evalPrintVal := proc(x,y) option hold;
begin
    output::mathText(x, " = ", evalassign(x,y));
end_proc:
evalPrintEq := proc(x,y) option hold;
begin
    output::mathText(x, " = ", evalassign(x,y), " = …
Run Code Online (Sandbox Code Playgroud)

matlab symbolic-math computer-algebra-systems mupad

6
推荐指数
1
解决办法
337
查看次数

如何在sympy中简化sqrt表达式

sympyJupyter笔记本中使用v1.0 .我无法通过表达来简化我的喜好.这是一个玩具的例子; 它做同样的事情,我更复杂的表达做...

import sympy
sympy.init_printing(use_latex='mathjax')
x, y = sympy.symbols("x, y", real=True, positive=True)
sympy.simplify(sqrt(2*x/y))
Run Code Online (Sandbox Code Playgroud)

给我...

   来自同情的表达

但我更喜欢......

   在此输入图像描述

我怎样才能sympy以这种方式组织事物?我尝试了其他一些simplify功能,但它们都给了我相同的结果.还是我错过了别的什么?

python symbolic-math sympy

6
推荐指数
1
解决办法
1045
查看次数

在同情中隔离多元多项式的一个系数的最佳方法

我有一个多元多项式(在一般情况下有许多变量),其系数列出了我需要读取的一些数据,但看起来似乎没有一个很好的方法来做到这一点.

collect功能似乎是正确的想法,但是当你有几个变量使用它,它实际上并没有给你个人单项式,但单项的比较奇怪的分组依赖你列出的变量的顺序.

有谁知道这样做的方法?

python symbolic-math sympy

6
推荐指数
2
解决办法
973
查看次数

Python使用变量保存(稀疏)矩阵

我有一些大小合适的矩阵(2000*2000),我希望在矩阵的元素中有符号表达式 - 即元素的.9**b + .8**b + .7**b ...一个例子.矩阵非常稀疏.

我通过添加中间计算来创建这些矩阵.我想将它们存储到磁盘中以便稍后读取并使用不同的值进行评估b.

我已经玩过同情,它确实完成了我需要它做的事情,但是做简单的添加是令人头脑麻木的慢.从我所看到的,似乎theano或tensorflow可能能够用Tensors做到这一点,但我无法弄清楚如何在Tensor中放置一个符号.

任何人都可以指出我正确的方向,使用这个任务的最佳工具?我更喜欢它在python中,但是如果python以外的东西能做到这一点也很好.

python symbolic-math sympy

6
推荐指数
1
解决办法
121
查看次数

Sympy计算逆拉普拉斯变换

我在使用sympy计算符号表达式的逆拉普拉斯变换时遇到了一些麻烦.在matlab和书中我正在使用表达式s /(s ^ 2 + w ^ 2)转换为cos(wt).

当我尝试使用这样的情感时这样做:

expression = s/(s**2+w**2)
Answer = sympy.inverse_laplace_transform(expression, s, t)
Run Code Online (Sandbox Code Playgroud)

我明白了

Answer = (-I*exp(2*t*im(w))*sin(t*re(w)) + exp(2*t*im(w))*cos(t*re(w)) + I*sin(t*re(w)) + cos(t*re(w)))*exp(-t*im(w))*Heaviside(t)/2
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python symbolic-math sympy

6
推荐指数
1
解决办法
4491
查看次数

符号与数学数学 - 表现

与数值计算相比,符号数学计算(特别是对于求解非线性多项式系统)会导致巨大的性能(计算速度)劣势吗?有没有关于此的基准/数据?

发现了一个相关的问题:https://scicomp.stackexchange.com/questions/21754/symbolic-computation-vs-numerical-computation

另一个:正向模式自动与数字与符号分化的计算效率

algorithm performance symbolic-math numerical-computing numerical-methods

6
推荐指数
1
解决办法
565
查看次数

用符号表示符号特征值

我正在尝试计算M大小符号复杂矩阵的特征值3x3.在某些情况下,eigenvals()完美的工作.例如,以下代码:

import sympy as sp

kx = sp.symbols('kx')
x = 0.

M = sp.Matrix([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
M[0, 0] = 1. 
M[0, 1] = 2./3.
M[0, 2] = 2./3.
M[1, 0] = sp.exp(1j*kx) * 1./6. + x
M[1, 1] = sp.exp(1j*kx) * 2./3.
M[1, 2] = sp.exp(1j*kx) * -1./3.
M[2, 0] = sp.exp(-1j*kx) * 1./6.
M[2, 1] = sp.exp(-1j*kx) * -1./3.
M[2, 2] = sp.exp(-1j*kx) * 2./3.

dict_eig = …
Run Code Online (Sandbox Code Playgroud)

symbolic-math sympy eigenvalue python-2.7

6
推荐指数
1
解决办法
1568
查看次数

在解析的等式中从复数中获取REAL和IMAG

我正在评估Math.NET Symbolics,以便在我们的应用程序中使用,我们需要一个简单的数学解析器,供用户根据我们的测量数据计算自定义方程.我们的数据采用复数形式.

要测试我在LINQPad中使用以下代码片段:

var complexA = new Complex(1, 1);
var complexB = new Complex(1, 2);
var symbols = new Dictionary<string, FloatingPoint>()
    {
        { "a", complexA },
        { "b", complexB }
    };

Evaluate.Evaluate(symbols, Infix.ParseOrUndefined("1/(a*b)+cos(b)")).ComplexValue.Dump();
Run Code Online (Sandbox Code Playgroud)

这很好用,但是我找不到以下运算符:
我们如何获得符号的REAL或IMAGINARY部分?

我试过real(b)imag(b),但没有奏效.

作为一种解决方法,我也可以做以下事情,但我更喜欢像我这样的运营商abs(b):

var complexA = new Complex(1, 1);
var complexB = new Complex(1, 2);
var symbols = new Dictionary<string, FloatingPoint>()
    {
        { "a", complexA },
        { "b", complexB },
        { "b_REAL", complexB.Real },
        { "b_IMAG", …
Run Code Online (Sandbox Code Playgroud)

c# symbolic-math mathnet-numerics mathdotnet-symbolics math.net

6
推荐指数
0
解决办法
91
查看次数