同一m文件中多个函数的问题(Matlab)

同一m文件中多个函数的问题(Matlab),matlab,function,Matlab,Function,我在同一个m文件中实现多个函数时遇到一些问题。以下代码包括在函数HeatTransferModel中调用的三个函数。如果我像下面一样设置m文件,它将无法识别函数RadOnly、analytica和RadConv。但是,如果我为RadOnly、analytica和RadConv创建单独的m文件,代码就可以工作了。你知道为什么吗?如何将所有这些函数集成到一个m文件中?对不起,所有不必要的信息 function HeatTransferModel global e rho sigma c V Arad

我在同一个m文件中实现多个函数时遇到一些问题。以下代码包括在函数HeatTransferModel中调用的三个函数。如果我像下面一样设置m文件,它将无法识别函数RadOnly、analytica和RadConv。但是,如果我为RadOnly、analytica和RadConv创建单独的m文件,代码就可以工作了。你知道为什么吗?如何将所有这些函数集成到一个m文件中?对不起,所有不必要的信息

function HeatTransferModel
global e rho sigma c V Arad Twall Ti tend h Tinf
e = 0.87;
rho = 770; %kg/m3
sigma = 5.67E-08; %Stefan Boltzman constant
c = 1900; %Heat capacity of white oak wood
Lavg = 0.3686; 
Wavg = 0.08382;
Havg = 0.05715;
V = 10*Lavg*Wavg*Havg; %Volume of the lumped wood
Arad =2*(Lavg*3*Havg) + 2*(3*Havg*3*Wavg) + Lavg*3*Wavg ; %Surface area of the lump that is exposed to radiation
Twall = 755; %Wall temperature of the furnace
Ti = 300; %Initial temperature of the wood when it is thrown in the furnace
tend = 500; %Seconds
h = 10;
Tinf = 500; %Temperature of the incoming air

[timeODE,TODE] = ode45('RadOnly',[0:1:tend],Ti);
[timeRadConv,TRadConv] = ode45('RadConv',[0,tend],Ti);
timeanalytical = analytical(TODE);
plot(timeODE,TODE,timeanalytical,TODE,timeRadConv,TRadConv);
legend('ODE Solver','Analytical Solution','RadConv');
title('Lumped Capacitance Model')
xlabel('Time [s]')
ylabel('Bulk Wood Temperature [K]')

end

function RadiationODE = RadOnly(t,T)
global e rho sigma c V Arad Twall h Tinf 
RadiationODE = -e*Arad*sigma*(T^4 - Twall^4)/(rho*V*c);
end

function time = analytical(T)
global e rho sigma c V Arad Twall Ti
time = ((rho*V*c)./(4*e*Arad*sigma*Twall^3)).*( log( abs((Twall + T)./(Twall-T))) - log(abs((Twall + Ti)./(Twall-Ti))) + 2*( atan(T./Twall) - atan(Ti/Twall)));
end

function RadConvODE = RadConv(t,T)
global e rho sigma c V Arad Twall h Tinf
RadConvODE = -e*Arad*sigma*(T.^4 - Twall^4)./(rho*V*c) + (h*Arad.*(T - Tinf))./(rho*V*c);
end

您不能将子函数句柄传递给Ode45,因为它与主函数位于不同的工作区。

您是说HeatTransferModel函数不能像上面所述那样工作吗?函数末尾的end语句是多余的,但我不认为这会使它看不到子函数。看起来像一个重复的问题。你的答案可以找到。简短回答:你不能。这可能就是原因。我的错误在电话号码上。它表示:对“double”类型的输入参数使用feval未定义函数“RadOnly”时出错。ode参数(第88行)f0=feval(ode,t0,y0,args{:})中出错;%ODE15I将args{1}设置为yp0。ode45中的错误(第114行)[neq、tspan、ntspan、next、t0、tfinal、tdir、y0、f0、odeArgs、odeFcn,…传热模型中的错误(第18行)[timeODE、TODE]=ode45('RadOnly',[0:1:tend],Ti);