早教吧作业答案频道 -->其他-->
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怎么画...的网友还看了以下:
有若干个数,a1、a2、a3、…an,若a1=-1/2,从第二个数起,每个数都等于“1与它前的那个 2020-05-16 …
因式分解a3(b-c)+b3(c-a)+c3(a-b)如果用待定系数法解,得a3(b-c)+b3( 2020-05-16 …
若a1>a2>a3,则满足1/(a1-a2)+1/(a2-a3)>=M/(a1-a3)的M的取值范 2020-06-06 …
已知等差数列an的各项互不相等,前两项和为10,设向量m=(a1,a3)n=(a3,a7)且m平行 2020-06-15 …
数学找规律问题(困扰我多年)A1A2A3A4A5A6……AnA1=A1A2=A1+MA3=A2+M 2020-06-24 …
已知正实数a.b满足a2+b2=1,且a3+b3+1=m(a+b+1)3,求m的取值范围.(a3表 2020-07-09 …
1.已知{1,2}含于A真包含于{1,2,3,4,5}的集合个数是A4B6C7D92已知A={1, 2020-07-09 …
小学数学题疑难1.如果下面两题的结果都为非零自然数,求R.S最小值R÷5×1/36/7×S÷0.6 2020-07-26 …
1.X2-1/X2-5X+6="M"+(a/x-2)+(b/x-3)其中a,b是常数,M是整式,则 2020-08-03 …
excel中公示的问题.=IF(AND(COUNTIF(Sheet1!$A$2:$A$232,LEF 2020-11-01 …