index must be a positive integer or logical.

c1=3.29;
c2=9.90;
c3=0.77;
c4=0.20;
Ln=zeros(1,length(t));
for n=1:1:100;
for t=0:-0.1:-1;
Ln(t)=-(c1+c2*log(n)*log(-t))-(c3+c4*log(n));
semilogx(n,Ln(t));
end
end
I really want t to count negative, what am I supposed to do??

3 个评论

t cannot take negative values as it is acting as index
You're going to define an index that it's not related with t but with the size of t. However I don't understand what you are trying to plot there. Which is the result you are expecting from that code? what do you want to plot on semilogx?
It is an approximate model of flat edge in communication systems where I must have 10 different lines running from n=1 to n=100

请先登录,再进行评论。

 采纳的回答

I'm still not reall clear on what you're looking for, but try this version of Marta's code...
c1=3.29;
c2=9.90;
c3=0.77;
c4=0.20;
t = linspace(0,-1,10); %definition of t vector
n = linspace(1,100);
Ln=zeros(length(t),length(n));
for i=1:length(t)
for j = 1:length(n);
Ln(i,j)= -(c1+c2*log(n(j))*log(-t(i)))-(c3+c4*log(n(j)));
end
semilogx(n,Ln(i,:))
hold on
end

2 个评论

yes I think this method is correct, although the graph is wrong, I have to check why it's wrong, thanks
What's wrong about the graph? If it's because the lines are all blue all you have to do is populate the data first within the for loops and then graph it all at once after the loops instead of plotting a line after each iteration around i.

请先登录,再进行评论。

更多回答(2 个)

dpb
dpb 2014-3-11
Keep the time as associated independent vector of same length as the solution vector but numbered from 1:N instead of trying to use it as an index.
A solution is this:
c1=3.29;
c2=9.90;
c3=0.77;
c4=0.20;
Ln=zeros(1,length(t));
t= 0:-0.1:-1; %definition of t vector
for n=1:1:100;
for i=1:length(t);
Ln(i)= -(c1+c2*log(n)*log(-t(i)))-(c3+c4*log(n));
semilogx(n,Ln(i));
end
end
Take into account semilogx(n,Ln(i)) is plotting a point. is this the right solution?

7 个评论

I wanted to plot for each n all values of t, i.e. when n=1, t=-0.1,-0.2,-0.3 till -1.0, couldn't achieve it with this solution :(
plot for each n all values of t...
t= 0:-0.1:-1; %definition of t vector
for n=1:100
LN=log(n);
Ln= -(c1+c2*LN.*log(-t))-(c3+c4*LN);
semilogx(t,Ln);
if n==1,hold on,end
end
You can also get rid of the loop on n entirely as well...
doc meshgrid % for example
I will check it now thanks
BTW, log(0) --> -inf so you'll probably want to restrict t>0
I meant to point it out above but forgot to go back and do it after finished the other modifications...
This is resulting 100 lines I want only 10 lines 10 lines containing the 100 values, anyway thanks for trying to help.
Sorry, I don't really understand what you mean about 10 lines.
Well, read and do a little thinking on your own...fix the upper limit on the for loop to be 1:length(n)

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Entering Commands 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by