Matlab各种拟合
链接:https://zhuanlan.zhihu.com/p/36103034
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1) polyfit
代码例子如下,拟合一个3次曲线,并画图。
x = 0:1:9;
y = [0 2 4 6 8 20 12 14 16 18]
A=polyfit(x,y,3);
z=polyval(A,x);
plot(x,y,'r*',x,z,'b')
1) lsqcurvefit nlinfit
使用lsqcurvefit(最小二乘拟合)或nlinfit。下面的例子,是拟合一个3次曲线。这两个函数还可以拟合指数函数、三角函数等。
x=[0 1 2 3 4 5 6 7 8 9];
y=[0 1 2 3 4 5+10 6 7 8 9]; %这里,有一个噪音
w=[1 1 1 1 1 0.1 1 1 1 1]; %我们知道噪音的权重很低
a0=[1 1 1 1];
f=@(a,x)a(1)+a(2)*x+a(3)*x.*x+a(4)*x.*x.*x;
f1 = lsqcurvefit(f,a,x,y)
f2 = nlinfit(x,y,f,a0)
y1=f(f1,x)
y2=f(f2,x)
plot(x,y,'r*',x,y1,'b',x,y2,'g')
2)cftool
注意,上述拟合,是无权重拟合。w没有起作用,会发现拟合的曲线被噪音影响较大。下面将采用cftool拟合来降低噪音:
命令行中输入:cftool,回车,就打开了cftool窗口。
在窗口中,将X data选为x,将Y data选为y,此时就自动拟合为一个直线。注意,重要的地方来了:将Weights选择为w,会发现直线更加贴近正常点!
下列参考文章中有所有拟合类型的解释 matlab cftool用法及其菜单 [李园7舍_404]
3)使用fit 注意,这才是最重要的拟合!cftool能实现的,这里全能实现。
x=[0;1;2;3;4;5;6;7;8;9];
y=[0;1;2;3;4;5+10;6;7;8;9]; %这里,有一个噪音
w=[1;1;1;1;1;0.1;1;1;1;1]; %我们知道噪音的权重很低
a0=[1 1];
plot(x,y,'o')
fo = fitoptions('Method','NonlinearLeastSquares',...
'StartPoint',a0);
ft = fittype('a+x*b','options',fo);
[curve,gof] = fit(x,y,ft,'Weights',w)
hold on
plot(curve,'m')
legend('Data','curve')
hold off
参见:
Fit type for curve and surface fitting
Create or modify fit options object
4) fit使用SmoothingSpline
x=[0;1;2;3;4;5;6;7;8;9];
y=[0;1;2;3;4;5+10;6;7;8;9]; %这里,有一个噪音
w=[1;1;1;1;1;0.2;1;1;1;1]; %我们知道噪音的权重很低
a0=[1 1];
plot(x,y,'o')
fo = fitoptions('method','SmoothingSpline','SmoothingParam',0.07,'Weights',w);
ft = fittype('smoothingspline');
f = fit(x,y,ft,fo)
y1= f(x)
hold on
plot(x,y1,'r')
legend('Data','f')
hold off
可惜,拟合代码不能转C++
1)写一个文件 fixSmoothingSpline.m,内容如下,是做一个加权样条拟合的,
function y1 = fixSmoothingSpline(x, y, w)%#codegen
f = fit(x,y,'SmoothingSpline','SmoothingParam',0.07,'Weights',w);
y1= f(x);
2)在命令行中输入coder,调出coder窗口,
3)可是,因为上述文件中带有fit字样,不支持转C。
Matlab各种拟合的更多相关文章
- MATLAB中拟合算法刚入门
%%%1.拟合问题:(做预测,主要使用的范围是样本比较小,拟合效果会好,样本比较多,拟合的效果就不是很好) 1.应用预测的场景:已经知道10年的样本,预测第11年以内的数据 2.用拟合的到关系式:样本 ...
- matlab切比雪夫拟合
matlab中没有切比雪夫拟合的现成算法,这里把我程序中的这部分抽出来,说一下. 1.首先是切比雪夫计算式 function [ res ] = ChebyShev(num,i) res=; else ...
- [matlab] 1.拟合
x = [1 2 3 4 5 6 7 8 9 ]; y = [9 7 6 3 -1 2 5 7 20]; p=polyfit(x,y,3); %数字代表拟合函数的阶数 xi=0:0.01:10; yi ...
- matlab函数拟合
1 函数拟合 函数拟合在工程(如采样校正)和数据分析(如隶属函数确定)中都是非常有用的工具.我这里将函数拟合分为三类:分别是多项式拟合,已知函数类型的拟合和未知函数类型的拟合.matlab中关于函数的 ...
- matlab的拟合函数polyfit()函数
matlab的多项式拟合: polyfit()函数 功能:在最小二乘法意义之上,求解Y关于X的最佳的N次多项式函数. clc;clear; close all; x=[ ]; y=[2.7 7.4 2 ...
- Matlab 多项式拟合、稳健滤波等实用函数
Function summary http://www.biomecardio.com/matlab/index.html clinspace Curvilinearly spaced points ...
- Matlab多项式拟合測试
x=0:0.2:4; %生成等差数列 rnd=rand(1,size(x,2))*5; %生成一组随机数 y=x.*x.*x+x.*x+6+rnd; %生成y=x^3+x^2+6函数在垂直方向5个尺度 ...
- 【转】Matlab多项式拟合
转:https://blog.csdn.net/hwecc/article/details/80308397 例: x = [0.33, 1.12, 1.41, 1.71, 2.19] y = [0. ...
- matlab多项式拟合以及指定函数拟合
clc;clear all;close all;%% 多项式拟合指令:% X = [1 2 3 4 5 6 7 8 9 ];% Y = [9 7 6 3 -1 2 5 7 20]; % P= poly ...
随机推荐
- Vue动态设置Dom元素宽高
需求: slider侧边栏是宽度是动态的,使用jquery可以操作dom元素,设置宽高,但vue是避免操作dom的 <template> <div class="slide ...
- charles使用(安装、mock、限速、断点功能)
我们在进行B/S架构的Web项目开发时,在前端页面与后台交互的调试的时候,通常使用在JSP中加入“debugger;”断点,然后使用浏览器的F12开发者工具来查看可能出错的地方的数据.或者使用Http ...
- CSP-S需备模板大全
CSP-S需备模板大全 谨以此文祝愿自己\(CSP-S\,\,2019\,\,\color{red}{RP++!!}\) 算法 二分 while(l<r) { int mid=(l+r+1)&g ...
- Codeforces Round 596 题解
万幸的是终于碰上了一场上分好场. 不幸的是一开始差点不会 A. 万幸的是想了个不那么稳的结论过了 pretest. 不幸的是罚时很高,而且慌得一比. 万幸的是然后半个小时内把 B 和 C 码了. 不幸 ...
- HTML连载47-设计思想、浮动元素高度问题
一.设计网页的思想 拿到需求之后我们先对各个模块(盒子)进行划分,然后从外到内进行设计(1)设计一个盒子最基本的设计大致包括背景颜色(其实用于识别),宽,高,边界浮动流还是标准流. (2)然后盒子和盒 ...
- 巧妙利用selenium中的JS操作来处理特殊的文本框
在使用selenium对页面进行相关操作时,有时候会遇到以下三种情况: 1.日期框:无法直接输入文本,必须要选择某一天的日期并点击才会填入文本框: 2.检索框:可以直接输入文本,但必须要点击根据输入的 ...
- 【51Nod1769】Clarke and math2(数论,组合数学)
[51Nod1769]Clarke and math2(数论,组合数学) 题面 51Nod 题解 考虑枚举一个\(i_k\),枚举一个\(i\),怎么计算\(i_k\)对\(i\)的贡献. 把\(\f ...
- 配置文件_自定义section标签获取数据
前言:为了节约时间,先只粘贴关键代码: 1-添加section标签,name为自定义标签名称,type为:命名空间+类型,程序集名称 <section name="watchModel ...
- Wpf Prism.Unity 7
Prism.Unity 中UnityBootStrapper已经不用了,可以继承PrismApplication 1.Install-package Prism.Unity -v 7.2.0.1367 ...
- 百度ai语音识别
//语音识别功能 var APP_ID = "149**323"; var API_KEY = "N1Po****o6WPUeU8er"; var SECRET ...