【问题标题】:What is f(2) in the following code?以下代码中的 f(2) 是什么?
【发布时间】:2017-04-19 15:20:38
【问题描述】:

代码(用 Octave 编写)是:

x=1:2:5;
y=1:1:3;
z=1:0.1:1.2;
f=[x+y+z,x.^2+z;sin(x.*y.*z),cos(x)];
h=x(2)-x(1);
xFor=x(1:end-1);
dffor=(f(2:end)-f(1:end-1))/h;
f(2) 
dffor

我得到的输出是

Hello World
ans = 0.84147
dffor = -1.07926  2.62926  -2.89423  4.44423  4.77985  -5.54500  13.59500  -12.95817

有些代码我看不懂。 f(2) 评估什么?

我实际上想得到矩阵关于x 的数值导数。我认为这是前向差异的方法。另外,为什么我得到一个[1x11] 矩阵作为dffor 的输出,它应该是数值微分矩阵?

【问题讨论】:

    标签: matlab octave


    【解决方案1】:

    首先,f 是您代码中的二维矩阵 (size [2,6]),我假设您的意思是有一个向量 (size [1,12])。

    dffor 确实是前向差异。并且它有 11 个元素(而不是像 f 那样的 12 个),因为它在每个后续的 f 对之间存在差异:每个元素被使用两次,除了第一个和最后一个:(10*2 + 1 + 1)/2 = 11

    f(2) 只是f 的第二个元素,等于x(2) + y(2) + z(2)

    【讨论】:

    • 实际上,我想在数字上对矩阵进行部分微分。应该写什么代码?
    • 如果您想区分f,请执行dffor=(f(:,2:end)-f(:,1:end-1))./h;。在执行 f(2) 时,您只是在访问矩阵中的 single 元素,在您的情况下,就像在执行 f(2,1) 一样。如果您想访问整行或整列,请执行f(2,:)f(:,2)
    • 好的,知道了,谢谢。通过区分 f 的行,你的意思是整个矩阵,对吧?
    • 它是整个矩阵,只取决于您要区分的维度
    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多