Thank you guys! The solution turned out to be very simple, but I couldn't
find it anywhere (not even in the help of the function curve()). I think
there's not much difference in both methods, but with curve you can easily
adjust the amount of a values with 'n = ...' option, to make a smooth line.

2012/7/5 David Winsemius <dwinsemius@comcast.net>

>
> On Jul 5, 2012, at 8:34 AM, Boudewijn Verkooijen wrote:
>
>  Dear all,
>>
>> I'm using the curve() function to plot discharge Q against water depth a.
>> However, I would like to have a graph of water depth a plotted against
>> discharge Q. How can this be done?
>> Minimal working example:
>> S0 = 0.004
>> n = 0.04
>> tanalpha = 1.4/1.5
>> par(mar = c(5,5,1,1)) # b, l, t, r
>> curve((sqrt(S0)/n)*(0.035+(0.**7+(x-0.1)/tanalpha)*(x-0.1))*(**
>> (0.035+(0.7+(x-0.1)/tanalpha)***(x-0.1))/(2*sqrt((0.7/2)^2+0.**
>> 1^2)+2*sqrt((x-0.1)^2+((x-0.1)**/tanalpha)^2)))^(2/3),0.1,1.**55,
>> lwd = 3, col = "royalblue4", ann = F, axes = T)
>> title(xlab = parse(text='a~bgroup("[", m, "]")'))
>> title(ylab = parse(text='Q~bgroup("[", m^3/s, "]")'))
>> box()
>> I tried to find the inverse function, but that doesn't seem to exist.
>>
>
> R does not perform computer algebra. If you wanted a numerical approach,
> you can construct a close fit to that function with approxfun() and then
> reverse the x and y roles to create an inverse. Actually, since curve
> returns a list with x and y components you could also do this:
>
> xycurv <- curve((sqrt(S0)/n)*(0.035+(0.**7+(x-0.1)/tanalpha)*(x-0.1))*(**
> (0.035+(0.7+(x-0.1)/tanalpha)***(x-0.1))/(2*sqrt((0.7/2)^2+0.**
> 1^2)+2*sqrt((x-0.1)^2+((x-0.1)**/tanalpha)^2)))^(2/3),0.1,1.**55,
>
> + lwd = 3, col = "royalblue4", ann = F, axes = T)
>
> plot(xycurv$y, xycurv$x)
>
>
> --
>
> David Winsemius, MD
> West Hartford, CT
>
>

	[[alternative HTML version deleted]]

