MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Lists of equations. Again

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56365] Re: Lists of equations. Again
  • From: Maxim <ab_def at prontomail.com>
  • Date: Fri, 22 Apr 2005 06:25:47 -0400 (EDT)
  • References: <d45arr$ijq$1@smc.vnet.net> <d47snc$53h$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

FindRoot[{x, y}, {x, 1}, {y, 1}] and FindRoot[{x, y}, {{x, 1}, {y, 1}}]  
work exactly the same way -- there are no syntax errors in either of them.  
If you read the documentation on FindRoot (in Built-in Functions)  
carefully, you'll see that the last example there is FindRoot[{x^2 + y^2  
== 1, y == x*Exp[x]}, {x, 0.1}, {y, 0.5}] -- the same syntax as I used.

The main concern is equations with vector variables, e.g.

FindRoot[{x == 1, y == {2, 3}}, {x, 0}, {y, {0, 0}}]

doesn't work (this time failing with FindRoot::nlnum message, and  
supplying the jacobian doesn't help here) but

FindRoot[{x, y} == {1, {2, 3}}, {x, 0}, {y, {0, 0}}]

works without a problem. As you can see, in this case it is impossible to  
thread Equal over lists as you suggest (and threading over y == {2, 3}  
would be clearly wrong).

Maxim Rytin
m.r at inbox.ru


On Thu, 21 Apr 2005 09:45:16 +0000 (UTC), dh <dh at metrohm.ch> wrote:

> Hi Maxim,
> the problem is that your expression has syntax errors.
> 1) It look like FindRoot does not like tensor equations. You must expand
> the equations like e.g.:
> eq=MapThread[Equal,{Array[a, {2, 2}],IdentityMatrix[2]},2];
> 2) The second argument to FindRoot must contain a list of variables and
> start values. Sequence[..] is not a list. E.g. wrap your expression in a
> list:
> var={Sequence @@ (Flatten[#, 1] &)@Array[{a[##], 0} &, {2, 2}]}
>
> This then finally works:
> FindRoot[eq,var]
>
> Sincerely, Daniel
>
> Maxim wrote:
>> In version 5.0 FindRoot[{{x, y} == {1, 1}}, {x, 2}, {y, 2}] failed: it
>> complained about the non-numerical jacobian and just returned the  
>> starting
>> point. This now works in version 5.1; however, there is still exactly  
>> the
>> same problem with higher-dimensional lists:
>>
>> FindRoot[Array[a, {2, 2}] == IdentityMatrix[2],
>>    Evaluate[Sequence@@ (Flatten[#, 1]&)@ Array[{a[##], 0}&, {2, 2}]]]
>>
>> This generates Thread::tdlen and FindRoot::njnum messages, indicating  
>> that
>> there is again something wrong with the processing of lists. Strangely,
>>
>> FindRoot[Array[a, {2, 2}] - IdentityMatrix[2],
>>    Evaluate[Sequence@@ (Flatten[#, 1]&)@ Array[{a[##], 0}&, {2, 2}]]]
>>
>> works without a problem (another possible way to resolve this issue is  
>> to
>> specify Jacobian -> IdentityMatrix[4]).
>>
>> If the specified form of the jacobian doesn't have the correct  
>> structure,
>> this often results in the kernel crash:
>>
>> FindRoot[x == {1, 2}, {x, {0, 0}}, Jacobian -> {{{1}, {1}}}]
>> (*crashes the kernel*)
>>
>> This may happen even if the structure is correct:
>>
>> FindMinimum[x^2, {x, 1},
>>    Method -> {Newton, Hessian -> {{2}}}]
>> (*crashes the kernel*)
>>
>> Here the hessian is specified correctly, but unless the gradient is also
>> given explicitly as Gradient -> {2x}, all the other settings (Automatic,
>> Symbolic, FiniteDifference) lead to the kernel crash.
>>
>> Maxim Rytin
>> m.r at inbox.ru
>>
>


  • Prev by Date: Re: a conflicting StringReplace
  • Next by Date: Re: a conflicting StringReplace
  • Previous by thread: Re: Lists of equations. Again
  • Next by thread: Reduce bug report