Get fitting statistics from "solve"

1 view (last 30 days)
george hargenrader
george hargenrader on 27 Mar 2020
Edited: Walter Roberson on 11 Apr 2020
Question
1) How do I get the graphs to update nicely during the fitting precces.
2) How do I get statistics from the fitting precess?
Hello, I wrote a fitting script using the example here https://www.mathworks.com/help/optim/ug/fit-ode-problem-based-least-squares.html which was very helpful. The code is working fine, I just want to make it flashier, and report some statistics from the fit. Any advice would be appreciated.
I want to see each iteration of the fit, so I put plot commands in my function call RtoODE. However each time it plots, the first trace has lower y values than the next trace, meaning the y axis rescales each time. It's hard to see how the fit is changing when the y axis is constantly rescaling. Is there a better way to do this? Perhaps an option when calling "solve" that will show the iterations automatically?
I would also like to see the goodness of fit, such as the r^2. If I could get a plot of the goodness of fit for each iteration, showing the fit getting better and better, that would be wonderful. Is there a good way to do this?
I'm using MATLAB 2019a.
Thank you in advance!

Answers (3)

Jerome Blair
Jerome Blair on 28 Mar 2020
Edited: Walter Roberson on 11 Apr 2020
You do all the plots once as follows:
p1 = plot(x1,y1,color1);
hold on
p2 = plot(x2,y2,color2);
etc.
Now set the y limits so they don't change:
ylim([ymin ymax])
Use values that will work for you.
Next is the code that changes all of the y arrays
Instead of plotting again you do
p1.YData = y1;
p2.YData = y2;
etc.
These changes to the YData field cause the plot to instantly change.
This sort of thing is covered in Chapter 17 of the MATLAB Graphics manual.
  1 Comment
george hargenrader
george hargenrader on 10 Apr 2020
using the
p1 = plot(x,y);
syntax works to some degree. But when y contains multiple lines then p1 will reference those lines. Any additional lines I add to the figure using hold on, are not referenced by p1.

Sign in to comment.


Jerome Blair
Jerome Blair on 11 Apr 2020
p1 can only reference 1 line. Additional lines must use p2, p3, etc., as in the example I sent. The different hanles, p1, p2, p3, etc., eg., can have any names you wish.
  1 Comment
george hargenrader
george hargenrader on 11 Apr 2020
p1 can reference multiple lines if they were plotted when p1 was initialized. For example the following can change the color.
p1 = plot(x,y); %Where y is a matrix, each row a line
p1(1).YData = new_y;
But when I use hold on to add more lines, p1 will not be able to access them.
So, while it's a neat idea, I don't think it helps me solve this particular problem.

Sign in to comment.


Jerome Blair
Jerome Blair on 11 Apr 2020
Of course p1 will not be able to access them. You have to acces them with p2 or p3--the handle that was used when theeh line was created--as in teh example I orginally sent.

Products

Community Treasure Hunt

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

Start Hunting!

Translated by