Thank you Johan but your proposal won't work as it is because (i) the variables Ca, Cb, Va, Ka, Kb and Kw have not been specified (trivial to fix), (ii) VbCalc has not been specified and I am not sure what you intend it to be and (iii) even if I specify a value for VbCalc the line WHILE needs to be DO WHiLE and when it is corrected to DO WHILE generates a Data Type Mismatch error.

Clear
Ca = 0.1
Cb = 0.1
Vb = 10
Va = 10
Ka = 10^-4.757
? Ka
Kb = 10^-0.2
? Kb
Kw = 1.0E-14

HLow = 0
HHigh=10000
H=(HHigh + HLow) / 2

VbCalc = 10
DO WHILE Abs(VbCalc = Vb - Va*[(Ca/(1 + H/Ka) - H + Kw/H)/(Cb/(1 + Kw/ (H*Kb)) + H - Kw/H)]) > 0.0005
  IF VbCalc < Vb
    HLow=H
  ELSE
    HHigh=H
  ENDIF
  H=(HHigh + HLow) / 2
ENDDO

? H

Paul

On 20/12/2022 07:18, Johan Nel wrote:
You can do it with binaray intersect.

Vb = 10
HLow:= 0
HHigh=10000
H=(HHigh + HLow) / 2

WHILE Abs(VbCalc = Vb - Va*[(Ca/(1 + H/Ka) - H + Kw/H)/(Cb/(1 + Kw⁄ (H*Kb)) + H - Kw/H)]) > 0.0005
  IF VbCalc < Vb
    HLow=H
  ELSE
    HHigh=H
  ENDIF
  H=(HHigh + HLow) / 2
ENDDO

HTH

Johan Nel
South Africa

On 2022/12/14 01:49, Paul Newton wrote:
I have the following equation

Vb = Va*[(Ca/(1 + H/Ka) - H + Kw/H)/(Cb/(1 + Kw⁄ (H*Kb)) + H - Kw/H)]

Va, Ca, Ka, Cb, Kb and Kw are known or can be provided for any given "run" of the calculation.  Typical values might be

Va = 10, Ca = 0.1, Ka = 1.8E-5, Cb = 0.1, Kb = 0.63, Kw = 1.0E-14

The aim is to calculate H for various values of Vb and this requires "solving" for H. Various software packages do this in pretty much the same way but the terminology varies: Matlab uses "fsolve", Mathcad uses "find", Maple uses "solve" and Excel uses "GoalSeek".

I would like to try to find a way of doing this from VFP. Perhaps there is already a .NET DLL that could be called from VFP? Perhaps with a wrapper to act as a sort of mediator? Failing that, would it be a major task to create something in .NET (perhaps using an existing package)?

I really don't know, just thinking aloud ...

Paul Newton


[excessive quoting removed by server]

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: https://mail.leafe.com/mailman/listinfo/profox
OT-free version of this list: https://mail.leafe.com/mailman/listinfo/profoxtech
Searchable Archive: https://leafe.com/archives
This message: 
https://leafe.com/archives/byMID/[email protected]
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to