如何在符号数学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中使用一个评估Pochhammer符号(上升阶乘)的脚本,但是即使表达式是负的(Wolfram Alpha和Mathematica给出答案),它也无法评估pochhammer(x,n)何时x为负数.xPochhammer(-3,2)
任何人都可以帮助我pochhammer在Matlab中进行负面论证吗?
我是两个月前的Matlab初学者.我将它用于夏季项目来处理MRI图像.最近,我为下面的集成编写了代码.但是,这两种方法都非常慢.运行它们花了一天时间.如何改进它们以缩短运行时间?
符号方法:
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)数字方法:
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实矩阵.
假设我有这个功能
f(t) = 4*sin(a(t)) + x(t)*y(t) + h + cos(y(t))*sin(x(t))
Run Code Online (Sandbox Code Playgroud)
我如何根据时间计算其衍生物?
我有一个相当大的符号函数,可以针对循环中参数的不同值进行评估。在每次迭代中,在找到函数的表达式之后,将导出偏导数。像这样:
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)
我想显示一个矩阵,在 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) 我想使用 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..
我该怎么做?
我想让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 不同意这样明显的说法呢?
我想获得一个符号表达式,它是 的导数atan2(y,x),其中y和x是一些带有变量的表达式z。我可以安全地假设这diff(atan2(y,x),z)给了我想要的东西吗?
在math.stackexchange.com 中有一个证明atan2在 (-pi,pi)中是连续可微的,但它在 SymPy 中吗?
在我的研究中,我试图解决 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) symbolic-math ×10
matlab ×5
sympy ×4
python ×3
python-3.x ×2
autograd ×1
derivative ×1
inequality ×1
integral ×1
math ×1
matrix ×1
mupad ×1
performance ×1
solver ×1
z3 ×1
z3py ×1