我是Mathematica的新手,我正在尝试解决以下问题。
Z = aZ^3 + bZ^2 + a + b
形式的三次方程式。我想要做的第一件事是获得一个函数,通过分析方法解决Z并选择最小的正根,作为a和b的函数。我认为为了获得我可以使用的根目录:
Z = Solve[z == az^3 + bz^2 + a + b, z];
我似乎并没有像我所期望的那样使用一般的三次方程解公式。
Z
的最小正根与a
和b
(再次,最好是分析)整合为0 {1 a
和{{1} } {1}代表a
。我试过
b
并且似乎没有给出任何公式或数值,但只返回一个积分。 (请注意,我甚至不确定如何选择最小的正根,但我正在玩Mathematica以试图解决它。)
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
a
或b
和z
之间的空格非常重要。你可以通过以下方式获得根源:
sol = z /. Solve[z == a z^3 + b z^2 + a + b, z]
但是,你确定这个表达式有你想象的解决方案吗?对于a=0.5
和b=0.5
,唯一真正的根是负面的。
sol /. {a->0.5, b->0.5}
{-2.26953,0.634765-0.691601 I,0.634765+0.691601 I}
答案 1 :(得分: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
编辑---
上面有一个错误在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