Need help filling a Matrix with values from an 'fprintf' Command
Mostrar comentarios más antiguos
Hello,
Basically I am computing several values and displaying them through each loop iteration using the 'fprintf'.
However, I would like to make the 'fprintf' output be in row i of a matrix, then after each loop, make this row the i+1 row, then continue this trend until a desired number of rows is reached. So my matrix will be of the size: k rows x size(fprintf) columns
Eventually, I would like to plot each individual row (which represents a velocity) vs its corresponding distance.
Here is the code I've been working on:
clc; clear all;
%Initial Guesses for Length and Num. of Grid Cells
L = 1;
m = 10;
IL = m+1;
Dx = L/m;
Dt = Dx/2;
%Initialize Vectors/Arrays
k = 10;
X = zeros(1,IL);
u = zeros(k,IL);
num = 100;
N = zeros(1,num);
%Set Grid Points for Given Range
for i=1:IL
X(i)=(i-1)*Dx;
end
for j=1:k
%Simplify the Initial Conditions
for i=1:IL
if (0<=X(i)) && (X(i)<=1)
u(j,i)=2-X(i);
elseif (X(i)>1)
u(j,i)=1;
else
u(j,i)=NaN;
end
end
%Generate Solution
for N=1:num
%Interior Points
for i=2:(IL-1)
u(j+1,i) = u(j,i)-Dt/Dx*u(j,i)*(u(j,i)-u(j,i-1));
end
%Boundary Points
u(j+1,IL) = 1;
u(j+1,1) = 2;
formatSpec = '%15.13f\n';
fprintf(formatSpec,u(j,i)) %I want to be able to use this output as a row-vector
%Go to next Time-Step
for i=1:IL
u(j,i) = u(j+1,i);
end
end
end
I tried just setting a variable to the 'fprintf', but that didn't work.
I can provide more details if need be.
Thanks,
Jon
Respuestas (1)
Walter Roberson
el 24 de Feb. de 2021
Editada: Walter Roberson
el 24 de Feb. de 2021
variable = sprintf(formatSpec,u(j,i));
See also compose() . In particular, if you use a double-quoted format with compose() then the output is a string object.
formatSpec = "%15.13f\n";
variable = compose(formatSpec,u(j,i));
3 comentarios
Jon Stapchuck
el 25 de Feb. de 2021
Walter Roberson
el 25 de Feb. de 2021
Both that sprintf() and that compose() are showing the entire vector. Notice you are passing u(j,i) with j and i both scalar, so the scalar so indexed is the entire vector you are asking to display.
Also, just before that you have
for i=2:(IL-1)
loop body
end
and when you have a for loop, the loop control variable will be left as the last variable it was assigned, so i will be left at the value IL-1 . That might not be what you were expecting.
Jon Stapchuck
el 25 de Feb. de 2021
Categorías
Más información sobre Downloads en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!