标签: symbolic-math

如何在MATLAB中提取TRANSFER FUNCTION的符号系数

如何在符号数学MATLAB 中提取系数。

例如,我有这样的传递函数

H(S) = (a*S^2 + b*S^ + a*c*S + d*a) / (S^3 + b*c*S^2 + d*S^1 + a*d)
Run Code Online (Sandbox Code Playgroud)

我想在 H(s) 中获得“S”项的系数作为向量数组

num = [a b a*c d*a]
den = [1 b*c d a*d]
Run Code Online (Sandbox Code Playgroud)

matlab symbolic-math

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

在Matlab中使用Pochhammer符号

我试图在Matlab中使用一个评估Pochhammer符号(上升阶乘)的脚本,但是即使表达式是负的(Wolfram Alpha和Mathematica给出答案),它也无法评估pochhammer(x,n)何时x为负数.xPochhammer(-3,2)

任何人都可以帮助我pochhammer在Matlab中进行负面论证吗?

math matlab symbolic-math mupad

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

使用符号或数字方法加速Matlab积分计算?

我是两个月前的Matlab初学者.我将它用于夏季项目来处理MRI图像.最近,我为下面的集成编写了代码.但是,这两种方法都非常慢.运行它们花了一天时间.如何改进它们以缩短运行时间?

  1. 符号方法:

    syms t;
    T=t*ones(79,95,78);
    RF1=(1/2)*double(int(((T+x1).^(-1/2)).*((T+y1).^(-1/2)).*((T+z).^(-1/2)),t,0,inf));
    RD1=(3/2)*double(int(((T+x1).^(-1/2)).*((T+y1).^(-1/2)).*((T+z).^(-3/2)),t,0,inf));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 数字方法:

    fun1=@(T) ((T+x1).^(-1/2)).*((T+y1).^(-1/2)).*((T+z).^(-1/2));
    RF1=(1/2)*integral(fun1,0,inf,'ArrayValued',true);
    fun2=@(T) ((T+x1).^(-1/2)).*((T+y1).^(-1/2)).*((T+z).^(-3/2));
    RD1=(3/2)*integral(fun2,0,inf,'ArrayValued',true);
    
    Run Code Online (Sandbox Code Playgroud)

其中x1,y1,z79-通过-95-通过-78实矩阵.

performance matlab symbolic-math integral

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

如何获得关于时间的符号偏导数

假设我有这个功能

f(t) = 4*sin(a(t)) + x(t)*y(t) + h + cos(y(t))*sin(x(t))
Run Code Online (Sandbox Code Playgroud)

我如何根据时间计算其衍生物?

matlab symbolic-math derivative

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

使用SymPy将符号表达式转换为Python函数

我有一个相当大的符号函数,可以针对循环中参数的不同值进行评估。在每次迭代中,在找到函数的表达式之后,将导出偏导数。像这样:

from sympy import diff, symbols,exp

def lagrange_eqs(a):
    x,y,z= symbols('x y z')
    FUNC=x**2-2*x*y**2+z+a*exp(z)
    d_lgrng_1=diff(FUNC,x)
    d_lgrng_2=diff(FUNC,y)
    d_lgrng_3=diff(FUNC,z)
    return [d_lgrng_1,d_lgrng_2,d_lgrng_3]
Run Code Online (Sandbox Code Playgroud)

接下来,我需要将此函数的输出转换为Python函数,以便可以fsolve用来查找导数为零的x,y,z值。该函数必须以x,y,z作为列表。

现在这是我的问题:如何将上述函数的输出转换为可以传递给求解器的Python函数。这样的函数应如下所示(对于a = 3):

def lagrange_eqs_solve(X): 
    x,y,z=X
    return [2*x - 2*y**2, -4*x*y, 3*exp(z) + 1]
Run Code Online (Sandbox Code Playgroud)

我只是复制了第一个函数的输出以构建第二个函数。有什么办法可以编码吗?(Matlab为此提供了一个内置函数,称为matlabFunction)

symbolic-math solver sympy python-3.x

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

显示一个矩阵,在 sympy 中放置一个公因数

我想显示一个矩阵,在 sympy 中进行矩阵计算后将提取的公因子放在矩阵外部。

我写了下面的代码。

from sympy import *
a = symbols("a")
b = symbols("b")

