错误:“差阶N必须是正整数标量”

150次观看(过去30天)
"阿里 2021年9月18日
我写了一个剧本:
(x, y) = meshgrid (0:1:500 100:1:100);
k =(2 *π)/ 30;
Q = 25 * k;
l =(2 *π)/ 30;
f = 2 * (cos (x (k *) + Q)。* cos (l * y));
xlable = (0 < x < 500公里的);
ylable = (“-100公里< y < 100公里”);
contourf (x, y, f, [1, 0, 1]);
colorbar
我想计算df/dx并用等值线绘制,我添加了:
G = diff(f,x,1)
但是这个错误会在运行整个脚本后发生:
错误:“差阶N必须是正整数标量”
我该怎么办?

答案(2)

沃尔特·罗伯森
沃尔特·罗伯森 2021年9月18日
有两个不同的名为diff()的函数。
符号差分是微积分微分。它需要一个符号表达式(sym)或符号函数(symfun)作为它的第一个参数,第二个参数是微分变量,可选的第三个参数是微分次数。Diff (f,x,1)对于该符号函数来说并不少见(尽管Diff (f,x)可能更常见)。
数值差异是连续的数值差异。它需要一个数值表达式作为第一个参数,第二个可选参数是取差的次数,第三个可选参数是要操作的维度。Diff([3 8 4])为[8- 3,4 -8]->[5,-4]。它可以 潜在的 有语法diff(f,x,1),但如果是这样,那么x必须是[]或一个正整数,给出取差的次数,1将是运算的维度。
我们不建议使用diff()来估计导数:大多数情况下使用gradient()会更好
[gx, gy] = gradient(f, x, y);
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年9月19日
Diffx = diff(f,[],2);
diff = diff(f,[],1);
Gx = diffx./diff(x(1,:));
Gy = diff ./diff(y(:,1));
注意,gx和gy比f是小:数值diff总是缩短数组的方向的差。梯度() 缩短数组。
还要注意,使用diff(f)/diff(x)不能产生梯度的最佳估计值是有数学原因的:gradient()使用的公式更好。

登录评论。


图像分析
图像分析 2021年9月18日
如果你查看diff()的文档,你会发现第二个参数不是一个矢量变量,而是一个你想要减去的距离(在索引/元素中)的数字。通常是1。第三个指标是方向。因为看起来x是第二个下标,你想让第三个参数是2,这意味着跨列。
G = diff(f,1,2)
1评论
"阿里 2021年9月18日
我要画出df / dx (f(x,y)关于x的导数)为此,我该怎么做呢?

登录评论。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!