Polar plot using polyfit
古いコメントを表示
I'm trying to fit the VALUES to make a polar plot but it seems I couldn't fit one value 1400e2 which the polyfit doesn't take it? what other function should I use to make the polar plot correct so that it contains the values exactly at that degree ?
VGV = [ 2000e2 1800e2 1600e2 1400e2 ]; % [0 45 90 135 ]
angle = (pi/180).* [ 0 45 90 135 ];
alpha = (0:0.1:360);
alpha1 = (pi/180).*(0:0.1:360);
for k=1:1:length(alpha)
p = polyfit(angle,VGV,2);
f = polyval(p,alpha1(1:1:901));
f1 = fliplr(f(1:1:900));
f2 = fliplr(f1);
f3 = fliplr(f2);
Vp = [ f f1 f2 f3];
end
figure;polar(alpha1(1:1:3601),Vp,'o')
採用された回答
その他の回答 (2 件)
Alan Stevens
2020 年 10 月 14 日
I'm somewhat confused by your question and don't understand the need for all the flip commands! However, does the following meet your needs at all (incidentally, angle vs VGV is a straight line, so you don't need to get polyfit to fit a quadratic):
VGV = [ 2000e2 1800e2 1600e2 1400e2 ]; % [0 45 90 135 ]
angle = (pi/180).* [ 0 45 90 135 ];
alpha = (0:0.1:360);
alpha1 = (pi/180).*(0:0.1:360);
for k=1:1:length(alpha)
p = polyfit(angle,VGV,1);
f = polyval(p,alpha1);
% f1 = fliplr(f(1:1:900));
% f2 = fliplr(f1);
% f3 = fliplr(f2);
%
% Vp = [ f f1 f2 f3];
end
figure;
polarplot(alpha1,f,angle,VGV,'o')
This results in

Image Analyst
2020 年 10 月 14 日
First of all, polyfit does not need to be inside a loop since angle and VGV don't change inside the loop.
Next, you can fit a line, order 1, instead of a quadratic of order 2 since your VGV is linear.
Next, you have only 2 coefficients for p instead of 900.
% Create training data.
VGV = [ 2000e2 1800e2 1600e2 1400e2 ]; % [0 45 90 135 ]
angle = (pi/180).* [ 0 45 90 135 ];
% Create more angles to fit between our training angles.
alpha = (pi/180).*(0:0.1:360);
% Plot training data
polar(angle, VGV, 'bo')
% Fit a quadratic
coefficients = polyfit(angle, VGV, 1);
% Get a fit
vFit = polyval(coefficients, alpha);
% Plot fitted data:
hold on;
polar(alpha(1:1:3601), vFit, '-')

3 件のコメント
Ramesh Bala
2020 年 10 月 14 日
Image Analyst
2020 年 10 月 14 日
編集済み: Image Analyst
2020 年 10 月 14 日
If you want 360 interpolated angles instead of 3601 interpolated angles, you'd have to change the way you define alpha to this:
alpha = (pi/180).*(0 : 359); % Exactly 360 angles
If you really want, you can plot blue circles with 'bo' instead of red lines with 'r-'.
If you really want that weird shape you have instead of a spiral, then you'd have to do that flipping craziness, but be aware that alpha no longer means the angle when you go to plot it.
Ramesh Bala
2020 年 10 月 14 日
カテゴリ
ヘルプ センター および File Exchange で Multirate Signal Processing についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

