在matlab中使用str2func命令构建函数
我想用matlab建立一系列不同的函数,并对结果进行积分和微分。但是数学工作表明str2func的输出不能访问变量,或者不能被其他函数使用。 有人帮我解决这个问题吗 我想创建以下函数:在matlab中使用str2func命令构建函数,matlab,Matlab,我想用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;
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)
我写这个函数:
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)
当我运行该命令时,错误是:
您诚挚的
赛义德·纳西里我发现了你所有的问题
(l-x)
中写的是“l”\ell\而不是“1”\one\编辑我刚意识到你实际上想要的是l
而不是1
(x)x.^2
(随机示例),它们是@(x)x.^2
!您忘记在所有调用中添加“@”,因此=['(x)
应该是=['@(x)
x
和l
。因此,您需要函数句柄来说明这一点。将=['@(x)
更改为=['@(x,l)
Fs
,Fs
adnf
for i=1:10
for j=1:10
if mod(i,2) ~= 0 & mod(j,2) ~= 0
fjnew = str2func(['@(x,l)','x','.^',num2str(j),'.*','(l-x)','.^',num2str(j)])
fj_diff = diff(fjnew,x)
end
end
end
所以,除非你以后再做更多的事情,否则不需要计算不必要的东西。
谢谢你的好建议,我定义了FS和FH的积分和微分,我想评估这些:乐意帮助。考虑接受它的答案帮助你。@ SaistNasiRi感谢你的好建议,我定义FS。对于积分和微分,我想计算这些:S(I,j)=int(Fs,x,0,l)fj_diff=diff(fjnew,x)fj_diff2=func2str(fj_diff)FH=str2func(['@(x)','x','x','num2str(I),'.'.'.''(1-x)'.^',num2str I)],fj_diff2)H(I,j)=int(FH,0,l)但是str2func还有另一个错误:对于“sym”类型的输入参数,未定义函数“func2str”。