我想用matlab构建一系列不同的函数,并对结果进行整合和区分。但数学上说str2func的输出无法访问变量,或者可能被其他函数使用。 有人帮我解决这个问题吗?
我想创建这些功能:
f1= @(x,l) x.*(l-x);
f2= @(x,l) x.^2.*(l-x).^2.*(l/2-x).^2;
f3= @(x,l) x.^3.*(l-x).^3;
f4= @(x,l) x.^4.*(l-x).^6.*(l/2-x).^4;
f5= @(x,l) x.^5.*(l-x).^5;
f6= @(x,l) x.^6.*(l-x).^6.*(l/2-x).^6;
f7= @(x,l) x.^7.*(l-x).^7;
f8= @(x,l) x.^8.*(l-x).^8.*(l/2-x).^8;
f9= @(x,l) x.^9.*(l-x).^9;
f10= @(x,l) x.^10.*(l-x).^10.*(l/2-x).^10;
我写这个函数:
syms x l
f=cell(10,1);
fun=cell(10,1);
for i=1:10
if mod(i,2) ~= 0
f{i}=['x','.^',num2str(i),'.*','(l-x)','.^',num2str(i)];
else
f{i}=['x','.^',num2str(i),'.*','(l-x)','.^',num2str(i),'.*','(l/2-x)','.^',num2str(i)];
end
end
for i=1:10
for j=1:10
if mod(i,2) ~= 0 & mod(j,2) ~= 0
Fs = ['(x)','x','.^',num2str(i),'.*','(l-x)','.^',num2str(i),'*','x','.^',num2str(j),'.*','(l-x)','.^',num2str(j)];
FS = str2func (Fs)
fjnew = str2func(['(x)','x','.^',num2str(j),'.*','(l-x)','.^',num2str(j)])
fj_diff = diff(fjnew,x)
当我运行时,错误是:
Undefined function '(x)x.^1.*(l-x).^1' for input arguments of type 'sym'. Error in sym>funchandle2ref (line 1172) S = x(S{:}); Error in sym>tomupad (line 989) x = funchandle2ref(x); Error in sym (line 142) S.s = tomupad(x,''); Error in sym/privResolveArgs (line 810) argout{k} = sym(arg); Error in sym/diff (line 21) args = privResolveArgs(S,varargin{:});
您诚挚的 赛义德纳西里
答案 0 :(得分:2)
我找到了你所有的问题。
字符“l”不是字符“1”。其中一个是L,另一个是数字。你刚刚在中写了“l”\ \ \而不是“1”\ one \。 编辑我刚才意识到您确实希望(l-x)
l
不是1
。
函数句柄不是(x)x.^2
(随机示例),它们是@(x)x.^2
!您忘记在所有通话中添加“@”,因此=['(x)'
应为=['@(x)'
3.您的功能实际上(正如您在帖子中描述的那样),变量尊重x
和l
。因此,您需要使用函数句柄来表示。更改=['@(x)'
的{{1}}。
=['@(x,l)'
,Fs
adn FS
。:您的代码的结果与:
相同f
因此,除非您稍后使用它做更多的事情,否则无需不必要地计算内容。