请教,关于MMA画不出图问题
mathematica吧
全部回复
仅看楼主
level 3
墨夕澜
楼主
我有一个比较复杂的函数想求极值,所以想先画图看看函数的大概,但是竟然画不出图来??想问问是我哪里弄错了还是真的这个函数太复杂了所以画不了?
截图和代码放楼下了
2020年06月24日 14点06分
1
level 3
墨夕澜
楼主
2020年06月24日 14点06分
2
墨夕澜
其中ProductLog是朗伯函数
2020年06月24日 14点06分
level 3
墨夕澜
楼主
m1 = 3792;
m2 = 2788;
c2 = 200;
m3 = 2312;
c1 = 500;
Q1 = 6000;
f[p1_] = E^
m3 Q1 (E^(
2 p1) (-2 - c1 + p1) (1 +
ProductLog[(E^m1 + E^m2)/(
E^(1 + c2) + E^(1 + c2 + m3 - p1))])^4 -
E^(2 m3) ProductLog[(E^m1 + E^m2)/(
E^(1 + c2) + E^(1 + c2 + m3 - p1))] (2 - c1 + p1 +
2 ProductLog[(E^m1 + E^m2)/(
E^(1 + c2) + E^(1 + c2 + m3 - p1))] (2 + c1 - p1 +
ProductLog[(E^m1 + E^m2)/(
E^(1 + c2) + E^(1 + c2 + m3 - p1))])) -
E^(m3 + p1) (1 +
ProductLog[(E^m1 + E^m2)/(
E^(1 + c2) + E^(1 + c2 + m3 - p1))])^2 (2 - c1 + p1 +
ProductLog[(E^m1 + E^m2)/(
E^(1 + c2) + E^(1 + c2 + m3 - p1))] (6 + c1 -
p1 + (2 - c1 + p1) ProductLog[(E^m1 + E^m2)/(
E^(1 + c2) + E^(1 + c2 + m3 - p1))])))
2020年06月24日 14点06分
3
墨夕澜
这是代码,麻烦路过的帮忙看看呀,新手太菜了
2020年06月24日 14点06分
xzcyr
这次看在你大部分都贴了的份上就算了,下次再不贴全直接封。
2020年07月04日 02点07分
level 7
三炮快跑☞
首先f[i]算出来的就不是个数字,我不确定画图时系统能不能把它当成数字。然后我拿N[]把它化成数字了但是数字太大了,我试着画点{f[i], i}, i在{0,100} 间。结果显示f[0]至f[100]的值已经远超机器最大范围了范围了
2020年06月24日 17点06分
4
墨夕澜
好的,谢谢你,我觉得f[i]算出来应该是数值吧,因为MMA是可以直接计算ProductLog函数的数值解的,但是可能是我这个数据不合理,计算结果太大了所以画不了图,其实我就是想证明这个函数的最大值小于0,请问不画图有没有别的方法呢?
2020年06月27日 01点06分
三炮快跑☞
@墨夕澜
这就不清楚了,因为我拿Head测出来的fi的type不是数字啊。。不画图的话有FindMaxium之类的函数来找极大值
2020年06月27日 02点06分
墨夕澜
@三炮快跑☞
好的,不过FindMaximum找到的是局部极值,我想知道全局的应该是用Maximize?
2020年07月02日 01点07分
三炮快跑☞
@墨夕澜
嗯,这里应该是Maximize。我没仔细看。
2020年07月02日 12点07分
吧务
level 15
xzcyr
Plot系函数确实画不了超出机器精度数表示范围的数,关于这个可以参考
mathematica.stackexchange.com/q/42093/1871
一个规避思路是,转而绘制对数的虚部:
Plot[f[p1] // Log // Im, {p1, -100, 100}]
可以看到虚部一直不为零。
如果知道p1的大致范围的话,这个就足以判断表达式是否小于零了。
2020年07月04日 02点07分
5
墨夕澜
明白了,感谢
2020年07月11日 07点07分
1