Graph the solution of 3 different variables vs # iterations given 3 initial condition guesses on three separate graph obtained from an iterative solving while loop.

2 views (last 30 days)
I need to get three graphs of the solutions vs iterations it took to get them given three different initial conditon guesses from the user. I have a working code base that plots the solutions vs itereatons for one user input (although they only show up as dots and not connected lines), but I'm not sure how to scale it for three different user guesses.
it looks like this
% Deinfne vaibles
a= ...
% ask and store user inputs
Promt 1...
f_1= inoput(promt) "Initial guess"
Promt 2...
Promt 3...
max # of runs = ...
max error tolerance= ...
while i<= max # runs
*** do math***
calc error between 1st guess and new solution
if error > max error tolerance
initial guess= new val
i= i+1
figure 1 , title, xlabel y label etc
plot ( i , Z) <---( I have to add '.' to get anything to display in graph, otherwise blank or just one dot)
hold on
figure 2 , title, xlabel y label etc
plot ( i , x)
hold on
figure 2 , title, xlabel y label etc
plot ( i , x)
hold on
figure 3 , title, xlabel y label etc
plot ( i , C)
hold on
Display results
hold off
It works great for one input great, the graphs all make sense (although they dont form connected lines only dots not sure why). I want it to rerun and plot results for a new guess onto the same graphs, should I move where I put the plot commands/ hold commands? The easiest way I thought of was to just copy/ paste the whole while loop and rename variables for the equivalent promt variables but It doesnt look like its going to save the data from the previous run to overlap on the graphs.
Thank you in advance

Answers (1)

Clayton Gotberg
Clayton Gotberg on 19 Apr 2021
Edited: Clayton Gotberg on 19 Apr 2021
One possibility for why your charts only appear when you use point markers is what you are using for your plot data. You set i as zero, then the while loop adds 1 to it each time it runs. At the end, i is still just a scalar value representing the number of runs. To plot a line, you need a value of i for each value of Z, X and C that you want to appear on the chart.
You also appear to write over Z, X and C on each loop. If you want to plot them, you'll need to save the value in each loop. For example,
C(i) = <value> % sets the i-th element of C equal to <value>
C = [C <value>]. % adds <value> as the new last element of C
If you want to have multiple guesses show up on the same figure, you can specify which figure each of the output charts should arrive at.
% first plot, title, etc
% second plot, title, etc
% returns focus to first plot and lets you make changes there again
If you don't overwrite the data from earlier runs, you can also always do the plotting after all of the calculation.
Suppose you want a user to make three guesses, then have a program do something for each of those three guess and save the results. Here is some basic code that should give you an idea of the structure:
guesses = [1 7 15];
max_runs = 1000;
error_tol = 1e-8;
for k = 1:size(guesses,2) % as many times as there are columns in guesses
Z = []; X = []; C = []; % Empty the saved Z, X and C to prepare for the new loop
initial_guess = guesses(k);
i = 1;
while i<= max_runs
% insert math part
Z(i)= %
X(i)= %
C(i)= %
guess_soln_diff = abs(new_solution - initial_guess); % solve for error
if guess_soln_diff < error_tol % if the difference is less than tolerance
break % stop execution of while loop
initial_guess = new_solution; % if not, change the guess to the new one
i= i+1;
Z_results{k} = Z; % Save Z results for later plotting
X_results{k} = X; % Cell arrays have less strict requirements for saving multiple things
C_results{k} = C; % to the same array - no same size or type, for example.
iterations_vector{k} = 1:i; % Make a vector counting from 1 to the number of iterations
hold on
% and so on with other figures

Community Treasure Hunt

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

Start Hunting!