Graphing Base Form of y=mx+b from a .csv file
조회 수: 6 (최근 30일)
이전 댓글 표시
I have a few thousand equations in y=mx+b form that I have acquired from hundreds of thousands of data points in multiple excel files. They are all trendlines of similar T-s data. I am attempting to create generalized trendlines of similar data types and I would like to be able to select formulas in y=mx+b form that I would like plotted, and then find the formula for the LOBF (Line of best fit) for that set of equations. I am new to MatLab and would just like some assistance in this.
댓글 수: 9
Adam Danz
2019년 10월 15일
편집: Adam Danz
2019년 10월 16일
That info is helpful. If you're reading it in as a table and you already got rid of the first column, the first line of my solution will be
numVals = regexp(data{:,:},'[+-]?\d+\.?\d*', 'match');
% ^^^^^ add this
Alternatively, if you hadn't removed the first column, you could have done,
numVals = regexp(data{:,2:end},'[+-]?\d+\.?\d*', 'match');
% ^^^^^^^^^
The rest of my solution will be the same.
채택된 답변
Adam Danz
2019년 10월 15일
I'm assuming you've read the data into Matlab and you've got a cell array of strings or character arrays named "data" that appears like this:
data =
3×6 cell array
Columns 1 through 3
{'y = 2.3297x + 1…'} {'y = 1.8866x + 1…'} {'y = 0.3373x + 1…'}
{'y = 1.9526x + 9…'} {'y = 1.7754x + 9…'} {'y = 2.774x + 68…'}
{'y = 1.9004x + 9…'} {'y = 1.9833x + 8…'} {'y = 3.1304x + 6…'}
Columns 4 through 6
{'y = 3.584x + 69…'} {'y = 2.1044x + 6…'} {'y = 0.0704x + 6…'}
{'y = 3.0042x + 6…'} {'y = 2.3015x + 5…'} {'y = 0.1415x + 6…'}
{'y = 3.1099x + 6…'} {'y = 2.466x + 60…'} {'y = 0.2486x + 6…'}
Execute these two lines below to extract the slope and intercept values from each string.
numVals = regexp(data,'[+-]?\d+\.?\d*', 'match');
mb = cellfun(@str2double, numVals, 'UniformOutput', false);
mb is a cell array the same size as "data" and contains the [slope,intercept] of each cell element.
mb =
3×6 cell array
{1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×2 double}
{1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×2 double}
{1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×2 double} {1×2 double}
For example, for the equation in data(2,3), the slope and intercept are
mb{2,3}
ans =
2.774 68.856
To draw a regression line on a plot use refline()
refline(mb{2,3})
댓글 수: 6
Adam Danz
2019년 10월 16일
Continuing from the mb cell array in my answer,
allSlopes = cellfun(@(x)x(1),mb); %matrix of all slopes in mb
allInt = cellfun(@(x)x(2),mb); %matrix of all intercepts in mb
meanSlope = mean(allSlopes(:));
meanYint = mean(allInt(:));
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!