如何修复程序

How to fix the procedure

请帮帮我! 有程序 operation[f_]。 它可以正常工作并绘制 functions:Cos,Sin。但是,不幸的是,它不适用于 E^x 和 Log[E,x] 并输出错误,可能是因为输入了不正确的函数名称或其他原因;((有什么问题?

spxsin = {-1, -0.35, 0.3, 0.95, 1.6, 2.375, 3.15, 3.925, 4.7, 5.025, 
5.35, 5.675, 6};
spxcos = {-1, -0.75, -0.5, -0.25, 0, 0.775, 1.55, 2.325, 3.1, 3.825, 
4.55, 5.275, 6};
spxlny = {-1, 0.75, 2.5, 4.25, 6};
spxey = {-1, 0.75, 2.5, 4.25, 6};
operation[f_] := Block[{data},
data = Table[{x, f[x]}, {x, -1, 6, 0.1}];
Graphics[{Thick, Blue, Line[data],
Green, Table[Point[{spx[­[i]], f[spx[­[i]]]}], {i, 1, Length[spx]}],
Pink, Opacity[.7], 
Table[Rectangle[{spx[­[i]], f[spx[­[i]]]}, {spx[­[i + 1]], 
f[spx[­[i + 1]]]}], {i, 1, Length[spx] - 1}]
}, Axes -> True]]

Which[ f == Sin, spx := spxsin, f == Cos, spx := spxcos, f == E^x , 
spx := spxlny, f == Log, spx := spxey]

operation[Sin]
operation[Cos]
operation[E^x]
operation[Log]

欧拉的E需要输入Esc ee Esc。 我看你输入的是标准的E.

另请注意,Exp 是 Mathematica 中的指数函数。

编辑现已测试:您可以将纯函数传递给您的 operation,因此不要:operation[E^x] 尝试

 operation[E^# &]

或者例如,如果您想要 base 2 日志,它将是

 operation[Log[2,#]&]

其他一些需要指出的事情:Log 失败仅仅是因为您的 x table 范围是负数。

此外,您的 Which 声明没有任何作用。在你的函数之外,f 没有定义,所以 none 的条件是 True。将 Which 移动到函数内部,这有效:

 spxsin = {-1, -0.35, 0.3, 0.95, 1.6, 2.375, 3.15, 3.925, 4.7, 5.025, 
    5.35, 5.675, 6};
 spxcos = {-1, -0.75, -0.5, -0.25, 0, 0.775, 1.55, 2.325, 3.1, 3.825, 
   4.55, 5.275, 6};
 spxlny = {-1, 0.75, 2.5, 4.25, 6};
 spxey = {-1, 0.75, 2.5, 4.25, 6};
 operation[f_] := 
    Block[{data}, data = Table[{x, f[x]}, {x, -1, 6, 0.1}];
    Clear[spx];
    Which[
      TrueQ[f == Sin], spx := spxsin,
      TrueQ[f == Cos], spx := spxcos ,
      TrueQ[f == (E^# &)], spx := spxey ];
    Graphics[{Thick, Blue, Line[data], Green,
     Table[{PointSize[.1], Point[{spx[[i]], f[spx[[i]]]}]}, {i, 1, Length[spx]}],
     Pink, Opacity[.7], 
     Table[Rectangle[{spx[[i]], f[spx[[i]]]}, {spx[[i + 1]], 
       f[spx[[i + 1]]]}], {i, 1, Length[spx] - 1}]}, Axes -> True, 
          AspectRatio -> 1/GoldenRatio]]

注意每个包含在 TrueQ 中的测试,以确保它是 TrueFalse(测试 Sin==Cos 对所有值都不是假的,所以也是不是 return False )

 operation[Sin]
 operation[Cos]
 operation[E^# &]

现在,如果您希望 Exp 也能正常工作,您需要将该表单明确地放入 Which 语句中。 ( f==(E^#&) || f==Exp )