Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

solve equation without fsolve

Asked by Max Bernstein on 18 Oct 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

0 Comments

Max Bernstein

Products

No products are associated with this question.

3 Answers

Answer by Naz on 19 Oct 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 Comment

Walter Roberson on 19 Oct 2011

You left out the [] in that roots() call, so this code will end up taking roots() of a scalar.

Naz
Answer by Andrei Bobrov on 19 Oct 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 Comment

Valerio on 18 Jul 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

Andrei Bobrov
Answer by Walter Roberson on 18 Oct 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 Comments

Walter Roberson

Contact us