invalid index in program

p=8/3;
r=25;
sigma=10;
npoints =5000;
dt = 0.1;
a = zeros(npoints,1);
b = zeros(npoints,1);
c= zeros(npoints,1);
t = zeros(npoints,1);
//t=1:dt:100;
Invalid use of operator.
a(1)=1;
b(1)=1;
c(1)=1;
suma=0;
sumb=0;
sumc=0;
sumS=0;
sumZ=0;
for i = 1:npoints-1
sumS=sumS+a(i)*c(i-npoints);
sumZ=sumZ+a(i)*b(i-npoints);
a(i+1)=((sigma)/(i+1))*(b(i)-a(i));
b(i+1)=(1/(i+1))*(r*a(i)-b(i)-sumS);
c(i+1)=(1/(i+1))*(sumZ-p*c(i));
suma=suma+a(i).*(t^i);
sumb=sumb+b(i).*(t^i);
sumc=sumc+c(i).*(t^i);
t(i+1) = t(i) + dt;
end;
plot(t,suma)
pl revise the program

20 件のコメント

Jan
Jan 2022 年 2 月 24 日
Please post the complete error message or explain the difference between the results and your expectations. It is easier to fix a problem than to guess, what the problem is.
Rik
Rik 2022 年 2 月 24 日
My first revision would be to remove the //. That is not a valid Matlab syntax. This isn't your first question. You know how this works.
shiv gaur
shiv gaur 2022 年 2 月 24 日
this is lorenz problem the graph butterfly
shiv gaur
shiv gaur 2022 年 2 月 24 日
this is the well known lorenz equation change in power series solution graph may be like that lorenz
Jan
Jan 2022 年 2 月 24 日
@shiv gaur: Again: Please explain as accurate as possible what the problem with your code is. You see, that the "//" is not accepted by Matlab, so simply remove it.
The explanation, that the code should show the Lorenz attractor does not help to understand, what your problem is.
shiv gaur
shiv gaur 2022 年 2 月 24 日
編集済み: Jan 2022 年 2 月 24 日
p=8/3;
r=25;
sigma=10;
npoints =5000;
dt = 0.1;
a = zeros(npoints,1);
b = zeros(npoints,1);
c= zeros(npoints,1);
t = zeros(npoints,1);
a(1)=1;
b(1)=1;
c(1)=1;
suma=0;
sumb=0;
sumc=0;
sumS=0;
sumZ=0;
for i = 1:npoints-1
sumS=sumS+a(i)*c(i-npoints);
sumZ=sumZ+a(i)*b(i-npoints);
a(i+1)=((sigma)/(i+1))*(b(i)-a(i));
b(i+1)=(1/(i+1))*(r*a(i)-b(i)-sumS);
c(i+1)=(1/(i+1))*(sumZ-p*c(i));
suma=suma+a(i).*(t^i);
sumb=sumb+b(i).*(t^i);
sumc=sumc+c(i).*(t^i);
t(i+1) = t(i) + dt;
end;
plot(t,suma)
revise program
shiv gaur
shiv gaur 2022 年 2 月 24 日
this is the equation
Jan
Jan 2022 年 2 月 24 日
編集済み: Jan 2022 年 2 月 24 日
"revise program" is a very lean command. You do not want to spend the time for explaining, which problem you have. This will not encourage others to spend time to help you.
shiv gaur
shiv gaur 2022 年 2 月 24 日
this is the lorenz attractor problem that can be solve by power series method i make code by power series method iplace of ode system the result of lorenz by ode is not matching by power series my program of power series lorenz
Jan
Jan 2022 年 2 月 24 日
"the result of lorenz by ode is not matching by power series my program of power series lorenz" -
Your code does not run due to the programming error, so how can the results differ?
shiv gaur
shiv gaur 2022 年 2 月 24 日
編集済み: Rik 2022 年 2 月 24 日
this is the program of lorenz using time step
p=8/3;
r=25;
sigma=10;
npoints =500000;
dt = 0.0001;
a = zeros(npoints,1);
b = zeros(npoints,1);
c = zeros(npoints,1);
time = zeros(npoints,1);
a(1)=1;
b(1)=1;
c(1)=1;
for step = 1:npoints-1
a(step+1)=a(step)+sigma*(b(step)-a(step))*dt;
b(step+1)=b(step)+(-x(step)*c(step)+r*a(step)-b(step))*dt;
c(step+1)=c(step)+(a(step)*b(step)-p*z(step))*dt;
time(step+1) = time(step) + dt;
end;
Unrecognized function or variable 'x'.
subplot (2,1,1);
plot(time,z,'b' );
xlabel('time');
ylabel('z');
subplot (2,1,2);
plot (x,z,'g' );
xlabel('x');
ylabel('z')
2.power series
p=8/3;
r=25;
sigma=10;
npoints =5000;
dt = 0.1;
a = zeros(npoints,1);
b = zeros(npoints,1);
c= zeros(npoints,1);
t = zeros(npoints,1);
a(1)=1;
b(1)=1;
c(1)=1;
suma=0;
sumb=0;
sumc=0;
sumS=0;
sumZ=0;
for i = 1:npoints-1
sumS=sumS+a(i)*c(i-npoints);
sumZ=sumZ+a(i)*b(i-npoints);
a(i+1)=((sigma)/(i+1))*(b(i)-a(i));
b(i+1)=(1/(i+1))*(r*a(i)-b(i)-sumS);
c(i+1)=(1/(i+1))*(sumZ-p*c(i));
suma=suma+a(i).*(t^i);
sumb=sumb+b(i).*(t^i);
sumc=sumc+c(i).*(t^i);
t(i+1) = t(i) + dt;
end;
plot(t,sumb)
why not giving match plot
Rik
Rik 2022 年 2 月 24 日
I understand that there may be a language barrier, but I can't imagine that in your native language 'revise program' would be considered a polite request. You're asking strangers to do you a favor. Right now it looks like you're not prepared to put in any effort explaining your question. Lucky for you that Walter and Jan are kinder than I am.
Please read the link that Jan provided. Please use interpunction and line breaks. Remember that it is easy for people to ignore your post. If you make your problem clear, you will increase the chances that someone will enjoy your question as a puzzle. The puzzle should not be understanding your question, but rather how to solve it.
You have accepted 3 answers out of the many your received. You should consider how you can make your questions different so you actually get answers that solve enough of your questions to be accepted.
shiv gaur
shiv gaur 2022 年 2 月 24 日
sir if you understand the problem then you can help to solve the minor problem that I have so you are requested to do so
Jan
Jan 2022 年 2 月 24 日
@shiv gaur: The code you have posted does not run:
b(step+1)=b(step)+(-x(step)*c(step)+r*a(step)-b(step))*dt;
% ^ x is undefined
There is no chance to guess, what your problem is. You do not mention, what your problem is. Your code does not run and in consequence it does not show, what your problem is.
So how can we help you?
  1. Post running code.
  2. Use left button of the toolbar's "Code" section to format the code to improve the readbility.
  3. Explain in clear word, what the problem is.
