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

# 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

## Products

No products are associated with this question.

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.

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

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.