你的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.4)
if (f4_c>0)
continue
end
希望能得到解答,谢谢