如何绘制(x-1)/(y + 2)^ 1.8?

时间:2015-10-19 08:31:15

标签: matlab octave

我尝试使用(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.

2 个答案:

答案 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输入定义为anspt。但是,您可以按此顺序使用ptans来调用该函数。你看到了问题吗?

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