公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
1.5k 浏览
Clear["Global`*"]
W[x_] := x^(-4) + 2 x^2 - 3 + (x^(-4) - 1)^2
f[x_, y_, z_] := 
 1/2 ((1/((1 + z)^3*x^3) - x^(-3) + 1)^(-1/3) - 1)*x^3*y^2
g[x_, t_] := -1/3 t (x^3 - 1)
\[Delta] = 0.01;
p1 = 2;
ContourPlot[
 f[x, y, \[Delta]]/\[Delta] + g[x, p1] + 
  Integrate[\[Lambda]^2*D[W[t], t]/(1 - t^3)/\[Delta], {\[Lambda], 1, 
    x}, {t, ((\[Delta] + 1)^3*(\[Lambda]^3 - 1) + 1)^(1/
       3), \[Lambda]}]==0, {x, 1, 1.2}, {y, -0.5, 0.5}]

符号积分困难,运算很慢,怎么才能画出这个隐函数?

分类:绘图 | 用户: keanhy (361 分)
修改于 用户:keanhy
Integrate换成NIntegrate
取特定的等高线时为什么有错误提示?(问题中的程序我修改了隐函数等于零)

1个回答

+1 投票
 
已采纳

首先可以直接把Integrate换成NIntegrate,这样就能画图了,只不过速度会比较慢。

其次这个积分是可以求出解析表达式的,虽然内置的Integrate不行,但用Rubi可以。Rubi下载地址:http://www.apmaths.uwo.ca/~arich/index.html

积分结果

ContourPlot[
 f[x, y, \[Delta]]/\[Delta] + g[x, p1] - 109090300/3090903 - 20/x^5 - 
  80/x^2 + 100/x - 200 x^2 + 100/3 (1 + 2 x)^2 + 200000000000000000/(
  1030301 (-30301 + 1030301 x^3)^(5/3)) + 800000000000/(
  1030301 (-30301 + 1030301 x^3)^(2/3)) - 10000000000/(
  1030301 (-30301 + 1030301 x^3)^(1/3)) - (
  4000000 (-30301 + 1030301 x^3)^(1/3))/3090903 + (
  20000 (-30301 + 1030301 x^3)^(2/3))/3090903 + (
  1600 ArcTan[1/Sqrt[3] + (2 x)/Sqrt[3]])/(3 Sqrt[3]) - (
  1600 x^3 ArcTan[1/Sqrt[3] + (2 x)/Sqrt[3]])/(3 Sqrt[3]) - (
  1600 ArcTan[(50 + (-30301 + 1030301 x^3)^(1/3))/(50 Sqrt[3])])/(
  3 Sqrt[3]) + (
  1600 x^3 ArcTan[(50 + (-30301 + 1030301 x^3)^(1/3))/(50 Sqrt[3])])/(
  3 Sqrt[3]), {x, 1, 1.2}, {y, -0.5, 0.5}]

和数值积分画出来的图是一样的,速度快多了

附Rubi中的代码

W[x_] := x^(-4) + 2 x^2 - 3 + (x^(-4) - 1)^2
f[x_, y_, z_] := 
 1/2 ((1/((1 + z)^3*x^3) - x^(-3) + 1)^(-1/3) - 1)*x^3*y^2
g[x_, t_] := -1/3 t (x^3 - 1)
\[Delta] = 1/100;
p1 = 2;
Int[\[Lambda]^2*D[W[t], t]/(1 - t^3)/\[Delta], t];
(% /. t -> \[Lambda]) - (% /. 
    t -> ((\[Delta] + 1)^3*(\[Lambda]^3 - 1) + 1)^(1/3));
Int[%, \[Lambda]];
(% /. \[Lambda] -> x) - (% /. \[Lambda] -> 1) // Simplify

用户: 无影东瓜 (1.2k 分)
采纳于 用户:keanhy
Rubi怎么用?直接把函数粘贴上去就行吗,但是我没得出结果?能截个图展示一下吗?
是打开Rubi4.11.nb,然后把代码粘进去?还是MMA窗口就行
打开Rubi4.11.nb,运行所有初始化单元中的代码,把ShowSteps设成False,然后运行这段代码就行
可以了,谢谢!
还有一个问题,Integrate换成NIntegrate后可以正确画出图像的,但是我只想取等式为零的一个图像,结果却出现警告信息,请问你知道怎么回事吗?
警告信息是因为ContourPlot画等式时会先尝试进行符号运算,而NIntegrate的参数如果有符号就会报错。这个报错其实不影响,直接无视或者加个Quiet就行。实在想解决的话就定义一个myfun[x_?NumericQ, y_?NumericQ]:=你的式子,然后ContourPlot[myfun[x,y],.....],这样myfun只在参数时数值时进行计算,就不会出现NIntegrate的报错了
谢谢你的耐心回答O(∩_∩)O!
...