我编写了两个mfile来求解两个方程的根 t 和 p 。方程中使用了一个灵活的参数 n ,它从1变为100。现在,代码只能将100次而不是1到100的根作为 n = 100来求解。 。如何纠正?
文件1:
function q=CSMA(x)
m=5;
W=32;
p=x(1);
t=x(2);
for n = 1:100;
q(1)=(1-2*p)*(1+W)+p*W*(1-(2*p)^m)-2*(1-2*p)/t;
q(2)=(1-(1-t)^(n-1))-p;
end
end
文件2:
N = 100;
the_roots = zeros(1, N);
for n = 1:N
y = fsolve('CSMA', [0.1, 0.1], optimset('Display', 'off'));
p = y(1);
t = y(2);
the_roots(n)= t;
end
figure;
plot(the_roots, 'b-');
答案 0 :(得分:2)
您需要将变量n
作为参数传递给函数。例如,您可以像这样更改CSMA
函数:
function q=CSMA(x,n)
m=5;
W=32;
p=x(1);
t=x(2);
q(1)=(1-2*p)*(1+W)+p*W*(1-(2*p)^m)-2*(1-2*p)/t;
q(2)=(1-(1-t)^(n-1))-p;
end
然后使用函数句柄进行优化,如下所示:
N = 100;
the_roots = zeros(1, N);
for n = 1:N
f = @(x) CSMA(x,n);
y = fsolve(f, [0.1, 0.1], optimset('Display', 'off'));
p = y(1);
t = y(2);
the_roots(n)= t;
end
figure;
plot(the_roots, 'b-');
绘制的输出如下所示: