我尝试使用(x-1)/(y+2)^1.8
方法在八度音程中绘制等式surf()
。但图表是另一回事。
这是我的代码:
p = linspace(1,50, 100);
t = linspace(1,48,100);
ans = zeros(length(p), length(t));
ans = compute_z(p, t, ans);
figure;
surf(p, t, ans');
尝试使用辅助函数z = (x-1)/(y+2)^1.8
compute_z
function [ans] = compute_z(ans, p, t)
for i = 1:length(p)
for j = 1:length(t)
ans(i,j) = (p(i) - 1) / (t(j)+2)^1.8;
end
end
我试图生成this graph.
答案 0 :(得分:4)
您无需compute_z-method
就可以meshgrid
进行矢量化。
p = linspace(1,50, 100);
t = linspace(1,48,100);
[P, T] = meshgrid(p,t); Z = (P-1) ./ (T+2).^1.8;
figure;
surf(P, T, Z);
(在Matlab中测试,但也应该在Octave中工作)
答案 1 :(得分:0)
您的问题是您按照此顺序将compute_z
输入定义为ans
,p
和t
。但是,您可以按此顺序使用p
,t
和ans
来调用该函数。你看到了问题吗?
ans
不是函数的输入,只是输出,因此无需将其列为输入。此外,不要调用变量ans
,它是MATLAB在未指定输出变量名时使用的默认变量名,因此可能会被覆盖。
这是我的建议:
p = linspace(1,50, 100);
t = linspace(1,48,100);
z = zeros(length(p), length(t));
z = compute_z(p, t);
figure;
surf(p, t, z');
compute_z
定义如下:
function z = compute_z(p, t)
for i = 1:length(p)
for j = 1:length(t)
z(i,j) = (p(i) - 1) / (t(j)+2)^1.8;
end
end