1

如何在 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);

在给定一个系数向量的情况下,我想在其中恢复傅里叶级数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})在终端中单独使用时,它可以正常工作,但在这里它不会......

我得到的结果是两个函数的向量而不是一个函数。

4

2 回答 2

4

subs确实是正确的方法,你只是用错了。

有三个输入参数subs:符号表达式、要替换的参数及其新值。但是有一个例外:如果有两个输入参数,则将表达式中的默认subs符号参数替换为第二个参数。

无论如何,您似乎缺少 中的新值subs,因此它的行为不像您想要的那样。我认为它应该看起来像这样:

subs(a, k, 0)

ETC...

subs附带说明一下,只使用一次就足够了(而且更优雅) 。计算整个符号表达式,然后使用subs一次。所以而不是:

subs(a, ...) + subs(b, ...)

我建议你这样做:

subs(a + b, ...)
于 2012-12-05T16:35:55.707 回答
0

如果你定义

a=@(k) vec(k+1);

thena不是符号表达式,而是一个函数,并且要为其获取特定值k,您不能使用subs. 相反,您必须调用该函数a

a(1)

f = @(x) a(0)/2 + sum(@(i) a(i)*cos(i*x) + b(i)*sin(i*x),1,n)
于 2016-04-07T06:42:13.120 回答