1

我对 Mathematica 很陌生,我正在尝试解决以下问题。

  1. 我有一个形式的三次方程Z = aZ^3 + bZ^2 + a + b。我想做的第一件事是得到一个函数,它可以解析地解决 Z 的问题,并为此选择最小的正根,作为 a 和 b 的函数。

我认为为了获得根,我可以使用:

Z = Solve[z == az^3 + bz^2 + a + b, z];

正如我所期望的使用一般三次方程解公式所期望的那样,我似乎还没有完全找到根源。

  1. 我想将Zoverab(再次,最好是分析地)从 0 到 1a和 fora到 1的最小正根积分b

我试过了

Y = Integrate[Z, {a, 0, 1}, {b, a, 1}];

这似乎没有给出任何公式或数值,而只是返回一个整数。(请注意,我什至不确定如何选择最小正根,但我正在使用 Mathematica 来尝试找出答案。)

关于如何做到这一点的任何想法?

4

2 回答 2

1

aorb和之间的空格z很重要。您可以通过以下方式获取根源:

sol = z /. Solve[z == a z^3 + b z^2 + a + b, z]

但是,您确定此表达式有您期望的解决方案吗?对于a=0.5b=0.5,唯一真正的根是负数。

sol /. {a->0.5, b->0.5}
{-2.26953,0.634765-0.691601 I,0.634765+0.691601 I}
于 2013-04-18T19:49:31.190 回答
0
sol = z /. Solve[z == a z^3 + b z^2 + a + b, z];
zz[a0_ /; NumericQ[a0], b0_ /; NumericQ[b0]] := 
        Min[Select[ sol /. {a -> a0, b -> b0} , 
                 Element[#, Reals] && # > 0 & ]]

当没有解决方案时,这将返回 -infinty。正如 sirintinga 指出的那样,您的示例集成限制无效..

RegionPlot[NumericQ[zz[a, b] ] , {a, -1, .5}, {b, -.5, 1}]

在此处输入图像描述

但如果你有一个有效的区域,你可以进行数值积分..

NIntegrate[zz[a, b], {a, -.5, -.2}, {b, .8, .9}]  ->> 0.0370076

编辑 - -

上面有一个错误 Select in Reals 丢弃了具有无穷小复杂部分的真实解决方案..修复为:..

zz[a0_ /; NumericQ[a0], b0_ /; NumericQ[b0]] := 
        Min[Select[ Chop[ sol /. {a -> a0, b -> b0} ], 
                 Element[#, Reals] && # > 0 & ]]

Edit2,如果您觉得 Chop 不满意,这是一种更简洁的方法。

zz[a0_ /; NumericQ[a0], b0_ /; NumericQ[b0]] := 
     Module[{z, a, b}, 
          Min[z /. Solve[ 
             Reduce[(z > 0 && z == a z^3 + b z^2 + a + b /.
                  { a -> a0, b -> b0}), {z}, Reals]]]]
RegionPlot[NumericQ[zz[a, b] ] , {a, -2, 2}, {b, -2, 2}]

在此处输入图像描述

NIntegrate[zz[a, b], {a, 0, .5}, {b, 0, .5 - a}]  -> 0.0491321
于 2013-04-18T21:50:08.770 回答