syms C Cc Cs;%Concentration Variables
syms r rc R;%Position Variables
Ri=1*10^-6;
E=30000*4.18;%Activation Energy,E in J/mol
%syms kf kr;%Mass Transfer Coefficients
kf=2.3*10^6*exp(-E/(Rg*T));
%syms D denAl denOx MAl MOx;
D=1.72*10^-9;%Diffusivity of Oxygen
MAl=26;MOx=102; %MAl=molar mass of Al,MOx=molar mass of
Alumina%
denAl=2700;denOx=4000; %densities of Al,Alumina%
kr=1;
R=vpa((rc^3+(denOx*MAl/(denAl*MOx)*(Ri^3-rc^3)))^(1/3),4);%Particle
Size
C=Cc+(Cs-Cc)*(1-rc/r)/(1-rc/R);%Concentration relation
rate1=-4*pi*R^2*kf*(Cg-Cs);%Diffusion Rate through Gas Film
rate2=-4*pi*rc^2*D*subs(diff(C),r,rc);%Diffusion rate through oxide
layer
rate3=-4*pi*rc^2*kr*Cc;%Oxygen Consumption Rate due to reaction
Cs1=solve(rate1-rate2,'Cs');
Cc1=solve(rate2-rate3,'Cc');
Cc2=vpa(subs(Cc1,Cs,Cs1),4);
Cc3=solve(Cc2-Cc,Cc);
C1=subs(C,Cs,Cs1);
C2=subs(C1,Cc,Cc3);
Rfinal=subs(R,rc,0);
eqn=R;
syms R1;
rcfun=solve(eqn-R1,rc);
%Cc=Cc3;
C=matlabFunction(C2);
k=1/(-4/3*MAl*kr/denAl);
Ccf=k/Cc3;
Ccinv=matlabFunction(Ccf);
%rate=4/3*rate3;%Aluminium Consumption Rate
%t=vpa(k*int(1/Cc),2);
%eqn=t-int(1/fun,rc);
%tmax=vpa(subs(t,rc,0)-subs(t,rc,Ri),4);
%tmax=-4/3*MAl/denAl*kr*quadgk(1/Cc,Ri,0);
X=1-power(rc/Ri,3);%X=conversion
%quad(vpa(1/Cc,2),R0,0)
function rcprime=fun(t,rc)
rcprime=Ccinv;
end
tspan=[0 0.008];
%X=1-power(rc/Ri,3);%X=conversion
[t rc]=ode45('fun',tspan,rc0);
figure;plot(t,X);
end
??? Error using ==> assignin
Attempt to add "Cc" to a static workspace.
See MATLAB Programming, Restrictions on Assigning to Variables for
details.
Error in ==> syms at 77
assignin('caller',x,sym(x));
Error in ==> calc at 7
syms C Cc Cs;%Concentration Variables
how can i assign variables within my function to perform calculations?
please get me through this.
Thanks,
Viswanath.
C=matlabFunction(C2);
k=1/(-4/3*MAl*kr/denAl);
Ccf=k/Cc3;
Ccinv=matlabFunction(Ccf);
function rcprime=fun(t,rc)
rcprime=Ccinv;
end
tspan=[0 0.008];
"kangaroo" <visuc...@gmail.com> wrote in message
news:f10efafc-dfd6-4717...@y7g2000prk.googlegroups.com...
> function[]=calc()
> Rg=8.314;T=773;
> psi=6894.75;Pg=75*psi;%Pg=Gas Pressure
> ybulk=1*10^-3;%ybulk=Oxygen mole fraction in bulk
> Cg=ybulk*Pg/(Rg*T);
>
> syms C Cc Cs;%Concentration Variables
> syms r rc R;%Position Variables
Since this is taking place in the context of a nested function, SYMS won't
work. Use SYM instead.
C = sym('C'); % and similarly for the other variables
*snip*
--
Steve Lord
sl...@mathworks.com
To contact Technical Support use the Contact Us link on
http://www.mathworks.com
Thanks, Steve. It worked, accepted definitions the way you said. But
still, i get this error in implementing ode function in the end.
??? Error using ==> odearguments at 120
Inputs must be floats, namely single or double.
Error in ==> ode45 at 172
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs,
odeFcn, ...
Error in ==> calc at 56
[t rc]=ode45('fun',tspan,rc0);
Here is the code:
function[]=calc()
Rg=8.314;T=773;
psi=6894.75;Pg=75*psi;%Pg=Gas Pressure
ybulk=1*10^-3;%ybulk=Oxygen mole fraction in bulk
Cg=ybulk*Pg/(Rg*T);
C=sym('C');Cc=sym('Cc');Cs=sym('Cs');%Concentration Variables
r=sym('r');rc=sym('rc');R=sym('R');%Position Variables
Rfinal=subs(R,rc,0);
eqn=R;
R1=sym('R1');
rcfun=solve(eqn-R1,rc);
%Cc=Cc3;
C=matlabFunction(C2);
k=1/(-4/3*MAl*kr/denAl);
Ccf=k/Cc3;
Ccinv=matlabFunction(Ccf);
%rate=4/3*rate3;%Aluminium Consumption Rate
%t=vpa(k*int(1/Cc),2);
%eqn=t-int(1/fun,rc);
%tmax=vpa(subs(t,rc,0)-subs(t,rc,Ri),4);
%tmax=-4/3*MAl/denAl*kr*quadgk(1/Cc,Ri,0);
X=1-power(rc/Ri,3);%X=conversion
%quad(vpa(1/Cc,2),R0,0)
function rcprime=fun(t,rc)
rcprime=Ccinv;
end
rc0=Ri;
"kangaroo" <visuc...@gmail.com> wrote in message
news:80071deb-8326-4c13...@f31g2000pri.googlegroups.com...
Do not mix symbolic variables with the numeric ODE solvers directly. Either
stay completely in the symbolic realm and use DSOLVE instead of ODE45 or
convert your symbolic expression into a form compatible with the numeric
solvers using matlabFunction and use that function/function handle with
ODE45.