Need help filling a Matrix with values from an 'fprintf' Command
6 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
回答(1 个)
Walter Roberson
2021-2-24
编辑:Walter Roberson
2021-2-24
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 个评论
Walter Roberson
2021-2-25
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!