Borrar filtros
Borrar filtros

solve equation without fsolve

5 visualizaciones (últimos 30 días)
Max Bernstein
Max Bernstein el 18 de Oct. de 2011
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

Respuestas (3)

Naz
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
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.

Iniciar sesión para comentar.


Andrei Bobrov
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
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

Iniciar sesión para comentar.


Walter Roberson
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.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by