天道酬勤,学无止境

symbolic-math

Matlab: How to specify input in matlabFunction?

matlabFunction() is a function that can convert symbolic to anonymous function. But how to specify what input arguments to be appeared on the anonymous function? For example, x = sym('x', [3, 1]) func = matlabFunction(x) It returns a handle with: func = function_handle with value: @(x1,x2,x3)[x1;x2;x3] But how to make this to be returned:? @(x) [x(1); x(2); x(3)] that the whole x is the input arguments, not every element of it. This could be extremely useful when x has very long colums.

2021-09-23 23:36:13    分类:问答    matlab   anonymous-function   symbolic-math

格式短后,Matlab 不会缩短答案(Matlab wont shorten answer after format short)

问题 我试图让 matlab 将答案缩短为科学记数法,但它继续显示长数字。 这是我的matlab脚本: syms E; kb=8.617e-5; %eV/k h=4.136e-15; %eV*s Ts=5760; %k q=1; %ev c=3.0e8; %m/s theta_s=atan(7e8/1.5e11); %rad format short Il_per_area = (q*pi/2)*(1-cos(2*theta_s))*int(((2/h^3*c^2)*E^2)/(exp(E/(kb*Ts-1))),E) 这是matlab给我的结果: The_per_area = (52508430427297951419542428146127404493579145286547868195529063488882991519987*exp((2251799813685248*E)/1134143295600563)*((5070602400912917605986812821504*E^2)/1286281014955706024710845916969 - (4503599627370496*E)/1134143295600563 + 2))/2361183241434822606848 有人能帮我吗。 回答1 这就是 Matlab 处理符号表达式的方式。 您可以尝试替换 E

2021-09-23 18:07:04    分类:技术分享    matlab   number-formatting   symbolic-math

Matlab wont shorten answer after format short

I'm trying to get matlab to shorten the answer into scientific notation but it continues to display long numbers. Here is my matlab script: syms E; kb=8.617e-5; %eV/k h=4.136e-15; %eV*s Ts=5760; %k q=1; %ev c=3.0e8; %m/s theta_s=atan(7e8/1.5e11); %rad format short Il_per_area = (q*pi/2)*(1-cos(2*theta_s))*int(((2/h^3*c^2)*E^2)/(exp(E/(kb*Ts-1))),E) This is the result matlab gave me: Il_per_area = (52508430427297951419542428146127404493579145286547868195529063488882991519987*exp((2251799813685248*E)/1134143295600563)*((5070602400912917605986812821504*E^2)/1286281014955706024710845916969 -

2021-09-23 11:35:13    分类:问答    matlab   number-formatting   symbolic-math

在传递给 sum() 之前强制评估索引表达式(Force evaluate index expression before passing to sum())

问题 我想编写一个(以某种方式)增强的 sum 函数,它一次需要多个索引,但我无法理解如何让它工作。 这是我目前拥有的: (%i1) nsum(indexes, expr) := if indexes = [] then expr else nsum(rest(indexes), sum(expr, first(indexes),1, N)) $ (%i2) nsum([i,j], i+j), nouns; sum: index must be a symbol; found intosym(first(indexes)) #0: nsum(indexes=[k,j],expr=k+j) 我认为这可以通过在传递给sum函数之前强制 Maxima first(indexes)扩展first(indexes)为符号来解决。 我试过''(...)和ev(..., nouns) ,但没有任何成功。 回答1 经过一些阅读和尝试后,我得出了以下解决方案,该解决方案使用apply函数来预评估sum参数: nsum(indexes, expr) := if indexes = [] then expr else nsum(rest(indexes), apply(sum, ['expr, indexes[1], 1, N])) $ UPD1: 不幸的是,上面的代码有问题

2021-09-23 09:43:33    分类:技术分享    symbolic-math   quote   maxima   computer-algebra-systems

Julia 在循环中更改名称,使用符号变量(Julia changing name in loop, using symbolic variables)

问题 我想在循环的每次迭代中更改符号变量的名称,然后使用这些符号变量求解方程,例如: using SymPy for i in 1:5 p{i} = symbols("p"{i}, real=true,positive=true) solve(p{i}^2-i^2) end 因此,我希望创建一系列标量符号变量(因为我认为不可能创建向量值符号变量),每个变量都具有不同的名称 - p1、p2、p3、p4 和 p5 - 然后使用这些在方程求解器中。 然而,花括号符号似乎不适用于按照 matlab 在 julia 中命名。 快速谷歌没有建议任何明显的答案。 有任何想法吗? 回答1 在 julia 和大多数计算机语言中,如果您发现自己需要一堆数字变量 x1, x2, x3, ... ,您可能需要一个数组。 在 julia 中,这可能看起来像这样,(但请注意,我不知道我在用 SymPy 做什么) using SymPy pp=Sym[] for i in 1:5 p = symbols("x$i", real=true,positive=true) push!(pp,p) solve(pp[i]^2-i^2) end 在这里,我们从 pp 空开始,但类型正确; 我们将每个符号推到 pp 的末尾; 最后,我们可以用pp[i]找出 pp 的第 i 个项目,这几乎是您的代码,但没有 shift 键。

