I tried to call a function but it failed
3 次查看(过去 30 天)
显示 更早的评论
When i tried to return a value from the function (rate) to main file it failed and it shows undefined variable R_tow.
%main file
clc
clear all
close all
T=1;
tow_min=0;
tow_max=T;
tow=0.5
while (tow_max-tow_min)>0.02
tow_bar=(tow_max+tow_min)/2;
if crn(tow_bar)==crn(tow_min)
tow_min=tow_bar;
else
tow_max=tow_bar;
end
end
tow0=tow_bar;
disp("tow0="+tow0);
rate(tow0);
("R_tow="+R_tow);
plot(R_tow,tow0);
function R_tow=rate(tow)
PH0=0.1
Pa=10;
Q=20;
y=0.1;
N=3;
yi=[1,3,5];
Pdbar=0.2;
Pi=[3,4,2];
alpha=sqrt((2*y)+1)*qfuncinv(Pdbar);
beta=0
for i =2:N
x=1+((Pi(i)*yi(i))/((1+sum(Pi(i)*yi(3:N)))));
beta=beta+log2(x);
end
fs=100000;
z=1+sum(Pi(2:N).*yi(2:N));
S=(Pa*yi(1))/z;
x1=(1-(qfunc(alpha+(sqrt(tow*fs)*y))))
y1=log2(1+(((tow*Pa/1-tow)-sum(Pi(2:N)))*yi(1))/z)
R_tow=PH0*(1-tow)*x1*y1+beta;
%disp(R_tow)
end
2 个评论
Navid Zolfaghari Moheb
2020-2-28
So change the last four line of your code to:
disp("tow0="+tow0);
R_tow = rate(tow0);
("R_tow="+R_tow);
plot(R_tow,tow0);
you have a function that returns a value and you call that value "R_tow". But this is local only to that function. Now if you want to use it in another function you have to tell that function to get the output from my 'rate' function and call it "R_tow". Having it defined as "R_tow = rate(tow)" in function does not mean that whenever I run rate(tow), I will have an output called R_tow. It means that it has an output but you have ot name it. For example, in your first function, you could have "y=rate(tow)" or "zeta = rate(tow)" or in this case "R_tow=rate(tow)".
采纳的回答
Walter Roberson
2020-2-28
It is fundamental to the idea of functions in all programming languages that the variable names inside the function are internal to the function, that assigning to a variable inside the function does not affect the calling environment unless special arrangements are made.
Your assigning to the R_tow variable that belongs to the function rate() does not affect any variable outside of rate().
In order to get what you want, at the place you have
rate(tow0);
You need instead
R_tow = rate(tow0);
This R_tow is not the same variable as the one inside of rate(). Assignment of results is positional not according to name.
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!