フィルターのクリア

I ask for help please colleagues

3 ビュー (過去 30 日間)
Milagre MANHIQUE
Milagre MANHIQUE 2022 年 1 月 2 日
回答済み: Milagre MANHIQUE 2022 年 1 月 6 日
I have a pair of input and output data. My goal is to find a polynomial function that best fits the data. For that I need polynomials of various orders (linear, quadratic, cubic,... up to degree 10). In the matlab program I have, I can get the polynomials one at a time and plot them separately. My problem is: How can I run my program, get the curves of different orders (linear, quadratic, cubic,...), plot them on the same graph and label each curve. I know I should use the "for-loop" but I'm facing difficulties for several days.Can someone help please?
Thanks in advance.
Milagre MANHIQUE
My matlab code is:
clear;
clc;
load manufacturerdata
x=manufacturerdata.windspeed; % Wind speed data in m/s
y=manufacturerdata.power; % Wind turbine output power in Watt.
F=input('Enter the order of the desired polynomial: ');
n=length(x);
N=F+1; % For dimension of matrix A, for Ax=B.
A=zeros(N,N);
for i=1:N
for j=1:N
A(i,j)=sum(x.^(i+j-2));
end
end
B=zeros(N,1);
for k=1:N
B(k)=sum((x.^(k-1)).*y);
end
U=A\B;
Coefficient=[U(2,1) U(1,1)]
% Displaying the desired polynomial
disp('The desired polynomial function fitted to the manufacturer data is: P(x)= ')
for k=N:-1:2
fprintf('+(%.4fx^%d)', U(k), k-1)
end
fprintf('+(%.4f)\n', U(1))
% Plotting the curve fitted to the data
p=flip(U);
x=linspace(x(1),x(n),100);
y=polyval(p,x);
c1=plot(x,y,'-r');
hold on
c2=plot(x,y,'-.');
ylim([0 1000])
title('Output power fitting curve for manufacturer data');
xlabel('Wind speed (in m/s)');
ylabel('Output Power (in kW)');
legend([c1,c2], 'Manufacturer P(v)','Fitted P(v) curve','Location','NorthWest')
  2 件のコメント
Image Analyst
Image Analyst 2022 年 1 月 3 日
You forgot to attach manufacturerdata.mat. Why not use polyfit()?
Obviously the highest order polynomial will fit your training data best (lowest residuals) but may not be best for data not used to train it.
Milagre MANHIQUE
Milagre MANHIQUE 2022 年 1 月 5 日
I used the polyfit command as you advised me, it gave me some way to solve my problem. With this command it seems to me that there is a light at the bottom of the tunnel.
Thanks for the tip, it's been useful
Milagre MANHIQUE

サインインしてコメントする。

回答 (1 件)

Milagre MANHIQUE
Milagre MANHIQUE 2022 年 1 月 6 日
Using polyfit as I was advised, I ended up finding this solution, it gave what I really wanted, but I found it to be a somewhat rudimentary or primitive way, I believe it is possible to use loops (for, while...) and produce the same solution.I need to improve my skills in using loops, but if anyone can give a tip, I would welcome and appreciate.
Thank you for help
The code is:
load manufacturerdata
load winddata.mat %Reference wind speed, v (in km/h).
% Manufacturer data
x=manufacturerdata.windspeed;
y=manufacturerdata.power;
p1 = polyfit(x,y,1);
p2 = polyfit(x,y,2);
p3 = polyfit(x,y,3);
p4 = polyfit(x,y,4);
p5 = polyfit(x,y,5);
p6 = polyfit(x,y,6);
p7 = polyfit(x,y,7);
p8 = polyfit(x,y,8);
p9 = polyfit(x,y,9);
p10 = polyfit(x,y,10);
f1 = polyval(p1,x);
f2 = polyval(p2,x);
f3 = polyval(p3,x);
f4 = polyval(p4,x);
f5 = polyval(p5,x);
f6 = polyval(p6,x);
f7 = polyval(p7,x);
f8 = polyval(p8,x);
f9 = polyval(p9,x);
f10 = polyval(p10,x);
plot(x,y,'bp',x,f1,'k:',x,f2,'.-',x,f3,x,f4,x,f5,x,f6,...
x,f7,x,f8,x,f9,x,f10)
title('Output power fitting curves for manufacturer data');
xlabel('Wind speed (in m/s)');
ylabel('Output Power (in kW)');
ylim([-50 1000])
legend('data','1^{st} degree','2^{nd} degree','3^{rd} degree',...
'4^{th} degree','5^{th} degree','6^{th} degree','7^{th} degree',...
'8^{th} degree','9^{th} degree','10^{th} degree','location','southeast')

カテゴリ

Help Center および File ExchangeInterpolation についてさらに検索

製品


リリース

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by