Polyfit on a 3d plot
42 次查看(过去 30 天)
显示 更早的评论
Hello everyone,
i'm trying to create a matrix containing the coefficient of a 3rd degree polyfit on each rows with the shape 13000x4.
For that, i have the following data shape:
Time : 13000x1 %time corresponding actually to the number of rows
Position : 13000x4 %the position is just for the sake of the plot (position of the sensor in reality). The four columns have each a constant value over the 13000 rows
Displacement: 13000x4 %measurement in global Z of four sensors.
(see image attached) My purpose is to "slice" the 3d plot at every time "t" (13000 times) and apply a polyfit on the 4 red cross (x = position, y = displacement) in order then to evaluate the curve to obtain the 2 yellow points. Ultimaly, i want to recreate a line out of the yellow points.
Up to now, i was only able to extract a few sets of points (red crosses) at a given time manually. I don't know how to reshape the matrix without creating 13000 submatrix and names associated.
I hope that my explanations are clear enough and that you can give me a little help on that one.
Thanks in advance
Fabio
0 个评论
采纳的回答
dpb
2022-5-11
That's fairly simple, just loop over the displacement array with a set of the position data to compute that set of coefficients and evaluate them where needed.
nD=size(D,1); % the important size of D
NewD=zeros(nD,2); % for the new points -- could augment D instead but this is simpler
NewP=[300,2400]; % GUESS FOR THE NEW POINT LOCATIONS -- SET AS DESIRED
for i=1:nD % iterate over rows of D
b{i}=polyfit(P(1,:),D(i,:),3); % compute polyfit coefficients for each (hold in cell array)
NewD(i,:)=polyval(b{i},newP); % evaluate and save new positions
end
leaves you with the additional data points at the two positions -- just draw them directly or you could add to the original D array...
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!