早教吧作业答案频道 -->其他-->
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怎么画...的网友还看了以下:
Matlab程序:错误在哪里建立函数文件fun5.mfunction dy=fun5(t,y)dy 2020-05-16 …
CAXA公式曲线 在CAXA三维图板里面.用此公式 xt=10*sin(t) yt=10* 2020-06-27 …
二元一次方程组求解!用加减法解下面方程,4x+5y+2=07x+11-1=05x+2y=253x+ 2020-07-19 …
某校数学课外小组利用数轴为学校门口的一条马路设计植树方案如下:第K棵树种植在Xk处,其中X1=1, 2020-07-30 …
二次型的化标准型的问题!设XTAX=x1^2+4*x2^2+x3^2+2aX1X2+2bX1X3+ 2020-07-31 …
设有向量组A:a1=(a,2,10)T,a2=(-2,1,5)T,a3=(-1,1,4)T以及向量 2020-08-02 …
假设某国家在20年期间的年均通货膨胀率为5%物价p(单位:元)与时间t(单位:年)有如下函数关系:p 2020-12-05 …
1、cosxdx=dsinx,所以设t=sinx,则原式=∫t^4dt=1/5*t^5+C=1/5* 2020-12-12 …
7分之8a,8a分之7,a的2次方,x的2次方+3x-2分之1,y的二次方+3y-y分之3,5s-1 2020-12-17 …
用mathematica求解markowitz模型就比如说已知5支股票历时12个月每个月的月回报率R 2021-01-19 …