这里要怎么改用元胞数组呢?

img


请问一下有没有人知道这个怎么改,我是在这段代码中间加入了一个for循环

你的k1实际需要存储的是函数句柄还是函数值?

k1{1,m} = @(z)

类似这种,但是这显然不是你需要的
不要随便用句柄,看着你写的代码感觉乱糟糟的,把你的所有代码贴上来以及意图告知一下

clc 
clear all

load lambda;
H=1000;
alph=0.0001;
q=0.864;
ks=0.36;
z=50;
t=6;
for m=1:300
k1(1,m)=(sin(lambda(m)*alph*10*z)*sin(lambda(m)*alph*10*H)*exp(-lambda(m)^2*alph*10*ks*t/0.2)/(1+alph*10*H/2+2*lambda(m)^2*alph*10*H));
A2=sum(k1);
k=log(q/ks-(q/ks-1)*exp(-alph*10*z)-4*(q/ks)*exp((alph*10*(H-z))/2)*exp(-alph*10*ks*t/(4*0.2))*A2);
end

这里是我需要插入的for循环

function yy=ka_crack_fun(n,phi,miu,x0,xC,xh,xB,r0,z0,ks,q,alph,unn)
%s必须为4n+1结构
% Bmax对应n=0,gi对应n=i
s=201;
r=s-1;
u=1:s;
x1=xB+(xC-xB)/r*(u-1);
x2=xC+(xh-xC)/r*(u-1);
%%%%%%%
if (n==1)
    x3=x0+(xC-x0)/r*(u-1);
    z_sym=@(x) r0*exp((xC-x0)*tan(phi))*sin(xC)-r0*exp((x-x0)*tan(phi))*sin(x)+z0;          
    capp_sym=@(z) log((1+q/ks)*exp(-10*alph*z)-q/ks)/(1+(-log((1+q/ks)*exp(-10*alph*z)-q/ks))^unn)^((unn-1)/unn);
    dcapp_sym=@(capp,x) tan(phi)*capp*exp(2*(x-x0)*tan(phi));
    %%%
    z_fun=eval(vectorize(z_sym));
    capp_fun=eval(vectorize(capp_sym));
    dcapp_fun=eval(vectorize(dcapp_sym));
    %%%
    z4=z_fun(x3);
    capp4=capp_fun(z4);
    dcapp4=dcapp_fun(capp4,x3);
    f4_=(xC-x0)/(r/2*6)*(dcapp4(1)+4*sum(dcapp4(2:2:r))+2*sum(dcapp4(3:2:(r-1)))+dcapp4(s));
    yy=real(f4_);
end

这上面这段是fun函数的源代码,我需要把第一段for循环加入到这段代码的z_sym函数式的后面,并且capp_sym的函数式需要改成

capp_sym=k/(k^unn)^((unn-1)/unn)

其中k就是for循环里面的k,然后下面是我的改动

function yy=ka_crack_fun1(n,phi,miu,x0,xC,xh,xB,r0,z0,ks,q,alph,unn,t,H)
%s必须为4n+1结构
% Bmax对应n=0,gi对应n=i
s=201;
r=s-1;
u=1:s;
x1=xB+(xC-xB)/r*(u-1);
x2=xC+(xh-xC)/r*(u-1);
%%%%%%%
load lambda;
if (n==1) 
    x3=x0+(xC-x0)/r*(u-1);                                 %X1.X2.X3应该表示范围。         %式(A.5)包括Z0的前部分。
    z_sym=@(x) r0*exp((xC-x0)*tan(phi))*sin(xC)-r0*exp((x-x0)*tan(phi))*sin(x)+z0;
       for m=1:300
        k1(1,m)=@(z) (sin(lambda(m)*alph*10*z)*sin(lambda(m)*alph*10*H)*exp(-lambda(m)^2*alph*10*ks*t/0.2)/(1+alph*10*H/2+2*lambda(m)^2*alph*10*H));
        A2=@(k1) sum(k1);
        k=@(z) log(q/ks-(q/ks-1)*exp(-alph*10*z)-4*(q/ks)*exp((alph*10*(H-z))/2)*exp(-alph*10*ks*t/(4*0.2))*A2);
       end  
    capp_sym=@(k) k/(k^unn)^((unn-1)/unn);
    dcapp_sym=@(capp,x) tan(phi)*capp*exp(2*(x-x0)*tan(phi));      %式(A.5)
    %%%
    z_fun=eval(vectorize(z_sym));
    capp_fun=eval(vectorize(capp_sym));
    dcapp_fun=eval(vectorize(dcapp_sym));
    %%%
    z4=z_fun(x3);
    capp4=capp_fun(z4);
    dcapp4=dcapp_fun(capp4,x3);
    f4_=(xC-x0)/(r/2*6)*(dcapp4(1)+4*sum(dcapp4(2:2:r))+2*sum(dcapp4(3:2:(r-1)))+dcapp4(s));
    yy=real(f4_);
end

运行后就会出现我最初的问题。下面这串是调用fun函数的代码

 f4_c=ka_crack_fun(1,phi,miu,x0c,xCc,0,xBc,r0c,z0c,ks,q,alph,unn);        %提取FUN程序中n=1时的情况,也就是式(A.4if (f4_c>0)
                        continue
                    end

希望能得到解答,谢谢