早教吧作业答案频道 -->其他-->
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怎么画...的网友还看了以下:
已知函数fx=ax+b/(x+1)是定义在r说的奇函数,且f1/2=2/5(1)求函数解析式,(2 2020-04-06 …
已知关于x的函数y=(1-t)x-t2x(t∈R)的定义域为D,存在区间[a,b]⊆D,f(x)的 2020-05-16 …
一个非常脑残的问题 高二数学 y=X²+5/根号(X²+4)的最小值y=(x²+5)/√(x²+5 2020-05-16 …
高等数学设f(x)=x的三次方+(1+t)x的平方+2x+2u,g(x)=x的三次方+tx+u的最 2020-08-01 …
设f(x)=x^3+(1+t)x^2+2x+2u,g(x)=x^3+tx+u的最大公因式是二次式多 2020-08-01 …
已知齐次线性微分方程的基本解组x1=t,x2=e∧t求非齐次线性方程组x''+t/(1-t)x1/ 2020-08-02 …
多项式辗转相除法求解设f(x)=x^3+(1+t)x^2+2x+2u,g(x)=x^3+tx+u的 2020-08-03 …
y=1/x当x!=0时;y=10^20当x=0时.不能正确表达上面关系的是y=1.0/x;if(!x 2020-10-30 …
若a+b+c=1,求√(3a+1)+√(3b+1)+√(3c+1)的最大值设x=√(3a+1),y= 2020-10-31 …
1-t/1+t=x用t表示x的式子 2020-11-07 …