gpt4 book ai didi

wolfram-mathematica - 关于绘图过程——关于 "A problem in Mathematica 8 with function declaration"的另一个问题

转载 作者:行者123 更新时间:2023-12-04 17:04:33 26 4
gpt4 key购买 nike

相关 A problem in Mathematica 8 with function declaration

Clear["Global`*"]

model = 4/Sqrt[3] - a1/(x + b1) - a2/(x + b2)^2 - a3/(x + b3)^4;
fit = {a1 -> 0.27, a2 -> 0.335, a3 -> -0.347, b1 -> 4.29, b2 -> 0.435,
b3 -> 0.712};

functionB1[x_] = model /. fit;
functionB2[x_] := model /. fit;
Trace 可以揭示 functionB1 和 functionB2 之间的评估差异。 mma中的命令,如下:
functionB1[Sqrt[0.2]] // Trace
functionB2[Sqrt[0.2]] // Trace

我对函数 B1 没有任何疑问。 令我困惑的是因为 functionB2[Sqrt[0.2]]甚至不给出数值结果,而是给出 x 4/Sqrt[3] - 0.335/(0.435 + x)^2 + 0.347/(0.712 + x)^4 - 0.27/(
4.29 + x)
的函数,然后它的情节如何 Plot[functionB2[Sqrt[x]], {x, 0, 1}]有可能吗?

我的意思是当你运行 Plot[functionB2[Sqrt[x]], {x, 0, 1}] 时,在 mma 内部发生的是:

x 接受一个数字,例如 0.2,然后最终将 0.2 传递给 functionB2,但 functionB2 给出的是一个函数,而不是一个数字。那么下图是如何生成的呢?

enter image description here

它的跟踪结果 ( Plot[functionB2[Sqrt[x]], {x, 0, 1}] // Trace) 似乎非常不可读。我想知道functionB2的清晰绘图过程。任何人都可以显示它吗?

谢谢~ :)

最佳答案

SetDelayed充当范围构造。必要时对参数进行本地化。任何显式匹配参数的变量都绑定(bind)在此范围内,其他变量则没有。

In[78]:= a[x_] := x^2 + b
b = x^4;

(* the first x^2 is explicitly present and bound to the argument.
The x in x^4 present via b is not bound *)

In[80]:= a[x]

Out[80]= x^2 + x^4 (* this is what you would expect *)

In[81]:= a[y]

Out[81]= x^4 + y^2 (* surprise *)

In[82]:= a[1]

Out[82]= 1 + x^4 (* surprise *)

所以,你可以做的是以下两件事之一:
  • 使用Evaluate : functionB2[x_] := Evaluate[model /. fit];
  • 依赖model在 x 上明确:

    在[68]:= 模型2[x_] =
    4/Sqrt[3] - a1/(x + b1) - a2/(x + b2)^2 - a3/(x + b3)^4;

    In[69]:= functionB3[x_] := model2[x]/.合身;

    In[85]:= 函数 B3[Sqrt[0.2]]

    输出[85]= 2.01415

  • 编辑 因为问题更新
    由于您对 functionB2 的定义,任何参数值都会产生相同的结果,如上所述:
    In[93]:= functionB2[1]

    Out[93]= 4/Sqrt[3] - 0.335/(0.435 + x)^2 + 0.347/(0.712 +
    x)^4 - 0.27/(4.29 + x)

    In[94]:= functionB2["Even a string yields the same ouput"]

    Out[94]= 4/Sqrt[3] - 0.335/(0.435 + x)^2 + 0.347/(0.712 +
    x)^4 - 0.27/(4.29 + x)

    然而,这个表达式包含 x,因此如果我们为 x 提供一个数值,它可以得到一个数值:
    In[95]:= functionB2["Even a string yields the same ouput"] /. x -> 1

    Out[95]= 2.13607

    嗯,这基本上是什么 Plot也是。这就是为什么你仍然得到一个情节。

    关于wolfram-mathematica - 关于绘图过程——关于 "A problem in Mathematica 8 with function declaration"的另一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058281/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com