matlab 如何解决这个嵌套的符号函数?

w41d8nur  于 2023-10-23  发布在  Matlab
关注(0)|答案(1)|浏览(167)

我在Matlab中做一个冶金问题,要做到这一点,我需要制作以下代码,但当我调用以下嵌套函数时返回错误,顺便说一句,我这样做是因为我想将其导出为Excel加载项。

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*(D^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
Q(x) = (16.4831*x^(-0.7510)+1.665)*exp(-0.9451*tiempo^0.296);
fun= 80-(100-Q(z))==0;
P_80 = double(solve(fun,z));
end
end

我找不到解决办法,如果你知道怎么做,我会很高兴。先谢谢你的帮助。
尝试改变变量,但不起作用。

63lcw9qa

63lcw9qa1#

根据文档,在限制下,syms z不能在函数中使用,而是z=sym('z')
因此mP80函数体可以重写为(也修复了卷积语法):

function P_80=mP80(tiempo)
x=sym('x') ;
Q = (16.4831*x^(-0.7510)+1.665)*exp(-0.9451*tiempo^0.296);
fun= 80-(100-Q)==0;
P_80 = double(solve(fun,x));
end

除此之外,Kwb = 4.879*(D^0.3)*(3.2-3*Vp)*fVc*(1-0.1/((2^9)-10*fVc))行上的D变量没有定义,会抛出错误。我猜你想使用变量Diametro代替。
还有一个错字行a(2)=P80;,它应该是小写p,所以a(2)=p80;
在所有的修正后,这段代码运行顺利,由你来评估结果是否令人满意:

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)
x=sym('x') ;
Q = (16.4831*x^(-0.7510)+1.665)*exp(-0.9451*tiempo^0.296);
fun= 80-(100-Q)==0;
P_80 = double(solve(fun,x));
end
end

相关问题