[Jprogramming] Implicit functions

'Mike Day' via Programming programming at jsoftware.com
Fri Nov 6 09:56:56 UTC 2020


Thanks for the reminder.  I vaguely remember trying to load it on my fairly basic android phone,  but either having too little memory (electronic) or too little computing power (brain).

Cheers,

Mike

Sent from my iPad

> On 6 Nov 2020, at 05:59, arie groeneveld <agroeneveld400 at gmail.com> wrote:
> 
> Hi Mike,
> 
> FYI https://pari.math.u-bordeaux.fr/paridroid/
> 
> cheers
> @@i
> 
> 
> Op 05-11-2020 om 19:31 schreef 'Michael Day' via Programming:
>> FWIW,
>> I've played around with your (Piet's) example in J and Pari-GP, which is free. Pari-GP doesn't
>> itself run on Android or iOS phones & tablets,  but can be run via SAGE as far as I understand my iPad!
>> 
>> The J is pretty messy and hardly general!   But normal stuff...
>> 
>> NB. General expression for (x^2 + log y)^(+ or -1) - c
>> 
>> f =: 2 : 0 NB. (x^2 + log y)^m - n ## m for power +-1, n for c
>> 
>> :
>> 
>> n -~ m^~ (x^2) + ^. y
>> 
>> )
>> 
>> 1 (_1 f 0.5) 3 NB. eg x=1, y=3, c = 0.5, power negative
>> 
>> _0.023494642
>> 
>> fff =: 1 & (_1 f 0.5) NB. curry? values for x = 1, power = _1, c = 0.5
>> 
>> fff 3 NB. same as non-curried example, as expected
>> 
>> _0.023494642
>> 
>> NB. I couldn't get deriv to work without a domain error, (my misunderstanding probably) so:
>> 
>> mydfff =: 1e_7 & ((-:@+/ %~ -/@:fff) @ ,: ) NB.DIY secant approx for dfff(y)/dy
>> 
>> NB. Newton-Raphson... NB needs some care on variable domains!
>> 
>> (] - fff % mydfff)^:(i.3) 2
>> 
>> 2
>> 
>> 2.137974
>> 
>> 2.2529446
>> 
>> NB. N-R DOES resolve - in this case
>> 
>>  (] - fff % mydfff)^:_] 2
>> 
>> 2.7182818
>> 
>> Here's the same sort of thing in Pari GP. The solution at 17:22 %38 is the same as my
>> 
>> Newton-Raphson J solution, luckily!
>> 
>> # help on solve  Note the condition on values on a and b....
>> 
>> (17:14) gp > ?solve solve(X=a,b,expr): real root of expression expr (X between a and b), where expr(a)*expr(b)<=0.
>> 
>> # define function
>> 
>> (17:21) gp > f(x,y,c,p=1)={(x^2 + log(y))^p-c} %35 = (x,y,c,p=1)->(x^2+log(y))^p-c
>> 
>> # sorry, forgot to limit Pari GP's precision for this example........
>> 
>> (17:22) gp > solve(x=0,2,f(x,2,3)) # solve for x given y,c,p>0 %36 = 1.5188327160816805010724091402460886947
>> 
>> (17:22) gp > solve(x=1,2,f(x,0.5,3,-1)) # solve for x given y,c,p<0 %37 = 1.0131537464241439810906386058489161931
>> 
>> (17:22) gp > solve(y=2,3,f(1,y,0.5,-1)) # solve for y given x,c,p<0 %38 = 2.7182818284590452353602874713526624978
>> 
>> (17:22) gp > f(1,3,0.5,-1) # same as J's 1 (_1 f 0.5) 3 , shown above
>> 
>> %39 = -0.023494641959495592026487857212476799043
>> 
>> Amused me, and _might_ be of interest, but I expect something along the lines suggested
>> 
>> by Pascal Jasmin would be more generally useful.
>> 
>> Mike
>> 
>> 
>> 
>>> On 05/11/2020 03:58, Piet de Jong wrote:
>>> I was hoping for more of  a “J” type solution.
>>> 
>>> For example if f(x,y) = (x^2 + log y)^{-1} = c
>>> Then given c and say x, I can solve for y. (ie write J function)
>>> Or given c and y I can solve for x. (ie write a J function)
>>> (I’m assuming domains etc are ok. — this is just an example.)
>>> 
>>> So instead of following this long process of finding the two functions I was hoping in J there would be a “clean and tidy” way of doing things.
>>> 
>>> Probably impossible even for simple functions f.
>>> 
>>>> On 5 Nov 2020, at 2:24 pm, Raul Miller <rauldmiller at gmail.com> wrote:
>>>> 
>>>> The answer is: sometimes yes, sometimes no.
>>>> 
>>>> See https://en.wikipedia.org/wiki/Equation_solving for some of the issues.
>>>> 
>>>> If f can be expressed as a polynomial, you might want to consider
>>>> using https://www.jsoftware.com/help/dictionary/dpdot.htm
>>>> 
>>>> Thanks,
>>>> 
>>>> -- 
>>>> Raul
>>>> 
>>>>> On Wed, Nov 4, 2020 at 7:27 PM Piet de Jong <pietdion at gmail.com> wrote:
>>>>> Still trying to learn/improve my J after 25 years.
>>>>> 
>>>>> Here is the issue.   I’m probably having a pipe dream.
>>>>> 
>>>>> Suppose you have an implicit function f(x,y)=0  which is relatively “clean” (ie simple to specify)
>>>>> 
>>>>> Is there a “clean/efficient” way in J to solve for y given x or vice versa.
>>>>> 
>>>>> I know I can write a function g  such that g x  gives y and g^:_1 y gives x.
>>>>> But is there a cleaner way?   The g and its inverse may be complicated even if f is relatively simple.
>>>>> ----------------------------------------------------------------------
>>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
>> 
>> 
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm


More information about the Programming mailing list