A = Matrix([exp(I*a),exp(I*a)*exp(I*b)])
print simplify(A)
Run Code Online (Sandbox Code Playgroud)

我得到了低于输出。

Matrix([
[      exp(I*a)],
[exp(I*(a + b))]])
Run Code Online (Sandbox Code Playgroud)

但是,我想低于输出。

exp(I*a)*Matrix([
[      1],
[exp(I*b)]])
Run Code Online (Sandbox Code Playgroud)

我尝试了 collect(A,exp(I*a)) 并得到了跟随错误。

Traceback (most recent call last):

  File "<ipython-input-65-834f4c326df4>", line 1, in <module>
    runfile('C:/Anaconda2/Programs/test/untitled44.py', wdir='C:/Anaconda2/Programs/test')

  File "C:\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile
    execfile(filename, namespace)

  File "C:\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "C:/Anaconda2/Programs/test/untitled44.py", line 14, in <module>
    collect(A,exp(I*a))

  File "C:\Anaconda2\lib\site-packages\sympy\simplify\simplify.py", line 451, in collect
    if …
Run Code Online (Sandbox Code Playgroud)

python matrix symbolic-math sympy

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

如何使用 z3 BitVec 或 Int 作为数组索引?

我想使用 Int 向量作为数组索引。

Python。

array = [12,45,66,34]
s= Solver()
x = Int('x')
s.add(array[x] == 66)
Run Code Online (Sandbox Code Playgroud)

所以 x 应该是 2..

我该怎么做?

symbolic-math z3 z3py

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

MATLAB symengine 在逻辑语句上失败

我想让matlab同意以下简单的说法:

(x-a)^b>=0什么时候x>0, a>0, b<0, x>a

为了做到这一点,我写道:

syms x a b
assume(x>0 & a>0 & b<0 & x>a);
isAlways((x-a)^b>=0,'Unknown','error')
Run Code Online (Sandbox Code Playgroud)

并得到以下错误消息:

Error using symengine
Cannot prove '0 <= (x - a)^b'.

Error in sym/isAlways (line 38)
Y = mupadmex('symobj::isAlways',X.s,isMath,['"Unknown' p.Unknown '"'],9);
Run Code Online (Sandbox Code Playgroud)

为什么 MATLAB 不同意这样明显的说法呢?

matlab inequality symbolic-math logical-operators

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

SymPy:我可以安全地区分 atan2() 吗?

我想获得一个符号表达式,它是 的导数atan2(y,x),其中yx是一些带有变量的表达式z。我可以安全地假设这diff(atan2(y,x),z)给了我想要的东西吗?

math.stackexchange.com 中有一个证明atan2在 (-pi,pi)中是连续可微的,但它在 SymPy 中吗?

python symbolic-math sympy python-3.x

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

递归符号计算 - 提高性能

在我的研究中,我试图解决 Kolmogorov 后向方程,即对 $$Af = b(x)f'(x)+\sigma(x)f''(x)$$ 感兴趣

使用特定的 b(x) 和 \sigma(x),我试图看看在计算更高的 Af 功率时表达式的系数增长的速度有多快。我很难通过分析得出这一点,因此试图从经验上看到趋势。

首先,我使用过sympy

from sympy import *
import matplotlib.pyplot as plt
import re
import math
import numpy as np
import time
np.set_printoptions(suppress=True)

x = Symbol('x')
b = Function('b')(x)
g = Function('g')(x)

def new_coef(gamma, beta, coef_minus2, coef_minus1, coef):
    return expand(simplify(gamma*coef_minus2 + beta*coef_minus1 + 2*gamma*coef_minus1.diff(x)\
            +beta*coef.diff(x)+gamma*coef.diff(x,2)))
def new_coef_first(gamma, beta, coef):
    return expand(simplify(beta*coef.diff(x)+gamma*coef.diff(x,2)))
def new_coef_second(gamma, beta, coef_minus1, coef):
    return expand(simplify(beta*coef_minus1 + 2*gamma*coef_minus1.diff(x)\
            +beta*coef.diff(x)+gamma*coef.diff(x,2)))
def new_coef_last(gamma, beta, coef_minus2):
    return lambda x: …
Run Code Online (Sandbox Code Playgroud)

python symbolic-math sympy differential-equations autograd

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