matlab 正交多项式,求助~Matlab关于正交多项式
相比于普通的多项式拟合,正交多项式拟合为什么可以避免结果的“病态”?
如果求精确解的话,我认为两种方式的结果应该是一样的,可是用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关于正交多项式相关推荐
- matlab小波分析求助,matlab小波分析求助
sst = nianpj; % precipitation为保存在MATLAB workspace中的年降水量矢量数据 variance = std(sst)^2; ...
- matlab caxis 刻度,[求助]MATLAB画图问题,caxis.m的问题
[求助]MATLAB画图问题,caxis.m的问题 近日在用evolutionary spectrum做一个序列的周期分析,碰到如下的问题: ??? Error using ==> set Ba ...
- matlab安装无效距离过远,求助matlab的远程序
求助matlab的远程序 function varargout = a1(varargin) % A1 M-file for a1.fig % A1, by itself, creates a new ...
- 用matlab求解jacobi,用jacobi迭代法求解线性方程,求助matlab大师
问题描述: 用jacobi迭代法求解线性方程,求助matlab大师 用jacobi迭代法求解线性方程 9x1-x2+x3=10 -x1+10x2-2x3=7 -2x1+x2+10x3=6,设迭代初值为 ...
- 求助 matlab 2015b运行cat12出现内部错误闪退
更新驱动 禁用AMD都试过了,也重新下载过软件,有大佬能知道是哪里出现了问题,该怎么解决吗 MATLAB工具里的spm其他的功能都没问题,就是用cat12分割图像的时候会出现问题 这是报错的信息 MA ...
- 求助!matlab软件下SVM(支持向量机)做回归预测,软件版本为2016b看,老是报错看,不知道怎么解决这个问题。
有大神帮忙看看吗? 网上找的代码,在我的电脑下运行,总是出错,出错位置如下: >> [py,mse] = svmpredict(Y_test,X_test,model); Mean squ ...
- matlab 使用心得,matlab 使用的一点儿体会(2)(转自饮水思源不错)
真正接触matlab一年左右,我很喜欢上了matlab的简单的语法,易于绘制图形,gui编 程也非常容易, 并且功能强大的开放式的toolbox. 因此,尽管我一直没有这方面的应用,但是我还是对 它非 ...
- matlab 提取最小值,MATLAB中取最小值的代码
matlab 最小二乘法 平面拟合的代码 p=[xyones(length(x),1)]\z这样得到的就是平面z=p(1)*x+p(2)*y+p(3)祝你学习快乐!再问:xyz轴中如何显示所拟合的平面 ...
- matlab最后ceq,matlab 中ceq是什么
matlab 中这句话是什么含义? unique(p)的意思即是给出数组p中的所有不同的元素:比如:>>A=[115623398624]A=115623398624>>c=un ...
- matlab白噪声频谱分析,matlab软件进行光谱频谱分析的方法
在MATLAB软件平台进行频谱分析并对所采集的语音信号加入干扰噪... clear allx=0:2*pi/100:2*pi; y=sin(2*pi*5*x)+0.2*randn(1,101); yy ...
最新文章
- CentOS7 扩容 / 目录
- 13. PDE_PTE属性
- 判断listview是上滑还是下滑的方法
- python自动获取cookie_selenium3+python自动化12-cookie相关操作(获取和删除)
- 【转】 IIS_WPG 用户组权限问题
- 数据库扩容 mysql_mysql数据库怎么扩容
- TSC条码打印机C#例程(tsclib.dll调用)
- 面试记录:冒泡排序都不会,大哥你会编程吗
- linux的使用 --- 安装node和express
- Java 实现JSON字符串、JSON对象和Java对象的相互转换(fastjson)
- vivado2021.2安装及验证教程(绝大部分适用于同软件其他版本)
- Apache Http Server安全漏洞解决
- MySQL查询以逗号隔开的字符串
- c# 问题 vs2017 c# 划前半大括号,下半大扣号不会显示
- ModuleNotFoundError: No module named ‘tensorflow‘
- 等了3个月终于来啦!传智播客C/C++视频教程开始更新喽~
- 华为android版本7.0,永不卡!华为手机全面升级安卓7.0:逆天
- 小米android手机密码忘了怎么解锁,小米手机锁屏密码忘了该如何解决?教你多种办法...
- 磁盘性能--IOPS和吞吐量
- 模块电路选型(7)----人机交互模块
热门文章
- Oracle官网 JDK下载 注册登录公共账号和密码
- 中介者(Mediator)模式实例
- android sd卡如何读取,Android应用中怎么读取 sd卡中的数据
- 测试用例设计——错误猜测法
- c++11新特性介绍
- python爬虫读取pdf_python中使用tabula爬取pdf数据并导出表格
- 1.2编程基础之变量定义、赋值及转换
- 【NUAAOS实验job3】
- 安装office2013报安装程序找不到OneNote.zh-cn、安装源不存在
- html progress标签的样式设置,progress后紧跟数字长度样式