I am out of practice with MATLAB and I'm trying to get the sum from a loop to add itself to the sum of each iteration of the loop. I can accomplish by manually stepping the loop, but I know there must be an easier way. Can someone please help?
19 ビュー (過去 30 日間)
古いコメントを表示
%Manual stepping of "loop"
clear
clc
h=input('What is height? ');
l=input('What is length? ');
w=input('What is frequency? ');
y=input('How many iterations? ');
x=0:0.001:l;
t=0;
F=(8*h)/(pi)^2;
n=1;
SUM=0
for n=1
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S4=F*(S1*S2*S3);
SUM1=S4;
figure
plot(x,SUM1)
end
for n=n+1
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S5=F*(S1*S2*S3);
SUM2=SUM1+S5
figure
plot(x,SUM2)
end
for n=n+1
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S6=F*(S1*S2*S3);
SUM3=SUM2+S6
figure
plot(x,SUM3)
end
for n=n+1
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S7=F*(S1*S2*S3);
SUM4=SUM3+S7
figure
plot(x,SUM4)
end
for n=n+1
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S8=F*(S1*S2*S3);
SUM5=SUM4+S8
figure
plot(x,SUM5)
end
for n=n+1
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S9=F*(S1*S2*S3);
SUM6=SUM5+S9
figure
plot(x,SUM6)
end
for n=n+1
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S10=F*(S1*S2*S3);
SUM7=SUM6+S10
figure
plot(x,SUM7)
end
%What I thought might shorten code
clear
clc
h=input('What is height? ');
l=input('What is length? ');
w=input('What is frequency? ');
y=input('How many iterations? ');
x=0:0.001:l;
t=0;
F=(8*h)/(pi)^2;
n=1:y;
for n=1:y
i=2*n-1;
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S4=F*(S1*S2*S3);
SUM=sum(S4, i);
figure
plot(x,SUM)
end
0 件のコメント
採用された回答
mbonus
2016 年 9 月 12 日
This is what it looks like you are trying to do to me
h=input('What is height? ');
l=input('What is length? ');
w=input('What is frequency? ');
y=input('How many iterations? ');
x=0:0.001:l;
t=0;%was this supposed to be a vector?
F=(8*h)/(pi)^2;
SUM = 0;
for n=1:y
i=2*n-1;
%%Update t here?
S1=((-1)^((i-1)/2))/(i^2);
S2=sin(i*pi*x/l);
S3=cos(w*t);
S4=F*(S1*S2*S3);
SUM = SUM + S4;
figure
plot(x,SUM)
title(['Plot of iteration ' num2str(i)])
end
Although you never modify t which will result in S3 always equaling 1, so maybe you meant to update t in the loop? Or did you mean to make t a vector like x?
3 件のコメント
mbonus
2016 年 9 月 12 日
Glad to help. There have been a few times where I've had similar issues that you did with SUM, usually it goes down to using different capitalizations for the variable by mistake or maybe having an 's' at the end and then forgetting about it.
Image Analyst
2016 年 9 月 13 日
I would not call the variable SUM. True, MATLAB is case sensitive so SUM is different than the built-in function named sum(), but still, it's better to not use the same name.
To be friendlier to the users, you might use a GUI to collect input numbers, like use inputdlg() instead of input(). Here's a code snippet/example that you can adapt:
% Ask user for two floating point numbers.
defaultValue = {'45.67', '78.91'};
titleBar = 'Enter a value';
userPrompt = {'Enter floating point number 1 : ', 'Enter floating point number 2: '};
caUserInput = inputdlg(userPrompt, titleBar, 1, defaultValue);
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
% Convert to floating point from string.
usersValue1 = str2double(caUserInput{1})
usersValue2 = str2double(caUserInput{2})
% Check for a valid number.
if isnan(usersValue1)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
% Convert the default from a string and stick that into usersValue1.
usersValue1 = str2double(defaultValue{1});
message = sprintf('I said it had to be a number.\nI will use %.2f and continue.', usersValue1);
uiwait(warndlg(message));
end
% Do the same for usersValue2
その他の回答 (1 件)
Image Analyst
2016 年 9 月 12 日
I have no idea what you really want to do. But this kind of syntax:
for n=n+1
while it may work, is nonsense. Please explain better what you're trying to do.
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!