如何以最大值访问数组中的特定元素?

时间:2012-02-01 10:18:58

标签: maxima

使用solve命令解决两个同时非线性eqts后,我得到一个x和y数组,我需要访问这个数组中的特定元素。

A:0.500000000000000 $  B:0.709506070053745 $  C:0.242527534593605 $  d:0.719012140107490 $  E:0.357164044380080 $  F:-0.505315948652670 $  G:0.181895650945204 $ H:0.300000000000000 $

解决([X ^ 2 *(A * Y ^ 3 + B * YC)-D * X * Y ^ 2 + E * Y ^ 3,A * X ^ 2 +(X / Y ^ 2)* (H * Y + G)+ F],[X,Y]),NUMER; 这里,'x'和'y'各包含8个值,我需要访问只说第二个元素。

1 个答案:

答案 0 :(得分:2)

Maxima返回结果列表(最大值数组略有不同)。列表的每个元素是一对方程(x = ...和y = ...)。对于阅读此内容的其他人来说,结果看起来像

 [[x = .06111426947129051, y = .1679154401926679], 
  [x = - 6.026109660574413, y = .3056091599125177], 
  [x = .2909171173159695, y = .4452108480953128], 
  [x = .4561445354339108 %i + 1.180400961416986, 
   y = .8695950265919334 %i + .05136082885038127], 
  [x = 1.180400961416985 - .4561445354339104 %i, 
   y = .05136082885038127 - .8695950265919334 %i], 
  [x = .06097600174281474 %i - 0.77772869099467, 
   y = 0.792517152411182 %i - .5107285531053073], 
  [x = - .06097600174281463 %i - 0.77772869099467, 
   y = - 0.792517152411182 %i - .5107285531053073],
  [x = 0, y = 0]]

现在,我不确定您的问题是否只需要每个y坐标,或者您是否想要找到解决的第二个解决方案。对于第二个解决方案,只需使用[n]来获取第n个问题。因此,如果我将上面的列表存储为变量solns,我可以使用

(%i12) solns[2];
(%o12)         [x = - 6.026109660574413, y = .3056091599125177]

如果您想要每个y坐标,则必须映射到列表中。例如,试试这个:

(%i14) map(lambda([pair], rhs(second(pair))), solns);
(%o14) [.1679154401926679,
        .3056091599125177,
        .4452108480953128, 
        .8695950265919334 %i + .05136082885038127,
        .05136082885038127 - .8695950265919334 %i, 
        0.792517152411182 %i - .5107285531053073, 
        - 0.792517152411182 %i - .5107285531053073,
        0]

(我稍微整理了输出的格式)。或者你也可以这样做

map(rhs, map(second, solns));

给出了完全相同的答案,但无需编写lambda表单。