在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;

我想用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)
我写这个函数:

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”不是字符“1”。其中一个是L,另一个是数字。您刚才在
    (l-x)
    中写的是“l”\ell\而不是“1”\one\编辑我刚意识到你实际上想要的是
    l
    而不是
    1

  • 函数句柄不是
    (x)x.^2
    (随机示例),它们是
    @(x)x.^2
    !您忘记在所有调用中添加“@”,因此
    =['(x)
    应该是
    =['@(x)

  • 3.您的函数实际上是(正如您在文章中所描述的)变量方面的
    x
    l
    。因此,您需要函数句柄来说明这一点。将
    =['@(x)
    更改为
    =['@(x,l)

  • 我不确定您是否意识到这一点,但您实际上没有使用代码的任何部分。您的代码可以减少到4行,并且会完全相同。
    Fs
    Fs
    adn
    f
  • 代码的结果与以下内容相同:

    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”。