现想编个函数,
该函数的输入为x,y,n,
其中x为原始点的x坐标的一维数组,y为原始点的y坐标的一维数组,n为傅里叶函数的阶数,
输出为拟合后的点的y坐标
以下代码在7.1版以上均可运行。
将以下代码保存为M文件:
function yy = zzz700createFit(x, y, n)
xData = x(:);
yData = y(:);
% Set up fittype and options.
ft = fittype( ['fourier',num2str(n)'] );
opts = fitoptions( ft );
opts.Display = 'Off';
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% 拟合后的点的y坐标
yy = fitresult(xData);
在命令窗口输入:
% 输入x,y,n
x = 0:0.1:2*pi;
y = rand(length(x),1);
n = 6;
% 输出为拟合后的点的y坐标
yy = zzz700createFit(x, y, n)
.......................
matlab非线性回归
x = [0, 1, 3, 5, 10, 24], y = [1, 1.4, 4.5, 3.5, 2.1, 1.3],
函数可能是y=a*x^3+b*x^2+c*x^1+d。
以下代码在7.1版以上均可运行。
close all
clear,clc
x = [0, 1, 3, 5, 10, 24];
y = [1, 1.4, 4.5, 3.5, 2.1, 1.3];
xData = x';
yData = y';
% Set up fittype and options.
ft = fittype( 'a*x^3+b*x^2+c*x^1+d', 'independent', 'x', 'dependent', 'y' );
opts = fitoptions( ft );
opts.Display = 'Off';
opts.StartPoint = [0.795199901137063 0.186872604554379 0.489764395788231 0.445586200710899];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts )
% Plot fit with data.
figure( 'Name', '拟合图' );
h_ = plot( fitresult, x, y, '* '); % 拟合图 原始数据
legend off; % turn off legend from plot method call
set(h_(2),'Color',[1 0 0],...
'LineStyle','-', 'LineWidth',2,...
'Marker','none', 'MarkerSize',6);
h = legend('原始数据','拟合曲线',2,'Location','Best');
set(h,'Interpreter','none')
title('拟合图 原始数据')
% Label axes
xlabel( 'x' );
ylabel( 'y' );
grid on
fitresult =
General model:
fitresult(x) = a*x^3+b*x^2+c*x^1+d
Coefficients (with 95% confidence bounds):
a = 0.005205 (-0.003479, 0.01389)
b = -0.1843 (-0.4727, 0.1041)
c = 1.447 (-0.6652, 3.56)
d = 0.7761 (-2.473, 4.025)
gof =
sse: 1.5902
rsquare: 0.8381
dfe: 2
adjrsquare: 0.5952
rmse: 0.8917
......................
x=[3.23E+04
5.71E+04
1.49E+05
1.61E+05
1.79E+05
2.02E+05
2.11E+05
2.45E+05
2.68E+05
4.14E+05
5.11E+05
7.79E+05
7.22E+05
1.28E+06
1.01E+06
1.34E+06
1.60E+06
2.01E+06
1.02E+07
1.02E+07
1.46E+07
4.63E+07
1.61E+08
1.42E+09
1.22E+09
3.77E+09];
y=[151
140
140
130
130
130
110
120
120
120
110
100
90.5
90.5
80.2
101
89.3
81.4
80.2
70
76.1
70.8
74.4
71.1
60.9
65.8];
xData = x;
yData = y;
% Set up fittype and options.
ft = fittype( '(230-a)*exp(-((x-1/4)/b)^c)+a', 'independent', 'x', 'dependent', 'y' );
opts = fitoptions( ft );
opts.Display = 'Off';
opts.Lower = [40 10000 0];
opts.StartPoint = [0.278498218867048 0.546881519204984 0.957506835434298];
opts.Upper = [100 1000000000 10];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts )
% Plot fit with data.
figure( 'Name', '拟合图 ' );
h = plot( fitresult, xData, yData , '* ');
set(h(2),'Color',[1 0 0],...
'LineStyle','-', 'LineWidth',2,...
'Marker','none', 'MarkerSize',6);
h = legend('原始数据','拟合曲线',2,'Location','NorthEast');
title('拟合图 原始数据')
% Label axes
xlabel( 'x' );
ylabel( 'y' );
grid on
fitresult =
General model:
fitresult(x) = (230-a)*exp(-((x-1/4)/b)^c)+a
Coefficients (with 95% confidence bounds):
a = 69.11 (63.03, 75.19)
b = 1.528e+005 (1.036e+005, 2.021e+005)
c = 0.3109 (0.2448, 0.377)
gof =
sse: 1.1832e+003
rsquare: 0.9337
d