matlab拟合非线性函数

已知x,y。比如y=[y0y1y2y3y4y5y6]x=[x0x1x2x3x4x5x6],想求函数y=a0+a1cosx+a2cos2x+a3cos3x……ancosnx... 已知x,y。比如y=[y0 y1 y2 y3 y4 y5 y6 ] x=[x0 x1 x2 x3 x4 x5 x6],想求函数y=a0+a1cosx+a2cos2x+a3cos3x……ancosnx该怎么编写程序?谢谢大神了
忘说了,需要求出的是a0 a1 a2……an
展开
兔子和小强
推荐于2016-02-26 · TA获得超过6940个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1317万
展开全部

线性模型、非线性模型是以待优化参数W为参考(而不是看X)。


y = w' * x ('表示转置)描述的是线性模型。题目中要拟合的函数是:y = w0 + w1 cos a + ... + wn cosna,它同样符合y = w' * x,其中x = (1 cosa ... cosna)’。设x构成的集合是X,y构成的集合是Y,可依据最小二乘法求出W = (XX')^-1 *X*Y。


所以程序是:

n = 3;                                            % 拟合到cos 3x

x = linspace(0, 2*pi, 100);             % 数据集

y = 1+2*cos(x)-3*cos(3*x) + rand(1, length(x)); % 加噪声

X = cos((0:n)'*x);

Y = y';

W = (X*X')^-1*X*Y;                         % 求解系数

plot(x, y, 'o', x, W'*cos((0:n)'*x));   % 画图查看

PS:MATLAB问题提问请设置问题分类为编程。

人有王侯者雄9195
2014-09-01 · 超过39用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:107万
展开全部
% By lyqmath
clc; clear all; close all;
x = 1979:2000;
y = [4.69,24.54,24.11,10.62,12.86,0.74,-7.29,9.52,-7.11,3.25,23.09,5.26,-0.26,23.99,25.55,0.45,14.54,-5.86,18.07,2.73,27.49,23.54];
xt = linspace(min(x), max(x));
yt = spline(x, y, xt);
figure; hold on; box on;
plot(x, y, 'r+')
plot(xt, yt, 'r-')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式