solve equation without fsolve
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello,
I have the following equation that I'm trying to solve. I need to solve for T for a very long array of known RT
function RT=RTD(T)
a=0.003925;
b=0.110361;
d=1.492690;
R0=100;
RT=R0*(1+a*(1+d/100)*T-a*d/100^2*T^2+a*b/100^3*T^3-a*b/100^4*T^4);
I dont think I have fsolve or symbolic toolbox installed. Is there anyway to automate this without using those?
Thanks
0 comentarios
Respuestas (3)
Naz
el 19 de Oct. de 2011
Assuming that each RT will yield four roots:
a=0.003925;
b=0.110361;
d=1.492690;
R0=100;
T=zeros(4,length(RT));
for n=1:length(RT)
T(:,n)=roots(-a*b/100^4*R0 a*b/100^3*R0 -a*d/100^2*R0 a*(1+d/100)*R0 (1-RT(n))*R0);
end
If you want to create an actual function, go to file->new->script and paste the following:
function [T]=RTD(RT)
a=0.003925;
b=0.110361;
d=1.492690;
R0=100;
T=zeros(4,length(RT));
for n=1:length(RT)
T(:,n)=roots(-a*b/100^4*R0 a*b/100^3*R0 -a*d/100^2*R0 a*(1+d/100)*R0 (1-RT(n))*R0);
end
end
Then you can call this function and pass your array of RT. The function will return you an array of T.
T=RTD(RT)
P.S. Make sure there is enough parenthesis in the equation so the coefficients are calculated properly. I recommend to calculate the coefficients prior sending them to roots function. This also will save some time, since the coefficients will be calculated only once instead of each loop.
1 comentario
Walter Roberson
el 19 de Oct. de 2011
You left out the [] in that roots() call, so this code will end up taking roots() of a scalar.
Andrei Bobrov
el 19 de Oct. de 2011
a=0.003925;
b=0.110361;
d=1.492690;
R0=100;
syms k T
cf = coeffs(k-R0*(1+a*(1+d/100)*T-a*d/100^2*T^2+a*b/100^3*T^3-a*b/100^4*T^4),T)
fcf = matlabFunction(cf(end:-1:1))
RTD = @(RT)cell2mat(arrayfun(@(x)roots(fcf(x)),RT,'un',0))
use function RTD
T = RTD(RT)
1 comentario
Valerio
el 18 de Jul. de 2013
I have used your proposed solution, but the output variable of Temp = RTD(RT) is the sym T. What is the problem? Can you help me?
Thanks
Walter Roberson
el 18 de Oct. de 2011
roots( [R0*a*b, -100*R0*a*b, 10000*R0*a*d, -100000000*R0*a-1000000*R0*a*d, -100000000*R0+100000000*RT] )
Note that roots() can only process one set of coefficients at a time: it is not vectorized.
0 comentarios
Ver también
Categorías
Más información sobre Symbolic Math Toolbox en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!