Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a nonlinear expression in five variables. I want to use Mathematica to solve for three of the variables. I have a series of points giving values of x an y and I am trying to solve for a,b, and c.

I am having trouble in finding how to solve this. Does anyone know a Mathematica function that can do it? Or do I need to write some type of script to do this?

My expression is

$$(660 (-0.37 + b) (x - c))/(660 + a) - 0.37 c = y$$

share|improve this question

closed as too localized by belisarius, Artes, Yves Klett, Silvia, Oleksandr R. May 15 '13 at 11:54

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

Syntax for this would be Solve[{(660 (-0.37 + b) (x - c))/(660 + a) - 0.37 c == y,...}, {a,b,c}]. Note use of "==" (doubles equal sign) in the equation; a single one denoted Mathematica's Set which is not what you would want there. –  Daniel Lichtblau May 14 '13 at 23:30
@Daniel, Thank you very much, I'm very new to this program and still trying to learn and did not even know about the double =. So following that script, how would I input my x,y values for the expression? –  GuestRiverside229 May 14 '13 at 23:42
If you have three linearly independent points giving x and y values, you can use the Solve function to get a solution. If you have more than three, then you will need to fit a solution with one of Mathematica's functions for fitting data to a set of parameters. Which is your situation? –  m_goldberg May 15 '13 at 2:56
add comment

1 Answer 1

One way to find the parameters {a,b,c} is the following:

f[x_]=(660 (-0.37 + b) (x - c))/(660 + a) - 0.37 c
sol = FindFit[data, f[x], {a, b, c}, x]

Where data is a List[] of {x,y} pairs that you want to use to fit the parameters. The problem isn't very well posed however: f[x] describes a straight line with three parameters instead of the two that would be sufficient. The result is that your solution {a,b,c} will flail about wildly, trying to accomodate what is probably non-relevant variations in the data.

share|improve this answer
You could rewrite the equation using two parameters d and e, to get it in the form of f[x_]= d x + e and fit that. d and e can be found using CoefficientList[(660 (-0.37 + b) (x - c))/(660 + a) - 0.37 c, x]. After finding d and e from the fit you can solve for a, b and c. –  Sjoerd C. de Vries May 15 '13 at 8:34
@SjoerdCdeVries Wouldn't that be underdetermined? –  SEngstrom May 15 '13 at 13:45
It is. You'd have a free parameter. –  Sjoerd C. de Vries May 15 '13 at 18:32
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.