求这20组数据的C++数据差值与曲线拟合的区别代码

当前位置:
正文微信扫一扫分享到朋友圈
曲线拟合成手们再熟悉不过了,整理了下收集到的代码,没搞过的朋友的自行研究并优化一下,最小二乘的公式形式的数学原理就不说了,大家可以网上查,很成熟,这里简单说说矩阵形式的最小二乘。最小二乘大约是1795 年高斯在他那星体运动轨道预报工作中提出的。后来,最小二乘法就成了估计理论的奠基石。由于最小二乘法结构简单,编制程序也不困难,所以它颇受人们重视,应用相当广泛。如用标准符号,最小二乘估计可被表示为:AX=B (2-43)上式中的解是最小化 ,通过下式中的伪逆可求得:A'AX=A'B (2-44)(A'A)^(-1)A'AX=(A'A) ^(-1)A'B (2-45)由于(A'A) ^(-1)A'A=I (2-46)所以有X=(A'A) ^(-1)A'B (2-47)此即最小二乘的一次完成算法,现代的递推算法,更适用于计算机的在线辨识&&&代码一:#include &stdio.h&#include &conio.h&#include &stdlib.h&#include &math.h&main(){int i,j,m,n=7,poly_n=2;double x[7]={1,2,3,4,6,7,8},y[7]={2,3,6,7,5,3,2};double a[3];void polyfit(int n,double *x,double *y,int poly_n,double a[]);system(&cls&);polyfit(n,x,y,poly_n,a);for (i=0;i&poly_n+1;i++)/*这里是升序排列,Matlab是降序排列*/&&&& printf(&a[%d]=%g\&,i,a[i]);getch();}/*==================polyfit(n,x,y,poly_n,a)===================*//*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*//*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*//*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/void polyfit(int n,double x[],double y[],int poly_n,double a[]){int i,j;double *tempx,*tempy,*sumxx,*sumxy,*void gauss_solve(int n,double A[],double x[],double b[]);tempx=calloc(n,sizeof(double));sumxx=calloc(poly_n*2+1,sizeof(double));tempy=calloc(n,sizeof(double));sumxy=calloc(poly_n+1,sizeof(double));ata=calloc((poly_n+1)*(poly_n+1),sizeof(double));for (i=0;i&n;i++)&&&& {&&&&& tempx[i]=1;&&&&& tempy[i]=y[i];&&&& }for (i=0;i&2*poly_n+1;i++)&&&& for (sumxx[i]=0,j=0;j&n;j++)&& {&&& sumxx[i]+=tempx[j];&&& tempx[j]*=x[j];&& }for (i=0;i&poly_n+1;i++)&&& for (sumxy[i]=0,j=0;j&n;j++)&& {&&& sumxy[i]+=tempy[j];&&& tempy[j]*=x[j];&& }for (i=0;i&poly_n+1;i++)&&&& for (j=0;j&poly_n+1;j++)ata[i*(poly_n+1)+j]=sumxx[i+j];gauss_solve(poly_n+1,ata,a,sumxy);free(tempx);free(sumxx);free(tempy);free(sumxy);free(ata);}void gauss_solve(int n,double A[],double x[],double b[]){int i,j,k,r;for (k=0;k&n-1;k++)&&&& {&&&&& max=fabs(A[k*n+k]); /*find maxmum*/&&&&& r=k;&&&&& for (i=k+1;i&n-1;i++)&& if (max&fabs(A[i*n+i]))&&&&& {&&&&&& max=fabs(A[i*n+i]);&&&&&& r=i;&&&&& }&&&&& if (r!=k)for (i=0;i&n;i++)&&&&&&&& /*changearray:A[k]&A[r] */&&&&& {&&&&&& max=A[k*n+i];&&&&&& A[k*n+i]=A[r*n+i];&&&&&& A[r*n+i]=&&&&& }&&&&&max=b[k];&&&&&&&&&&&&&&&&&&&/*change array:b[k]&b[r]&&&& */&&&&& b[k]=b[r];&&&&& b[r]=&&&&& for (i=k+1;i&n;i++)&& {&&& for (j=k+1;j&n;j++)&&&&&&&A[i*n+j]-=A[i*n+k]*A[k*n+j]/A[k*n+k];&&& b[i]-=A[i*n+k]*b[k]/A[k*n+k];&& }&&&& } &代码二://最小二乘法曲线拟合typedefCArray&double,double&CDoubleABOOL CalculateCurveParameter(CDoubleArray*X,CDoubleArray *Y,long M,long N,CDoubleArray *A){&//X,Y --&X,Y两轴的坐标&//M&&--& 结果变量组数&//N&&--& 采样数目&//A&&--& 结果参数&&register long i,j,k;&double Z,D1,D2,C,P,G,Q;&CDoubleArray B,T,S;&B.SetSize(N);&T.SetSize(N);&S.SetSize(N);&if(M&N)M=N;&for(i=0;i&M;i++)&(*A)[i]=0;&Z=0;&B[0]=1;&D1=N;&P=0;&C=0;&for(i=0;i&N;i++)&{&P=P+(*X)[i]-Z;&C=C+(*Y)[i];&}&C=C/D1;&P=P/D1;&(*A)[0]=C*B[0];&if(M&1)&{&T[1]=1;&T[0]=-P;&D2=0;&C=0;&G=0;&for(i=0;i&N;i++)& {&&Q=(*X)[i]-Z-P;&&D2=D2+Q*Q;&&C=(*Y)[i]*Q+C;&&G=((*X)[i]-Z)*Q*Q+G;& }&C=C/D2;&P=G/D2;&Q=D2/D1;&D1=D2;&(*A)[1]=C*T[1];&(*A)[0]=C*T[0]+(*A)[0];&}&for(j=2;j&M;j++)&{&S[j]=T[j-1];&S[j-1]=-P*T[j-1]+T[j-2];&if(j&=3)& {&&for(k=j-2;k&=1;k--)&&&S[k]=-P*T[k]+T[k-1]-Q*B[k];& }&S[0]=-P*T[0]-Q*B[0];&D2=0;&C=0;&G=0;&for(i=0;i&N;i++)& {&&Q=S[j];&&for(k=j-1;k&=0;k--)&&&Q=Q*((*X)[i]-Z)+S[k];&&D2=D2+Q*Q;&&C=(*Y)[i]*Q+C;&&G=((*X)[i]-Z)*Q*Q+G;& }&C=C/D2;&P=G/D2;&Q=D2/D1;&D1=D2;&(*A)[j]=C*S[j];&T[j]=S[j];&for(k=j-1;k&=0;k--)& {&&(*A)[k]=C*S[k]+(*A)[k];&&B[k]=T[k];&&T[k]=S[k];& }&}&return TRUE;}&代码三://最小二乘曲线拟合//x 双精度实型一维数组,长度为n,存放给定n个数据点x坐标//y 双精度实型一维数组,长度为n,存放给定n个数据点y坐标//n 整形变量,给定数据点的个数//a 双精度实型一维数组,长度为m,返回m-1次拟和多项式的m个系数//m 整形变量,拟和多项式的项数,m&20且m & n//dt 双精度实型一维数组,长度3,dt[0]返回拟和多项式与数据点误差的平方和//dt[1]返回拟和多项式与数据点误差的绝对值之和,dt[2]返回拟和多项式与数据点误差绝对值的最大值&#include &math.h&&void hpir1(double *x,double *y,int n,double *a,int m,double *dt)//&int n,m;//&double x[],y[],a[],dt[];& {int i,j,k;&&&double z,p,c,g,q,d1,d2,s[20],t[20],b[20];&&&for (i=0; i&=m-1; i++) a[i]=0.0;&&&if (m&n) m=n;&&&if (m&20) m=20;&&&z=0.0;&&&for (i=0; i&=n-1; i++) z=z+x[i]/(1.0*n);&&&b[0]=1.0; d1=1.0*n; p=0.0; c=0.0;&&&for (i=0; i&=n-1; i++)&&&&&{ p=p+(x[i]-z); c=c+y[i];}&&&c=c/d1; p=p/d1;&&&a[0]=c*b[0];&&&if (m&1)&&&&&{ t[1]=1.0; t[0]=-p;&&&&&&&d2=0.0; c=0.0; g=0.0;&&&&&&&for (i=0; i&=n-1; i++)&&&&&&&&&{ q=x[i]-z-p; d2=d2+q*q;&&&&&&&&&&&c=c+y[i]*q;&&&&&&&&&&&g=g+(x[i]-z)*q*q;&&&&&&&&&}&&&&&&&c=c/d2; p=g/d2; q=d2/d1;&&&&&&&d1=d2;&&&&&&&a[1]=c*t[1]; a[0]=c*t[0]+a[0];&&&&& }&&&for (j=2; j&=m-1; j++)&&&&&{ s[j]=t[j-1];&&&&&&&s[j-1]=-p*t[j-1]+t[j-2];&&&&&&&if (j&=3)&&&&&&&&&for (k=j-2; k&=1; k--)&&&&&&&&&&&s[k]=-p*t[k]+t[k-1]-q*b[k];&&&&&&&s[0]=-p*t[0]-q*b[0];&&&&&&&d2=0.0; c=0.0; g=0.0;&&&&&&&for (i=0; i&=n-1; i++)&&&&&&&&&{ q=s[j];&&&&&&&&&&&for (k=j-1; k&=0; k--)&&&&&&&&&&&&& q=q*(x[i]-z)+s[k];&&&&&&&&&&&d2=d2+q*q; c=c+y[i]*q;&&&&&&&&&&&g=g+(x[i]-z)*q*q;&&&&&&&&&}&&&&&&&c=c/d2; p=g/d2; q=d2/d1;&&&&&&&d1=d2;&&&&&&&a[j]=c*s[j]; t[j]=s[j];&&&&&&&for (k=j-1; k&=0; k--)&&&&&&&&&{ a[k]=c*s[k]+a[k];&&&&&&&&&&&b[k]=t[k]; t[k]=s[k];&&&&&&&&&}&&&&&}&&&dt[0]=0.0; dt[1]=0.0; dt[2]=0.0;&&&for (i=0; i&=n-1; i++)&&&&&{ q=a[m-1];&&&&&&&for (k=m-2; k&=0; k--)&&&&&&&&&q=a[k]+q*(x[i]-z);&&&&&&&p=q-y[i];&&&&&&&if (fabs(p)&dt[2]) dt[2]=fabs(p);&&&&&&&dt[0]=dt[0]+p*p;&&&&&&&dt[1]=dt[1]+fabs(p);&&&&&}&&&& }&代码四:&/*用最小二乘法进行曲线拟合.用p-1 次多项式进行拟合,p&= 10;x,y 的第0个域x[0],y[0],没有用,有效数据从x[1],y[1] 开始nNodeNum,有效数据节点的个数。b,为输出的多项式系数,b[i] 为b[i-1]次项。b[0],没有用。b,有10个元素ok。*/void CurveFit(double *x,double *y,int p,intnNodeNum, double *b){&&&&&&& intt=nNodeN&&&&&&& doublea[10][10];&&&&&& inti=1;&& //核心程序&&&int j=1;&&&int k=1;&&&double ss=0.0;&&&&&&&&&&&&&&& memset(a,0,sizeofa);&&&for(j=1;j&=p;j++)&&& {&&&&&for(i=1;i&=j;i++)&&&&&{&&&&&&&ss=0.0;&&&&&&for( k=1;k&=t;k++)&&&&&&&{&&&&&&&&&ss=ss+pow(x[k],i+j-2);&&&&&&&}&&&&&&&a[i][j] =&&&&&&&a[j][i]=&&&&&}&&& }&&&for(i=1;i&=p;i++)&&& {&&&&&ss=0.0;&&&&&for(k=1;k&=t;k++)&&&&&{&&&&&&&ss=ss+y[k]*pow(x[k],i-1);&&&&&}&&&&&b[i] =&&& }&&&for(k=1;k&=p;k++)&&& {&&&&&m=fabs(a[k][k]);r=k;&&&&&//选主元&&&&&for(i=k;i&=p;i++)&&&&&{&&&&&&&if( m & fabs(a[i][k]) )&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&m=fabs(a[i][k]);&&&&&&&&&r=i;&&&&&&&}&&&&&}&&&&&//交换两行&&&&&if(r&k)&&&&&{&&&&&&&for(j=k;j&=p;j++)&&&&&&&{&&&&&&&&&temp=a[k][j];&&&&&&&&&a[k][j]=a[r][j];&&&&&&&&&a[r][j]=&&&&&&&}&&&&&&&temp=b[k];&&&&&&&b[k]=b[r];&&&&&&&b[r]=&&&&&}&&&&&//消元计算&&&&&for(j=k+1;j&=p;j++)&&&&&&&a[k][j]=a[k][j]/a[k][k];&&&&&b[k]=b[k]/a[k][k];&&&&&for(i=1;i&=p;i++)&&&&&{&&&&&&&if(i==k)&&&&&&&for(j=k+1;j&=p;j++)&&&&&&&&&a[i][j]=a[i][j]-a[i][k]*a[k][j];&&&&&&}&&&&&for(i=1;i&=p;i++)&&&&&{&&&&&&&if(i==k)&&&&&&&b[i]=b[i]-a[i][k]*b[k];&&&&&&}&&&&&& }}===============感谢大家的支持,由于时间太紧(经常加班到很晚),很多地方大嘴只能大概介绍,会较广,但未必很细,这里只给您指出知识的一个方向,至于深度上,还请大家根据感兴趣的文章多搜集资料,大嘴也在不断学习中,一起努力吧!===============声明:本微信公众号(本微博)所发表的内容均为非营利性,不用于任何商业用途。大嘴所发文章中的部分文字及大多数图片均来自互联网,如果您认为大嘴侵犯到了您的版权,请联系大嘴,大嘴会及时删除相关内容。「大嘴说图像」内容涵盖计算机图像处理、模式识别、计算机视觉、智能交通、安防等领域的相关知识。其中,既有大嘴的原创,也有大嘴多年来收集和整理的资料。在创作、筛选文章的同时,大嘴也得以再一次巩固、沉淀上述知识。自娱自乐之外,如果能为您打开一扇了解计算机图像处理相关知识的大门,大嘴将不胜荣幸!对本公众号如有任何意见或建议,请直接发微信与大嘴联系。欢迎关注同名微信公众号&大嘴说图像&,头像为微信二维码。(1)我的新浪微博http://weibo.com/cvchina2dazuiimage(2)新浪博客http://blog.sina.com.cn/cvchina2dazuiimage(3)微信公众号“大嘴说图像”尽可能保证每天至少一篇文章,希望和大家一起努力,并通过网络结识更多的业内朋友和图像爱好者。感谢您对大嘴的支持和信任!大嘴QQ:QQ群:(北京图像视觉技术交友),招募全国各地的业内爱好者以及志同道合的朋友中!本QQ群宗旨:图形学/图像处理/机器视觉/模式识别行业爱好者交流、交友及聚会。群主大嘴以及管理员们将在北京不定期举行群内好友聚会,聚会方式:喝酒、品茶、爬山以及所有正能量活动,在现实中和朋友们交流学习、生活和工作,互相解决问题。
分享给好友分享到微信朋友圈:第一步 打开微信底部扫一扫第二步 扫下面的文章二维码第三步 右上角点击转发下一篇:
相关文章Relevant
<li class="w first">从历史的角度来看,2017年有可能会为一些重大变化的“起头”,但不要期待很快就会有结果。文 | 韩福东来源:<li class="w first">习声回响,原声放送!<li class="w first">雾霾严重时你所在的省市公交车免费吗?<li class="w first">人的正常寿命是多少岁?按照密宗讲,是120岁.近代的虚云长老活到了一百二十岁.上次我去漳州佛光寺,妙智老和尚成就肉身菩萨...<li class="w first">前天,有微友发微信向“律师来了”咨询:我今年27岁,是一个全职妈妈,家在杭州.老公比我大5岁,也是杭州人,但他被公司外派...<li class="w first">不要去骗一个对你好的人,因为他不是对人人都好;一辈子碰到一个这样的人不容易.错过一辆车,可以等,错过一个人,也许就是一...<li class="w first">迪士尼新作《奇幻森林》今天跟大家见面了评分相当不错!老规矩,探片小分队提前试深浅总体上,这部电影还是很值进影院观看的单...<li class="w first">一中国女士从英国回来探亲,顺便带着她的洋老公和洋婆婆到中国旅游.这位女士有两个孩子,一个5岁,一个3岁,都是由她自己当全...<li class="w first">昨天,杭州的陈大姐接到前几天请假的保姆张阿姨从老家建德打来的电话,说自己的儿媳妇生了个儿子. 陈大姐连忙道喜祝贺,可是电...<li class="w first">就是他!他在三鹿奶粉事件中被记过处分,罚酒三杯后不降反升,当上了国家食药监局副局长、药品安全总监.而三聚氰胺案爆料人蒋...如何用C++实现非线性曲线拟合?求高手解答,谢谢
[问题点数:50分]
如何用C++实现非线性曲线拟合?求高手解答,谢谢
[问题点数:50分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
匿名用户不能发表回复!|没有更多推荐了,
不良信息举报
举报内容:
基于最小二乘法的曲线拟合的C++代码的实现
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!&>&曲线拟合c++代码
曲线拟合c++代码
上传大小:2KB
曲线拟合c++,在学数值分析(计算方法)的同学可以参考一下,是我自己编的哦
综合评分:3
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有19条
有点乱,但有一定价值。
比较粗糙,算法有点乱啊
比较粗糙,算法有点乱啊
积分&327451
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
曲线拟合c++代码
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
曲线拟合c++代码

我要回帖

更多关于 数据差值与曲线拟合的区别 的文章

 

随机推荐