图形用户自定义函数
Graph user-defined function
我正在尝试绘制此自定义函数的图形,但找不到方法。有可能吗?所有示例都是关于已知函数(如 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)
你的函数的问题是它在设计时没有考虑到矢量化。具体来说,当输入 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);
我正在尝试绘制此自定义函数的图形,但找不到方法。有可能吗?所有示例都是关于已知函数(如 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)
你的函数的问题是它在设计时没有考虑到矢量化。具体来说,当输入 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);