图形用户定义的功能

时间:2016-09-09 19:18:00

标签: matlab octave

我正在尝试绘制此自定义函数,但我无法找到。它甚至可能吗?所有示例都是关于已知函数(如sin或exp(x))。

我收到以下错误:

error: myfun: A(I,J,...) = X: dimensions mismatch
error: called from
    myfun at line 28 column 16
    grafica1 at line 54 column 2
>>

代码:

function ph = myfun(gamma)
...

  for i = 1:N
    ....
        A(i,i) = alfa*gamma+(gamma+1)*i+p*(N-i);
      elseif j == i-1
        A(i,j) = -i*(i-1);
      elseif j == i+1
        A(i,j) = -p*(N-i)*(i-1)*(i+1)/i;
    ...
    b(i) = gamma * i;
  end

  v = A\b;
  for i = 1:N
    ph = ph + nchoosek(N,i)*p^i*v(i)/((1+p)^N);
  end

endfunction

呼叫:

y=myfun(gamma);
plot(gamma,y)

1 个答案:

答案 0 :(得分:1)

您的功能问题在于它没有考虑到矢量化。具体来说,当输入gamma是行向量时,alfa*gamma+(gamma+1)*i+p*(N-i);也必须是向量。当然,如果将其值赋给A(i, j)这是一个标量,它将会失败。

我认为此时您最好的选择是一次计算一个y值。这需要对现有代码库进行最少量的更改。

y = zeros(size(gamma))
for i = 1:length(gamma)
  y(i) = myfun(gamma(i));       
end
plot(gamma, y);