在符号表达式中使用变量-matlab
如何在Matlab中使用符号变量中的变量 例如,我有以下代码:在符号表达式中使用变量-matlab,matlab,symbolic-math,Matlab,Symbolic Math,如何在Matlab中使用符号变量中的变量 例如,我有以下代码: function f = constr_fourier(vec); dim=prod(size(vec)); n=(dim-1)/2; a=@(k) vec(k+1); b=@(k) vec(n+k-1); f = @(x) subs(a,{k,0})/2 + symsum(subs(a,{k,i})*cos(i*x) + ... subs(b,{k,i})*sin(i*x),i,1,n); 其中,我想恢复给定系数向量的傅里叶级
function f = constr_fourier(vec);
dim=prod(size(vec));
n=(dim-1)/2;
a=@(k) vec(k+1);
b=@(k) vec(n+k-1);
f = @(x) subs(a,{k,0})/2 + symsum(subs(a,{k,i})*cos(i*x) + ...
subs(b,{k,i})*sin(i*x),i,1,n);
其中,我想恢复给定系数向量的傅里叶级数vec
。我想将vec中的实际值替换为函数的符号表达式。我用subs
试过,但没用,或者我没用对
正确的方法是什么
[编辑]我试过了
f = @(x) subs(a,k,0)/2 + symsum(subs(a,k,i)*cos(i*x) + ...
subs(b,{k,i})*sin(i*x),i,1,n);
但是结果是使用subs(…)
,而不是使用a(k)
的数值
我也尝试了一个不同的变体,它给出了一个结果,但以错误的方式
function f = constr_fourier(w);
syms x k n u c t vector;
evalin(symengine,'assume(k,Type::Integer)');
dim=prod(size(w));
m=(dim-1)/2;
a0=w(1);
a= w(2:m+1);
b= w(m+2:2*m+1);
u=@(k,vector) vector(k);
fs = @(x,n,c) c/2 + symsum(subs(u,{k,vector},{t,a})*cos(t*x) + subs(u,{k,vector}, {t,b})*sin(t*x),t,1,n);
f= fs(x,m,a0);
我尝试使用函数u=@(k,vec)vec(k)
而不是最初的函数。当我在终端中分别使用subs(u,{k,vector},{t,a})
时,它工作正常,但在这里它不
我得到的结果是两个函数的向量,而不是一个函数。确实是正确的方法,你只是用错了
subs
有三个输入参数:符号表达式、要替换的参数及其新值。但是有一个例外:如果有两个输入参数,subs
将表达式中的默认符号参数替换为第二个参数
无论如何,您似乎缺少了subs
中的新值,因此它的行为与您的意图不符。我想应该是这样的:
subs(a, k, 0)
等等
作为旁注,只使用subs
一次就足够了(而且更优雅)。计算整个符号表达式,然后使用subs
一次。因此,不是:
subs(a, ...) + subs(b, ...)
我建议您改为这样做:
subs(a + b, ...)
这确实是正确的方法,你只是用错了
subs
有三个输入参数:符号表达式、要替换的参数及其新值。但是有一个例外:如果有两个输入参数,subs
将表达式中的默认符号参数替换为第二个参数
无论如何,您似乎缺少了subs
中的新值,因此它的行为与您的意图不符。我想应该是这样的:
subs(a, k, 0)
等等
作为旁注,只使用subs
一次就足够了(而且更优雅)。计算整个符号表达式,然后使用subs
一次。因此,不是:
subs(a, ...) + subs(b, ...)
我建议您改为这样做:
subs(a + b, ...)
如果你定义
a=@(k) vec(k+1);
然后a
不是一个符号表达式,而是一个函数,要在其中获得k
的特定值,不能使用subs
。相反,您必须调用函数a
:
a(1)
f = @(x) a(0)/2 + sum(@(i) a(i)*cos(i*x) + b(i)*sin(i*x),1,n)
如果你定义
a=@(k) vec(k+1);
然后a
不是一个符号表达式,而是一个函数,要在其中获得k
的特定值,不能使用subs
。相反,您必须调用函数a
:
a(1)
f = @(x) a(0)/2 + sum(@(i) a(i)*cos(i*x) + b(i)*sin(i*x),1,n)
这仍然不起作用。结果以符号形式给出,其中仍有
subs
。变量并没有被它们的数值所取代…@BeniBogosel如果你在你的问题中发布你已经尝试过的东西会有所帮助,这样我就可以看到错误的地方。我放弃了这种方法。。。潜艇一直在做一个2x1的矢量结果,我不明白。单独运行时一切正常,但symsum不起作用。我做了一个sin(kx)的向量,一个cos(kx)的向量,并用两个标量积求解它。谢谢你的帮助。:)@BeniBogosel您的问题是symsum
还返回一个符号表达式。您应该先计算a+b+symsum(…)
,然后只使用subs
一次。无论如何,我也不喜欢符号数学——它肯定不是求解方程的最有效方法,所以没问题。这仍然不起作用。结果以符号形式给出,其中仍有subs
。变量并没有被它们的数值所取代…@BeniBogosel如果你在你的问题中发布你已经尝试过的东西会有所帮助,这样我就可以看到错误的地方。我放弃了这种方法。。。潜艇一直在做一个2x1的矢量结果,我不明白。单独运行时一切正常,但symsum不起作用。我做了一个sin(kx)的向量,一个cos(kx)的向量,并用两个标量积求解它。谢谢你的帮助。:)@BeniBogosel您的问题是symsum
还返回一个符号表达式。您应该先计算a+b+symsum(…)
,然后只使用subs
一次。无论如何,我也不喜欢符号数学——它肯定不是求解方程的最有效方法,所以没问题。