Jan
Jan 2022 年 2 月 24 日
@Rik: Thanks. I take a cup of coffee. Do you want a cookie? 🍪
shiv gaur
shiv gaur 2022 年 2 月 24 日
編集済み: Rik 2022 年 2 月 24 日
p=8/3;
r=25;
sigma=10;
npoints =500000;
dt = 0.0001;
a = zeros(npoints,1);
b = zeros(npoints,1);
c = zeros(npoints,1);
time = zeros(npoints,1);
a(1)=1;
b(1)=1;
c(1)=1;
for step = 1:npoints-1
a(step+1)=a(step)+sigma*(b(step)-a(step))*dt;
b(step+1)=b(step)+(-a(step)*c(step)+r*a(step)-b(step))*dt;
c(step+1)=c(step)+(a(step)*b(step)-p*z(step))*dt;
time(step+1) = time(step) + dt;
end;
Unrecognized function or variable 'z'.
subplot (2,1,1);
plot(time,z,'b' );
xlabel('time');
ylabel('z');
subplot (2,1,2);
plot (x,z,'g' );
xlabel('x');
ylabel('z')
this is edit program lorenz
2.program using power series not matching
2.power series
p=8/3;
r=25;
sigma=10;
npoints =5000;
dt = 0.1;
a = zeros(npoints,1);
b = zeros(npoints,1);
c= zeros(npoints,1);
t = zeros(npoints,1);
a(1)=1;
b(1)=1;
c(1)=1;
suma=0;
sumb=0;
sumc=0;
sumS=0;
sumZ=0;
for i = 1:npoints-1
sumS=sumS+a(i)*c(i-npoints);
sumZ=sumZ+a(i)*b(i-npoints);
a(i+1)=((sigma)/(i+1))*(b(i)-a(i));
b(i+1)=(1/(i+1))*(r*a(i)-b(i)-sumS);
c(i+1)=(1/(i+1))*(sumZ-p*c(i));
suma=suma+a(i).*(t^i);
sumb=sumb+b(i).*(t^i);
sumc=sumc+c(i).*(t^i);
t(i+1) = t(i) + dt;
end;
plot(t,sumb)
why not giving match plot
shiv gaur
shiv gaur 2022 年 2 月 24 日
pl match with second program
Jan
Jan 2022 年 2 月 24 日
編集済み: Jan 2022 年 2 月 24 日
@shiv gaur: Seriously?! Both code block are still not running:
c(step+1)=c(step)+(a(step)*b(step)-p*z(step))*dt;
% ^ undefined variable z
and:
sumS=sumS+a(i)*c(i-npoints);
% ^^^^^^^^^ causes a negative index
Your question "why not giving match plot" is not meaningful: Both codes do not procude any plot, because they stop with errors.
You do not care about a proper formating - do you see, that I've spend the time for apply the code formatting in your contributions? You repeatedly post not running code. You ignore questions for clarifications still do not mention, what the problem is you want to solve.
This is not a fair usage of this forum.
shiv gaur
shiv gaur 2022 年 2 月 24 日
sorry jan this is edit program that is running program this is the program of lorenz using time step
we have to plan match with below program using power series now program is right
p=8/3;
r=25;
sigma=10;
npoints =500000;
dt = 0.0001;
a = zeros(npoints,1);
b = zeros(npoints,1);
c = zeros(npoints,1);
time = zeros(npoints,1);
a(1)=1;
b(1)=1;
c(1)=1;
for step = 1:npoints-1
a(step+1)=a(step)+sigma*(b(step)-a(step))*dt;
b(step+1)=b(step)+(-a(step)*c(step)+r*a(step)-b(step))*dt;
c(step+1)=c(step)+(a(step)*b(step)-p*c(step))*dt;
time(step+1) = time(step) + dt;
end;
subplot (2,1,1);
plot(time,z,'b' );
xlabel('time');
ylabel('z');
subplot (2,1,2);
plot (x,z,'g' );
xlabel('x');
ylabel('z')
2.power series
p=8/3;
r=25;
sigma=10;
npoints =5000;
dt = 0.1;
a = zeros(npoints,1);
b = zeros(npoints,1);
c= zeros(npoints,1);
t = zeros(npoints,1);
a(1)=1;
b(1)=1;
c(1)=1;
suma=0;
sumb=0;
sumc=0;
sumS=0;
sumZ=0;
for i = 1:npoints-1
sumS=sumS+a(i)*c(i-npoints);
sumZ=sumZ+a(i)*b(i-npoints);
a(i+1)=((sigma)/(i+1))*(b(i)-a(i));
b(i+1)=(1/(i+1))*(r*a(i)-b(i)-sumS);
c(i+1)=(1/(i+1))*(sumZ-p*c(i));
suma=suma+a(i).*(t^i);
sumb=sumb+b(i).*(t^i);
sumc=sumc+c(i).*(t^i);
t(i+1) = t(i) + dt;
end;
plot(t,sumb)
why not giving match plot
Rik
Rik 2022 年 2 月 24 日
c
l
i
c
k
t
h
e
f
o
r
m
a
t
b
u
t
t
o
n
s
Click the link Jan gave you. Also click this.
Feel free to reopen the question and edit your last comment.

回答 (2 件)

Walter Roberson
Walter Roberson 2022 年 2 月 24 日

0 投票

npoints =5000;
for i = 1:npoints-1
sumS=sumS+a(i)*c(i-npoints);
First iteration: i is 1, and a(1) is being indexed; as you initialized a(1) that is valid so far.
Then c(i-npoints) is being indexed. That is c(1-5000) which is c(-4999) which is not a valid index.
Jan
Jan 2022 年 2 月 24 日

0 投票

Use the debugger to examine the cause of problems. Type this in the command window:
dbstop if error
Run the code again until it stops at the error.
A guess: c(i-npoints) cannot work, because the index is negative.

この質問は閉じられています。

製品

リリース

R2021b

タグ

質問済み:

2022 年 2 月 24 日

閉鎖済み:

Rik
2022 年 2 月 24 日

Community Treasure Hunt

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

Start Hunting!

Translated by