求一个函数满足所需条件的变量取值范围
mathematica吧
全部回复
仅看楼主
level 3
zzzzzss1919 楼主
大家好!请教一个问题。
我定义一个复数函数f[x,y]如下:
f[x_, y_] = 1 - 1/2 x^2 Sin[y]^2 + I*(-x*Sin[y] + 1/6 x^3 Sin[y]^3);
我想求对所有的y,满足复函数绝对值小于等于1条件的x的取值范围,使用下面的函数:
Resolve[ForAll[y, Abs[f[x, y]] <= 1], Reals]
报错如下:
好像是复数i的问题,于是我把函数实部和虚部分开定义:
ref[x_, y_] = 1 - 1/2 x^2 Sin[y]^2;
imf[x_, y_] = -x*Sin[y] + 1/6 x^3 Sin[y]^3;
再重新求解:
Resolve[ForAll[y, (ref[x, y])^2 + (imf[x, y])^2 <= 1], Reals]
结果如下:
并没有给出我需要的x取值范围。我的问题如下:
(1)为什么直接对复函数用Abs[]会报错?
(2)怎么正确求解这个问题?
2021年01月31日 15点01分 1
level 9
可以看看吧主发的贴《为什么b=a; f[a_]:=b; f[2]不输出2?——说说显式存在的重要性》,搜一下就可以看到。
看了以后你会明白为什么直接对复函数用Abs[]会报错。
解决方法很简单
先把i去掉,如同你的分开操作
最后结果:当然是直接算算不出来。
我分别用了Reduce,Solve,NSolve以及去掉Reals等方法依然不行。大概率直接用软件解决不了这个问题(或者我求解的时间太短?)
建议手算[阴险]
2021年02月01日 04点02分 2
多谢大佬了!我给的例子是一个简化版本,实际上我要求的复函数很复杂,不可能手算,还是手动复制吧[勉强]
2021年02月02日 02点02分
@zzzzzss1919 如果很复杂的话可以试一试启发式算法,将你的不等式转化为优化问题或者穷举来解决,比如遗传算法,退火算法等。当然这些算法只能帮助你找到解,找不到全部的解。
2021年02月02日 03点02分
可以啊,能意识到这和显示存在有关。不过这里其实不用手动分实虚部,直接ComplexExpand就行了。当然这对解决这个问题没啥帮助。
2021年02月06日 07点02分
还有对于顶楼的问题只消在 Reduce[ComplexExpand@Abs[f[x, y]] <= 1, x, Reals] 的基础上引入一点点人工分析就能知道正确答案是 -Sqrt[3]<=x<=Sqrt[3]
2021年02月06日 07点02分
1