2021-09-21 17:53:14    分类:技术分享    julia   sympy   symbolic-math

用符号表达式替换函数的导数(substitute the derivative of a function in a symbolic expression)

问题 我和这里有同样的问题。 在 Matlab 中,函数的导数可以象征性地表示为 >> syms t >> syms x(t) >> diff(x,t) ans(t) = D(x)(t) 但是,如果我知道导数,我怎么能在表达式中替换。 >> subs(ans,D(x)(t),3) Error: ()-indexing must appear last in an index expression. 回答1 让我们看一个例子: syms t x(t) y f = x^2+y dfdt = diff(f,t) % returns 2*D(x)(t)*x(t) dxdt = diff(x,t) % returns D(x)(t) subs(dfdt,dxdt,3) 它返回6*x(t) 。 关键是D(x)(t)只是相对于时间的导数的打印表示,而不是实际值。 您需要将其分配给实际变量。 在您的示例中,您需要按照@rayeng 的建议进行操作,但是如果您为输出分配名称,则它会更加灵活和清晰。 x和dxdt都是dxdt的帮助和文档所称的“抽象”或“任意”符号函数,即没有定义的函数。 它们的行为与sym类型的常规符号变量略有不同。 在命令窗口中键入class(x)或whos以查看变量类型。 回答2 MATLAB 会解释您正在执行嵌套索引调用。 它认为您正在执行D(x) ,那么无论结果如何

2021-09-15 21:39:39    分类:技术分享    matlab   symbolic-math

如何在 Matlab 中简化符号和数字混合表达式(How to simplify a symbolic and numeric mixed expression in Matlab)

问题 我有一个符号和数字混合表达式: (3145495418313256125*sin(11334310783410932061962315977/17437937757178560512000000000)*cos(theta))/85568392920039424 其中theta是一个符号变量。 我想简化这个表达式,使所有的数字及其数学运算结果都变成双倍。 回答1 在数据类型方面,您不能混合浮点值和符号值。 但是,您可以使用可变精度算术,以便以十进制形式表示值。 使用 vpa: syms theta y1 = (3145495418313256125*sin(11334310783410932061962315977/17437937757178560512000000000)*cos(theta))/85568392920039424 y2 = vpa(y1) 返回 y2 = 22.24607614528243677915796931637*cos(theta) y2的数据类型( class )仍然是sym 。 请参阅digits 函数来调整有效位数。 如果要在实际浮点中工作,则需要将符号表达式转换为函数。 您可以使用名称混乱的 matlabFunction 自动执行该过程: thetafun = matlabFunction(y1) 它使用双精度变量返回一个函数:

2021-09-13 10:51:45    分类:技术分享    matlab   numeric   symbolic-math

Error while evaluating the function convolution

This is my first attempt to write anything in matlab, so please, be patient. I am trying to evaluate the solution of the following ODE: w'' + N(w, w') = f(t) with the Cauchy conditions w(0) = w'(0) = 0. Here N is a given nonlinear function, f is a given source. I also need the function where G is the solution of the following ODE: where G(0) = G'(0) =0, s is a constant, and My try is as follows: I define N, f, w and G: k = 1000; N = @(g1,g2) g1^2 + sin(g2); f = @(t) 0.5 * (1 + tanh(k * t)); t = linspace(0, 10, 100); w = nonlinearnonhom(N, f); G = nonlinearGreen(N); This part is ok. I can plot

2021-09-05 17:36:03    分类:问答    matlab   symbolic-math

fast evaluation of analytical jacobian in MATLAB

I have formulated a optimization problem that requires a very fast evaluation of the Jacobian matrix. I calculated the Jacobian analytically from my constraints using MATLAB's symbolic toolbox. I need an analytical Jacobian so that it is accurate (and I was thinking it would be fast, but that is not the case with my current implementation). This part of the code is calculated once and the result J, is saved and then loaded in the next part % symbolic variables dvs = 5; X=sym('X',[dvs,1]); % multiple functions for k = 1:4 f1(X(k+1),X(k)) = (X(k+1) - X(k)); c(k) = f1; end J = jacobian(c,X); x =

2021-09-05 11:23:45    分类:问答    matlab   symbolic-math

SymPy: Can I safely differentiate atan2()?

I would like to obtain a symbolic expression which is the derivative of atan2(y,x), where y and x are some expressions with a variable z. Can I safely assume that diff(atan2(y,x),z) gives me what I want? In math.stackexchange.com there is a proof that atan2 is continuously differentialable in (-pi,pi), but is it in SymPy?

2021-09-05 06:01:34    分类:问答    python   python-3.x   sympy   symbolic-math