To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016
I am trying to solve an equation involving a common logorithm within a loop. I first solve an equation to get r(i). then I take that r(i) value and plug it into an equation to solve for b(i).The second equation is:
b(i)=solve('r(i)=.5*Log10(b(i)) + .5*b(i)')
It is having a lot of trouble solving this. This is the error message:
Warning: Could not find an exact (case-sensitive) match for 'Log10'. /Applications/MATLAB_R2009aSV.app/toolbox/matlab/elfun/log10.m is a case-insensitive match and will be used instead. You can improve the performance of your code by using exact name matches and we therefore recommend that you update your usage accordingly. Alternatively, you can disable this warning using warning('off','MATLAB:dispatcher:InexactCaseMatch'). This warning will become an error in future releases. > In testloopwithgraph at 6 ??? Error using ==> mupadengine.mupadengine>mupadengine.feval at 162 Error: no indeterminate(s) [numeric::solve]
Error in ==> solve>mupadSolve at 232 list = feval(symengine,'mlfsolve',eqns,vars);
Error in ==> solve at 93 [R,symvars,order] = mupadSolve(eqns,vars);
Error in ==> testloopwithgraph at 7 b(i)=solve('r(i)=.5*Log10(b(i)) + .5*b(i)');
I can numericaly solve this equation in mathematica with just a warning about how the output might not cover all values, but it does give me values. In my matlab code it won't give me values at all. Is there a way around this?
No products are associated with this question.
If I understand your intent correctly, you're trying to solve the equation
r_i = (Log10(b) + b)/2
for b, given a (numeric?) value of r_i. Then you want to store that b value as b_i. (Repeat for i+1)
If so, then (1) you don't need to do this symbolically and (2) you are getting the error because solve can't figure out what the variable is.
I'd suggest using fzero:
for i = 2:n % get r(i) % solve for b(i) using b(i-1) as an initial guess b(i) = fzero(@(b) (log10(b) + b)/2 - r(i),b(i-1)); end
Didn't see your comment with your code. This works:
imax = (n/2)-2; r = zeros(imax,1); syms b
for i = 2:imax; r(i)=.5*log10((2*p)^((1 - 2*(i - 2))/(n - 4))*(t/2)^((2*(i - 2))/(n - 4)))+(i - 2)*(((n - 4)*p-2*p-.5*t)/(n - 4)); bsolve(i)=solve((log10(b) + b)/2 == r(i),b); end
bnum = double(bsolve);