相比于普通的多项式拟合,正交多项式拟合为什么可以避免结果的“病态”?

如果求精确解的话,我认为两种方式的结果应该是一样的,可是用matlab求解时却发现两种方法所求解不同。

不过程序中确实有点为题,用subs(P,x,x0')时无法将x0设置为符号变量,否则出错,这很可能是问题所在。求解决方式?

程序如下:

%comparsion

clear;clc;close all

% x0=[0:5:5000];

% y0 = rand(1,1001);

x0=[0:5:50];

y0=[0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.60 4.66];

j=5;%用于拟合的多项式的阶数

syms x

%part1 正交多项式

f1 = number3_4_1(x0,y0,j);

%part2 多项式最小二乘法

for i = 1:j

right(i) = sum( sym(y0) .*( sym(x0) .^i ) );

for col = 1:j+1

left(i,col) = sum( sym(x0) .^(i+col-1)) ;

end

end

right=[sum( sym(y0) ) sym(right)]';

for col = 1:j+1

left_0(1,col) = sum(sym(x0).^(col-1)) ;

end

left = [sym(left_0);sym(left)];

a = sym(left)\sym(right);

f2=sym(0);

for i=0:j

f2=sym(a(i+1))*sym(x^i)+sym(f2);

end

x_result=linspace(min(x0),max(x0),100 );

y_result1=subs(f1,x,x_result);

plot(x_result,y_result1,'k-','linewidth',2)

hold on;

y_result2=subs(f2,x,x_result);

plot(x_result,y_result2,'r:','linewidth',2)

hold on;

plot(x0,y0,'g*','linewidth',6);%原始数据

legend('正交多项式','多项式','原始数据',4)

title('对比不同的多项式拟合与正交多项式拟合的区别')

disp('正交多项式 误差')

e1=sum((sym(subs(f1,x,x0)) - y0).^2)

disp('普通方法 误差')

e2=sum( (sym(subs(f2,x,x0)) - y0).^2 )

disp('正交多项式结果-普通 结果')

f1-f2

disp('正交多项式误差-普通误差');

vpa(e1-e2,100)

function [ f ]=number3_4V3(t,y0,j)

%t为自变量,y0为因变量,j为多项式次数,返回值为一个以x为自变量的函数

syms x

n=length(t)-1;

x0=( ( t-t(1)) ./ (t(2)-t(1)) );

%计算 等距节点正交多项式系

for m=1:j

tem=sym(0);

for k=0:m;

tem = tem + (-1).^ k .*sym(C(m ,k )) .* sym(C(m+k,k)) .* sym(A(x,k)) ./ sym(A(n,k));

end

P(m) = tem;

end

P_0=1;

c=sym(subs(P,x,x0')');

for tem=0:j

if tem == 0

a0 = sum(sym(y0))./length(t);

else

a(tem) = sum(sym(y0) .* sym(c(tem,:)) )./sum(sym(c(tem,:)).^2);

end

end

f = a0.*P_0+ sum(sym(a).* sym(P) );

f = sym(subs(f,x, (x-t(1)) ./ (t(2)-t(1)) ));

输出结果为:

正交多项式 误差

e1 =

28820549865669330036715397433160276396043/13899570998423392168470997453469028188160000

普通方法 误差

e2 =

302339600107555992480375312342291427/145812302572877229550534221637877760000

正交多项式结果-普通 结果

ans =

- (2479161226123280437*x^5)/376581359950612816843364735387550000000 + (2479161226123280437*x^4)/3012650879604902534746917883100400000 - (5186546163633931896713043058946500674121610307713746483*x^3)/144174461244191106818664917310583498654719677607615064840881367798800000 + (1231759627369364964570586945966702607518781683100315183*x^2)/1922326149922548090915532230807779982062929034768200864545084903984000 - (5147997962536725204022628139908088663858936331593379753*x)/1310676920401737334715135611914395442315633432796500589462557889080000 + 42435765926320277124637336601280584101980690981210053/16019384582687900757629435256731499850524408623068340537875707533200

正交多项式误差-普通误差

ans =

-0.0000000000000001177405026299908265410470890880057401039916611644782859221968376568377074022167077503806116079734971

matlab 正交多项式,求助~Matlab关于正交多项式相关推荐

  1. matlab小波分析求助,matlab小波分析求助

    sst = nianpj;          % precipitation为保存在MATLAB workspace中的年降水量矢量数据 variance = std(sst)^2;          ...

  2. matlab caxis 刻度,[求助]MATLAB画图问题,caxis.m的问题

    [求助]MATLAB画图问题,caxis.m的问题 近日在用evolutionary spectrum做一个序列的周期分析,碰到如下的问题: ??? Error using ==> set Ba ...

  3. matlab安装无效距离过远,求助matlab的远程序

    求助matlab的远程序 function varargout = a1(varargin) % A1 M-file for a1.fig % A1, by itself, creates a new ...

  4. 用matlab求解jacobi,用jacobi迭代法求解线性方程,求助matlab大师

    问题描述: 用jacobi迭代法求解线性方程,求助matlab大师 用jacobi迭代法求解线性方程 9x1-x2+x3=10 -x1+10x2-2x3=7 -2x1+x2+10x3=6,设迭代初值为 ...

  5. 求助 matlab 2015b运行cat12出现内部错误闪退

    更新驱动 禁用AMD都试过了,也重新下载过软件,有大佬能知道是哪里出现了问题,该怎么解决吗 MATLAB工具里的spm其他的功能都没问题,就是用cat12分割图像的时候会出现问题 这是报错的信息 MA ...

  6. 求助!matlab软件下SVM(支持向量机)做回归预测,软件版本为2016b看,老是报错看,不知道怎么解决这个问题。

    有大神帮忙看看吗? 网上找的代码,在我的电脑下运行,总是出错,出错位置如下: >> [py,mse] = svmpredict(Y_test,X_test,model); Mean squ ...

  7. matlab 使用心得,matlab 使用的一点儿体会(2)(转自饮水思源不错)

    真正接触matlab一年左右,我很喜欢上了matlab的简单的语法,易于绘制图形,gui编 程也非常容易, 并且功能强大的开放式的toolbox. 因此,尽管我一直没有这方面的应用,但是我还是对 它非 ...

  8. matlab 提取最小值,MATLAB中取最小值的代码

    matlab 最小二乘法 平面拟合的代码 p=[xyones(length(x),1)]\z这样得到的就是平面z=p(1)*x+p(2)*y+p(3)祝你学习快乐!再问:xyz轴中如何显示所拟合的平面 ...

  9. matlab最后ceq,matlab 中ceq是什么

    matlab 中这句话是什么含义? unique(p)的意思即是给出数组p中的所有不同的元素:比如:>>A=[115623398624]A=115623398624>>c=un ...

  10. matlab白噪声频谱分析,matlab软件进行光谱频谱分析的方法

    在MATLAB软件平台进行频谱分析并对所采集的语音信号加入干扰噪... clear allx=0:2*pi/100:2*pi; y=sin(2*pi*5*x)+0.2*randn(1,101); yy ...

最新文章

  1. CentOS7 扩容 / 目录
  2. 13. PDE_PTE属性
  3. 判断listview是上滑还是下滑的方法
  4. python自动获取cookie_selenium3+python自动化12-cookie相关操作(获取和删除)
  5. 【转】 IIS_WPG 用户组权限问题
  6. 数据库扩容 mysql_mysql数据库怎么扩容
  7. TSC条码打印机C#例程(tsclib.dll调用)
  8. 面试记录:冒泡排序都不会,大哥你会编程吗
  9. linux的使用 --- 安装node和express
  10. Java 实现JSON字符串、JSON对象和Java对象的相互转换(fastjson)
  11. vivado2021.2安装及验证教程(绝大部分适用于同软件其他版本)
  12. Apache Http Server安全漏洞解决
  13. MySQL查询以逗号隔开的字符串
  14. c# 问题 vs2017 c# 划前半大括号,下半大扣号不会显示
  15. ModuleNotFoundError: No module named ‘tensorflow‘
  16. 等了3个月终于来啦!传智播客C/C++视频教程开始更新喽~
  17. 华为android版本7.0,永不卡!华为手机全面升级安卓7.0:逆天
  18. 小米android手机密码忘了怎么解锁,小米手机锁屏密码忘了该如何解决?教你多种办法...
  19. 磁盘性能--IOPS和吞吐量
  20. 模块电路选型(7)----人机交互模块

热门文章

  1. Oracle官网 JDK下载 注册登录公共账号和密码
  2. 中介者(Mediator)模式实例
  3. android sd卡如何读取,Android应用中怎么读取 sd卡中的数据
  4. 测试用例设计——错误猜测法
  5. c++11新特性介绍
  6. python爬虫读取pdf_python中使用tabula爬取pdf数据并导出表格
  7. 1.2编程基础之变量定义、赋值及转换
  8. 【NUAAOS实验job3】
  9. 安装office2013报安装程序找不到OneNote.zh-cn、安装源不存在
  10. html progress标签的样式设置,progress后紧跟数字长度样式