|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 牛小贱 于 2014-3-7 20:28 编辑
首先是我编的切比雪夫的公式:
- function T=Chebyshev2(n)
- syms x
- T(1:n)=sym(zeros(1,n));
- T(1)=1;
- T(2)=x;
- for i=3:n
- T(i)=2*x*T(i-1)-T(i-2);
- end
复制代码 然后是用最小二乘法拟合函数
- function f=li2_23(c,x)
- T=Chebyshev2(4);
- f=c(1)*T(1)+c(2)*T(2)+c(3)*T(3)+c(4)*T(4);
复制代码 最后是主程序:
- clear all
- f=@(x)sin(x)
- x=-6:0.2:6;
- y=f(x);
- plot(x,y,'*')
- grid on;
- hold on;
- c0=ones(1,4); %迭代初值
- c=lsqcurvefit(@li2_23,c0,x,y); %调用函数
- g=@(x)c(1)*T(1)+c(2)*T(2)+c(3)*T(3)+c(4)*T(4) %构建拟合函数
- x_g=-6:0.1:6;
- y_g=g(x_g);
- plot(x_g,y_g)
- hold off
- legend('原始数据','拟合数据');
- c
复制代码 ??? Error using ==> lsqncommon at 191
Function value and YDATA sizes are incommensurate
但是把T=Chebyshev2(4)单独拿出运行,并且在多项式乘方加点。T=[ 1, x, 2*x.^2 - 1, 2.*x.*(2.*x.^2 - 1) - x];然后把T(1),T(2),T(3),T(4)代入就可以运行。所以我的问题是怎么Chebyshev2(n)生成 的sym矩阵方便的转化为T=[ 1, x, 2*x.^2 - 1, 2.*x.*(2.*x.^2 - 1) - x];(乘积带点)。毕竟当阶数较高时候,挨个展开带进去不太方便。谢谢
|
|