Matlab嵌套符号函数报错求解(冶金场景,需导出Excel加载项)
问题分析与解决方案
先明确代码里的几个关键错误:
- 变量名不匹配:计算
Kwb时用了未定义的变量D,实际应该用函数参数Diametro - 大小写拼写错误:主函数中计算得到的是
p80,但最后赋值给a(2)的是P80,Matlab对大小写敏感,导致未定义变量报错 - 符号表达式逻辑冗余:方程
80-(100-Q(z))==0可简化为Q(z)==20,且tiempo是数值参数,无需放入符号函数的指数部分,避免符号计算冲突
修正后的完整代码:
valor=molienda(10,6,6,6.1,1.02,0.45,0.7,10) function a=molienda(F_min,Diametro,Largo,Wi,F80,Vp,fVc,t) p80=mP80(t); %Potencia para moler el mineral W_mineral=Wi*((10/(p80^0.5))-(10/(F80^0.5))); P_mineral=W_mineral*F_min*1.341; %Potencia para mover el medio moledor Kwb = 4.879*(Diametro^0.3)*(3.2-3*Vp)*fVc*(1-0.1/((2^9)-10*fVc)); W_bolas=80*(Diametro^2)*Largo; P_bolas=Kwb*W_bolas; P_total=P_bolas+P_mineral; a(1)=P_total; a(2)=p80; function P_80=mP80(tiempo) syms Q(x) z exp_term = exp(-0.9451*tiempo^0.296); Q(x) = (16.4831*x^(-0.7510)+1.665)*exp_term; fun= Q(z) == 20; P_80 = double(solve(fun,z)); end end
额外注意:如果要导出为Excel加载项,需确保代码中使用的符号工具箱函数(syms、solve)在Excel加载项环境中支持,若出现兼容性问题,可考虑用数值方法替代符号求解,示例如下:
function P_80=mP80(tiempo) exp_term = exp(-0.9451*tiempo^0.296); fun = @(x) (16.4831*x^(-0.7510)+1.665)*exp_term - 20; P_80 = fzero(fun, [1, 100]); end
内容的提问来源于stack exchange,提问作者Raul Sebastian Rivera Martinez
相关产品推荐
相关产品推荐

