早教吧作业答案频道 -->其他-->
Mathematica怎么画不出d[3.3]的图?程序如下:Table[{M = Solve[(x - 8) (x - 5) (x - 6) == 0,x]; a1 = M[[1,1,2]]; a2 = M[[2,1,2]]; a3 = M[[3,1,2]]; {If[a2 < a3,{t = a2; a2 = a3; a3 = t}];If[a1 < a2,{t = a1; a1 = a2; a2 = t}];If[a2 < a3,{t = a2
题目详情
Mathematica怎么画不出d[3.3]的图?
程序如下:
Table[{M = Solve[(x - 8) (x - 5) (x - 6) == 0,x]; a1 = M[[1,1,2]];
a2 = M[[2,1,2]];
a3 = M[[3,1,2]]; {If[a2 < a3,{t = a2; a2 = a3; a3 = t}];
If[a1 < a2,{t = a1; a1 = a2; a2 = t}];
If[a2 < a3,{t = a2; a2 = a3; a3 = t}]};
If[(a1 > 0) && (a2 > 0) && (a3 > 0),{s1 = Sqrt[a1]; s2 = Sqrt[a2];
s3 = Sqrt[a3];}];
d[i] = ListPlot[{{2 i,a1},{2 i,a2},{2 i,a3}}]}
,{i,1,4,0.1}];
然后输入点画图,都正常.但是当输入d[3.3]的时候,不能给出图形?
或者用一个更简单的命令:
Table[d[i] = ListPlot[{{i,1},{i,2}}],{i,2,4,0.1}];
可以画出其他的图,但是就是画不出d[3.3].
这个为什么?
程序如下:
Table[{M = Solve[(x - 8) (x - 5) (x - 6) == 0,x]; a1 = M[[1,1,2]];
a2 = M[[2,1,2]];
a3 = M[[3,1,2]]; {If[a2 < a3,{t = a2; a2 = a3; a3 = t}];
If[a1 < a2,{t = a1; a1 = a2; a2 = t}];
If[a2 < a3,{t = a2; a2 = a3; a3 = t}]};
If[(a1 > 0) && (a2 > 0) && (a3 > 0),{s1 = Sqrt[a1]; s2 = Sqrt[a2];
s3 = Sqrt[a3];}];
d[i] = ListPlot[{{2 i,a1},{2 i,a2},{2 i,a3}}]}
,{i,1,4,0.1}];
然后输入点画图,都正常.但是当输入d[3.3]的时候,不能给出图形?
或者用一个更简单的命令:
Table[d[i] = ListPlot[{{i,1},{i,2}}],{i,2,4,0.1}];
可以画出其他的图,但是就是画不出d[3.3].
这个为什么?
▼优质解答
答案和解析
嗯,同学恭喜你,撞上了一个比较高端的问题.这和浮点数的性质有关系.你可以试试这个:
Table[i, {i, 2, 4, 0.1}] // FullForm
(*
\!\(\*
TagBox[
StyleBox[
RowBox[{"List", "[",
RowBox[{"2.`", ",", "2.1`", ",", "2.2`", ",", "2.3`", ",", "2.4`",
",", "2.5`", ",", "2.6`", ",", "2.7`", ",", "2.8`", ",", "2.9`",
",", "3.`", ",", "3.1`", ",", "3.2`", ",",
"3.3000000000000003`", ",", "3.4`", ",", "3.5`", ",", "3.6`",
",", "3.7`", ",", "3.8000000000000003`", ",", "3.9`", ",",
"4.`"}], "]"}],
ShowSpecialCharacters->False,
ShowStringCharacters->True,
NumberMarks->True],
FullForm]\)
*)
这是为什么呢,简单的说,对于数值运算(因为你使用了小数而非整数或分数之类的准确数),mathematica默认使用精度为MachinePrecision的浮点运算,于是,浮点运算产生了误差.
这种误差在计算中,是普遍存在的.顺便,不同的计算机上,产生的误差还不一样.
要避免这个问题,你可以把0.1改成1/10,然后在索引时使用33/10这样的准确量.
Table[i, {i, 2, 4, 0.1}] // FullForm
(*
\!\(\*
TagBox[
StyleBox[
RowBox[{"List", "[",
RowBox[{"2.`", ",", "2.1`", ",", "2.2`", ",", "2.3`", ",", "2.4`",
",", "2.5`", ",", "2.6`", ",", "2.7`", ",", "2.8`", ",", "2.9`",
",", "3.`", ",", "3.1`", ",", "3.2`", ",",
"3.3000000000000003`", ",", "3.4`", ",", "3.5`", ",", "3.6`",
",", "3.7`", ",", "3.8000000000000003`", ",", "3.9`", ",",
"4.`"}], "]"}],
ShowSpecialCharacters->False,
ShowStringCharacters->True,
NumberMarks->True],
FullForm]\)
*)
这是为什么呢,简单的说,对于数值运算(因为你使用了小数而非整数或分数之类的准确数),mathematica默认使用精度为MachinePrecision的浮点运算,于是,浮点运算产生了误差.
这种误差在计算中,是普遍存在的.顺便,不同的计算机上,产生的误差还不一样.
要避免这个问题,你可以把0.1改成1/10,然后在索引时使用33/10这样的准确量.
看了 Mathematica怎么画...的网友还看了以下:
“m>2”是“方程x^2/(m-2) +y^2/(5-m) =1表示的曲线是椭圆”的()?A 充分 2020-05-16 …
在今晚8:00前给我!答对者重重加分!分解因式:(1)x^2+5x(2)-10x^2y-5xy^2 2020-06-03 …
近代化学基础急一1.在用量子数表示核外电子运动状态时,写出下列各组中所缺少的量子数.(1)n=3, 2020-06-04 …
一道代数不等式的题,不等式|(ax-1)∕x|>a的解集为M,且2不属于M,则a的取值范围为?A, 2020-06-05 …
如果关于x的方程(m-2)x2-2(m-1)x+m=0只有一个实数根,那么方程mx2-(m+2)x 2020-07-20 …
运行程序的结果,为什么,#includefunc(inta,intb){staticintm=0, 2020-07-22 …
如果2-(m+1)a+an-3是关于a的二次三项式,那么m、n满足的条件是()A.m=1,n=5B 2020-07-31 …
高中幂函数的题1.函数y=(mx^2+4x+m+2)x^1/2+(mx^2-mx+1)的定义域为R 2020-08-01 …
保险精算题.设m>1,按从大到小的次序排列i,i(m),d,d(m)1、设m>1,按从大到小的次序排 2020-12-05 …
m路B+树是一棵m路平衡索引树,除了根节点之外的节点中关键字最多最少分别为?假设函数U(x)为对小数 2020-12-17 …