-
MATLAB polyfit曲线拟合及拟合最高次幂的选择
2018-07-01 16:45:23函数:p = polyfit(x,y,n)其中:x是已知的离散数据点的横坐标,y是已知离散数据点的纵坐标,n为需要拟合的最高次幂,由我们给定,运用不同的多项式进行拟合,返回值p从左到右是高次到低次的多项式p(x)的系数,长度是...polyfit:最小二乘多项式曲线拟合
已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值。
函数:p = polyfit(x,y,n)
其中:x是已知的离散数据点的横坐标,y是已知离散数据点的纵坐标,
n为需要拟合的最高次幂,由我们给定,运用不同的多项式进行拟合,
返回值p从左到右是高次到低次的多项式p(x)的系数,长度是n+1p(x)=p1xn+p2xn−1+...+pnx+pn+1
函数:y=polyval(p,x); %根据拟合的函数得出x对应的因变量y的值
多项式n的阶数的确定:
可以用MATLAB的拟合工具箱,cftool进行选择
在MATLAB主窗口中输入 cftool 回车 ,会弹出拟合工具箱界面
选择拟合的参数,在右上角选择拟合方式为“Polynomial”,然后通过选择不同的degree,看右下角看离散点是否落在拟合曲线是以及Results里的SSE(方差)和R-square(相关系数),上图中的拟合,可以看到离散点都落在了拟合线上,并且相关系数为1,方差在-9的数量级上,拟合良好。
-
绘制二次三次曲线多次曲线
2017-11-08 13:33:00说明:大于一的幂级数与陡峭程度正相关,小于一的幂级数相当于曲线顺时针旋转90°,底数增减的量决定在横轴的平移。 <!DOCTYPE html> <html lang="utf-8"> <meta ...说明:大于一的幂级数与陡峭程度正相关,小于一的幂级数相当于曲线顺时针旋转90°,底数增减的量决定在横轴的平移。
<!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <head> <title>绘制二次三次曲线多次曲线</title> </head> <body οnlοad="draw()"> <canvas id="myCanvus" width="1300px" height="640px" style="border:1px dashed black;"> 出现文字表示你的浏览器不支持HTML5 </canvas> </body> </html> <script type="text/javascript"> <!-- function draw(){ var canvas=document.getElementById("myCanvus"); var canvasWidth=1300; var canvasHeight=640; var context=canvas.getContext("2d"); context.fillStyle = "white"; context.fillRect(0, 0, canvasWidth, canvasHeight); context.strokeStyle = "black"; context.fillStyle = "black"; // 进行坐标变换:把原点放在左下角,东方为X轴正向,北方为Y轴正向 var offsetY=320;// Y向偏移值,正值向上偏,用来画坐标轴 var offsetX=650;// X向偏移值,正值向右偏,用来画坐标轴 context.save(); context.translate(0+offsetX,canvasHeight-offsetY); drawAxisXText(context);// 文字和线分开画比较好处理 drawAxisYText(context); drawTitleText(context); context.rotate(getRad(180)); context.scale(-1,1); drawAxisX(context); drawAxisY(context); drawCurve(context); context.restore(); } function drawTitleText(ctx){ ctx.lineWidth=0.5; ctx.strokeStyle='navy'; ctx.fillStyle='navy'; var x=350; var y=-250; // 写文字 ctx.fillText("y=x^2 红色",x,y); ctx.fillText("y=(x-3)^3 绿色",x,y+20); ctx.fillText("y=(x-5)^4 黄色",x,y+40); ctx.fillText("y=(x-7)^5 青柠色",x,y+60); ctx.fillText("y=(x+3)^0.5 紫色",x,y+80); ctx.fillText("y=(x+5)^0.33 栗色",x,y+100); ctx.fillText(" 绘制:逆火狂飙",x+170,y+30); } function drawCurve(ctx){ var cds=[{}]; var cds1=[{}]; var cds2=[{}]; var cds3=[{}]; var cds4=[{}]; var cds5=[{}]; var cds6=[{}]; var x,y,arr; for(x=-13;x<=13;x+=0.01){ y=Math.pow(x,2);// arr={"x":x,"y":y}; cds.push(arr); y=Math.pow(x-3,3);// arr={"x":x,"y":y}; cds1.push(arr); y=Math.pow(x-5,4);// arr={"x":x,"y":y}; cds2.push(arr); y=Math.pow(x-7,5);// arr={"x":x,"y":y}; cds3.push(arr); y=Math.pow(x+3,1/2);// arr={"x":x,"y":y}; cds4.push(arr); y=Math.pow(x+5,1/3);// arr={"x":x,"y":y}; cds5.push(arr); } paintCurve(ctx,"red",cds); paintCurve(ctx,"green",cds1); paintCurve(ctx,"yellow",cds2); paintCurve(ctx,"lime",cds3); paintCurve(ctx,"purple",cds4); paintCurve(ctx,"maroon",cds5); //paintCurve(ctx,"maroon",cds6);*/ /*var ymax=-1000,ymin=1000,xmax,xmin; for(var i=0; i<cds.length; i++){ // 求y最大值 if(cds[i].x<0 && cds[i].y>ymax){ ymax=cds[i].y; xmax=cds[i].x; } // 求y最小值 if(cds[i].x>=0 && cds[i].y<ymin){ ymin=cds[i].y; xmin=cds[i].x; } } console.log("ymin="+ymin+" xmin="+xmin+" ymax="+ymax+" ymin="+ymin+" xmax="+xmax); var SU=50;// Scale Unit // 极大值 ctx.beginPath(); ctx.moveTo(xmax*SU,ymax*5-5); ctx.lineTo(xmax*SU,ymax*5+5); ctx.save(); ctx.scale(1,-1); ctx.fillText("ymax="+cutShort(ymax.toString(),8),xmax*SU,-ymax*5); ctx.restore(); ctx.stroke(); ctx.closePath(); // 极小值 ctx.beginPath(); ctx.moveTo(xmin*SU,ymin*5-5); ctx.lineTo(xmin*SU,ymin*5+5); ctx.save(); ctx.scale(1,-1); ctx.fillText("ymin="+ymin,xmin*SU,-ymin*5); ctx.restore(); ctx.stroke(); ctx.closePath();*/ } function paintCurve(ctx,color,cds){ var SU=50;// Scale Unit ctx.strokeStyle = color; ctx.beginPath(); for(var i=0; i<cds.length; i++){ ctx.lineTo(cds[i].x*SU,cds[i].y*SU);// 注意y轴比例 } ctx.stroke(); ctx.closePath(); } function drawAxisX(ctx){ ctx.save(); ctx.lineWidth=0.5; ctx.strokeStyle='navy'; ctx.fillStyle='navy'; var start=-650; var end=650; // 画轴 ctx.beginPath(); ctx.moveTo(start, 0); ctx.lineTo(end, 0); ctx.stroke(); ctx.closePath(); // 画箭头 ctx.beginPath(); ctx.moveTo(end-Math.cos(getRad(15))*10, Math.sin(getRad(15))*10); ctx.lineTo(end, 0); ctx.lineTo(end-Math.cos(getRad(15))*10, -Math.sin(getRad(15))*10); ctx.stroke(); ctx.closePath(); // 画刻度 var x,y; y=5; for(x=start;x<end;x+=50){ ctx.beginPath(); ctx.moveTo(x, 0); ctx.lineTo(x, y); ctx.stroke(); ctx.closePath(); } ctx.restore(); } function drawAxisXText(ctx){ ctx.lineWidth=0.5; ctx.strokeStyle='navy'; ctx.fillStyle='navy'; var start=-650; var end=650; // 写文字 var x,y=5; for(x=start;x<end;x+=50){ ctx.fillText(x/50,x,y+10); } } function drawAxisY(ctx){ ctx.save(); ctx.lineWidth=0.5; ctx.strokeStyle='navy'; ctx.fillStyle='navy'; var start=-300; var end=300; // 画轴 ctx.beginPath(); ctx.moveTo(0, start); ctx.lineTo(0, end); ctx.stroke(); ctx.closePath(); // 画箭头 ctx.beginPath(); ctx.moveTo(Math.sin(getRad(15))*10, end-Math.cos(getRad(15))*10); ctx.lineTo(0, end); ctx.lineTo(-Math.sin(getRad(15))*10, end-Math.cos(getRad(15))*10); ctx.stroke(); ctx.closePath(); // 画刻度 var x,y; x=5; for(y=start;y<end;y+=50){// 注意y轴比例 ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(0, y); ctx.stroke(); ctx.closePath(); } } function drawAxisYText(ctx){ ctx.lineWidth=0.5; ctx.strokeStyle='navy'; ctx.fillStyle='navy'; var start=-250; var end=350; // 写文字 var x=-19,y=5; for(y=start;y<end;y+=50){ if(y!=0){ ctx.fillText(-y/50,x,y);// 注意y轴比例 } } } function getRad(degree){ return degree/180*Math.PI; } function cutShort(str,length){ if(str.length>length){ str=str.substr(0,length)+"..."; } return str; } //--> </script>
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/8157169.html,如需转载请自行联系原作者
-
图像处理-基本算法之幂次变换
2012-06-13 12:56:45幂次变换的基本表达式为:y=cxr+b 其中c、r均为正数。与对数变换相同,幂次变换将部分灰度区域映射到更宽的区域中。当r=1时,幂次变换转变为线性变换。 (1) 当r (2) 当r>0时,变换函数曲线在正比函数下方...幂次变换的基本表达式为:y=cxr+b
其中c、r均为正数。与对数变换相同,幂次变换将部分灰度区域映射到更宽的区域中。当r=1时,幂次变换转变为线性变换。
(1) 当r<0时,变换函数曲线在正比函数上方。此时扩展低灰度级,压缩高灰度级,使图像变亮。这一点与对数变换十分相似。
(2) 当r>0时,变换函数曲线在正比函数下方。此时扩展高灰度级,压缩低灰度级,使图像变暗。
代码如下:
- /******************************************************************************
- * 作用: 幂次变换函数
- * 参数: pDst 输出图像的像素数组
- * 参数: pSrc 原始图像的像素数组
- * 参数: nWidth 原始图像宽度
- * 参数: nHeight 原始图像高度
- * 参数: b 控制参数,表示曲线的上下偏移量
- * 参数: c 控制参数,表示曲线的弯曲程度
- * 参数: r 控制参数,表示函数的幂次
- * 备注: 此函数对于彩色图同样适用
- ******************************************************************************/
- int PowerTrans(BYTE* pDst, BYTE* pSrc, int nWidth, int nHeight, double b, double c, double r)
- {
- if (!pSrc || !pDst)
- {
- return EXIT_FAILURE;
- }
- // 映射表,用于256种灰度变换后的值
- BYTE map[256];
- // 保存运算后的临时值
- double dTemp;
- int i, j;
- for (i = 0; i < 256; i++)
- {
- // 计算当前像素变换后的值
- dTemp = c * pow(i / 255.0, r) * 255 + b;
- // 如果超界则修改其值
- if (dTemp < 0)
- dTemp = 0.0;
- else if (dTemp > 255)
- dTemp = 255;
- // 四舍五入
- map[i] = int(dTemp + 0.5);
- }
- for (i = 0; i < nWidth * nHeight; i++)
- {
- for (j = 0; j < 4; j++)
- pDst[i*4+j] = map[ pSrc[i*4+j] ];
- }
- return EXIT_SUCCESS;
- }
-
转:Matlab拟合曲线之幂律分布
2019-07-06 11:26:38这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持...https://blog.csdn.net/u011089523/article/details/79182932
收集的问题:
如何用matlab来拟合幂律分布,怎样将拟合值和实际值进行对比,放在一个图中,又如何检验实际数据是否符合拟合函数。
如果不符合,如何来直接判断实际数据服从什么样的函数分布呢
在MATLAB里,对数据进行拟合,在双对数坐标下,看数据是否符合幂律分布,求出幂指数,并绘出图形。-In MATLAB, the pairs of data fitting, in double logarithmic coordinates to see whether the data meet the power-law distribution, find the power index, and draw the graph.以傅雷书信为例:(平移237个单位时间)“>>”后是输入内容,行开头不含“>>”的是MATLAB运行的结果,“/”后是注释部分
x=[ ]; / 输入修正的书信间隔时间
y=[ ]; / 输入累积概率
loglog(x,y,‘ko’) / 画出双对数下坐标图(k表示黑色,o表示圆圈)
hold on / 保留刚才所画图表,以便继续在此图画出拟合直线
a=polyfit(log(x),log(y),1) / 求拟合直线的参数(一次项和常数项)
a =
-1.0700 5.9525
b=2.71828^5.9525 / 常数项转化
b =
384.7124
x=100:100000; / 根据上面所作的图指定x的取值范围
y=b*x.^ -1.0700 ; / 根据刚才的计算输入x和y的关系式
plot(x,y,‘k’) / 在双对数坐标下画出拟合直线
上面程序即可得到我们需要的图形,图形的再编辑可以在Figure窗口下的Edit-Figure Properties里修改(颜色、线条粗细、坐标轴命名等)。
但是得注意的是,用这个plotfit函数不太能够用来拟合很复杂的函数,而只是用来拟合线性的、二维之类的,而用它来拟合幂律分布的曲线时,只能考虑先截取一部分的点,然后用这个函数去拟合。
MATLAB软件提供了基本的曲线拟合函数的命令.
多项式函数拟合:P=polyfit(x,y,n)
其中n表示多项式的最高阶数,x,y为将要拟合的数据,它是用数组的方式输入.输出参数P为拟合多项式 P(1)*X^N + P(2)*X^(N-1) +…+ P(N)*X + P(N+1).的系数
多项式在x处的值y可用下面程序计算.
y=polyval(P,x,m)线性:m=1, 二次:m=2, …
polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。
例:
x=0:0.1:1;
y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
A=polyfit(x,y,2)
Z=polyval(A,x);
Plot(x,y,’r*’,x,z,’b’)
polyfit不能保证你每次都能得到最优解,math的答案是使用数值计算。
个人认为,对于这种非线性的曲线,尽量不要使用ployfit, ployfit多项式抑合适合线性方程!!
用polyfit()函数去拟合这么复杂的曲线不太合适,polyfit()函数对于数据遵循多项式分布是比较好的,一般来说,利用polyfit()函数拟合的阶数不要超过5阶。
如果是不需要得到拟合曲线的函数,只是把这些点利用一些光滑曲线连接,建议使用三次样条函数spline()进行插值即可。
-
Winform中设置ZedGraph的坐标轴的标题和刻度不显示十次幂
2020-05-19 10:56:28场景 Winforn中设置ZedGraph曲线图的属性、坐标轴属性、刻度...如图Y轴的数据本来是0.00069,可是坐标轴却自动格式化显示了十次幂,如果不要十次幂显示就要显示真实的数据 。 注: 博客主页:https://blog.csdn.net. -
任意次多项式曲线拟合(Delphi类)
2008-11-15 11:25:38一个采用Delphi编制的任意次多项式曲线拟合类及其演示算例。有四种多项式可供选择:幂指数多项式、勒让德多项式、车比雪夫多项式、埃米特多项式,并实现了拟合后曲线的求导运算。可用于实验数据分析方面的编程。 -
zedgraph显示最小刻度_Winform中设置ZedGraph的坐标轴的标题和刻度不显示十次幂
2020-12-20 13:53:56场景Winforn中设置ZedGraph曲线图的属性、坐标轴属性、刻度属性:但是在坐标轴的数据量比较大的时候,坐标轴的默认设置会自动添加十次幂,包括标题和刻度。如下图所示:如图Y轴的数据本来是0.00069,可是坐标轴却... -
2的负x次幂图像_微博搜索
2021-01-26 11:54:57注:上述公式适合一切圆锥曲线。如果焦点内分(指的是焦点在所截线段上),用该公式;如果外分(焦点在所截线段延长线上),右边为(x+1)/(x-1),其他不变。2 展开全文c高中数学49种快速做题方法1 . 适用条件[直线过... -
快速幂算法详解&&快速幂取模算法详解
2020-01-28 11:22:29为什么需要快速幂算法 ...顾名思义,快速幂就是快速算底数a的n次幂(即an)的算法。 其时间复杂度是O(logn),效率比朴素算法大大提高。 看,下图就是大致的对数曲线和线性的比较,可见对数比起线性是好的太... -
wps表格在拟合曲线找点_excel如何拟合曲线方程
2020-12-31 05:13:45包括添加平滑曲线,线性,指数,幂,多项式(如二次曲线,三次曲线。。),对数拟合。把实验数据输入excel中,两个变量的最好做成两个竖排。选中所有数据,注意不要把文字也选上了。在菜单栏中点“插入”,然后选择... -
newdate时间比系统慢14小时_为什么丰田汽车内部物流系统的配送间隔时间为2的m次幂小时?下...
2021-01-16 12:11:23作者|杨东全文总计1302字,需阅读4分钟,以下为今天的益者原创:Tips:由于格式原因,以下文章内容 2m表示2的m次幂,望谅解我们上一讲详细讲解了经济订货批量(EOQ)公式的推导过程,除了让大家能了解其过程(知其... -
excel曲线拟合怎么弄
2015-11-23 22:46:00包括添加平滑曲线,线性,指数,幂,多项式(如二次曲线,三次曲线。。),对数拟合。 工具/原料 excel软件 方法/步骤 把实验数据输入excel中... -
逆变器vf模块程序的曲线变换
2010-04-20 09:19:44用于变频器的软件中的一部分,vf算法中的vf模块,有多种vf曲线供选择,已成功用于变频器产品中。1.多点vf曲线;2.2次幂降转矩特性;3.1.7次幂降转矩特性;4.1.2次幂降转矩特性 -
OpenCV曲线拟合与圆拟合
2020-08-10 17:12:36另外一个常用到的场景就是曲线拟合,常见的是基于多项式拟合,可以根据设定的多项式幂次生成多项式方程,然后根据方程进行一系列的点生成,形成完整的曲线,这个车道线检测,轮廓曲线拟合等场景下特别有用。... -
大屏监控系统实战(12)-10分钟投票增量曲线制作(一)
2020-01-24 16:30:46做公众号的都知道一个网站:20次幂,它是一个公众号阅读监控、数据分析平台,他提供到分钟级监控,能有效发现阅读刷量行为。当然这个对我们投票没啥参考意义,因为投票会出现瞬时大量行为,毕竟每个人微信、微博和... -
曲线拟合软件 delphi
2011-11-23 20:02:39修改多项式拟合的最高次幂(若为多项式拟合) 选择拟合形式 在图中点右键可进行多项操作; 图形显示拟合曲线(值),残差曲线(值),调整图形显示属性(点的形状、大小,图形背景颜色),并可保存图形; 自动保存计算结果 [注意... -
基于回旋曲线的平行泊车路径规划与跟踪控制_张家旭.caj
2020-05-10 17:47:14端滑模理论和双幂次趋近律推导出非时间参考的路径跟踪滑模控制律,提高泊车路径跟踪控制的动态响应特性和 鲁棒性。最后,结合车辆动力学仿真软件对所提出的平行泊车路径规划与控制方法的有效性进行仿真验证。 ... -
Matlab曲线拟合 最小二乘法 polyfit
2012-05-04 16:03:14曲线拟合 已知离散点上的数据集 ,即已知在点集 上的函数值 ,构造一个解析函数(其图形为一曲线)使在原离散点 上尽可能接近给定的 值,这一...说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系 -
python 拟合圆_OpenCV曲线拟合与圆拟合
2020-12-12 08:15:17OpenCV曲线拟合与圆拟合使用OpenCV做图像...简直是超级方便,另外一个常用到的场景就是曲线拟合,常见的是基于多项式拟合,可以根据设定的多项式幂次生成多项式方程,然后根据方程进行一系列的点生成,形成完整的... -
opencv线条拟合_OpenCV中实现曲线与圆拟合
2021-01-14 04:10:25原标题:OpenCV中实现曲线与圆拟合使用OpenCV做图像...简直是超级方便,另外一个常用到的场景就是曲线拟合,常见的是基于多项式拟合,可以根据设定的多项式幂次生成多项式方程,然后根据方程进行一系列的点生成,... -
Bezier曲线绘制 B样条绘制
2015-06-02 16:54:00/*输入点的个数是可以手动改动的,此程序中输入点的最大值设置为. *同时,程序实现了键盘的交互,用来控制程序运行过程中的退出、重画等 */ ... //贝赛尔曲线的幂次 GLfloat Bfunc[15]={0.0... -
Matlab 曲线拟合之polyfit与polyval函数
2018-03-30 14:38:16https://www.cnblogs.com/farewell-farewell/p/7227516.htmlp=polyfit(x,y,n)[p,s]= polyfit(x,y,n)说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。矩阵s用于生成预测值...
-
马士兵JVM课程笔记
-
vue3从0到1-超详细
-
Xor Sum 2 AtCoder - arc098_b 尺取
-
2021年 系统架构设计师 系列课
-
OnlineClass-源码
-
【已解决】【读取图像以及标签应该人为设置类型】Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor)
-
spring-data-jpa-examples-源码
-
MySQL 存储过程(创建海量数据实验环境)
-
11.7 MyBatis缓存机制 -《SSM深入解析与项目实战》
-
BK2635_DesignKit_V0.2.zip
-
投标方法论
-
2.1: 基本权限和归属 、 附加权限 、 ACL策略管理.docx
-
i5 8250u和i5 10210u哪个好
-
MySQL 管理利器 mysql-utilities
-
MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表
-
朱老师鸿蒙系列课程第1期-2鸿蒙系统Harmonyos源码架构分析
-
剑指 Offer 58 - II. 左旋转字符串
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
nps-nlw4-api:Projeto criado na NLW#04佩拉火箭座-源码
-
MySQL 高可用(DRBD + heartbeat)