作者:Z-HE
链接: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 curve or surface to data

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各种拟合的更多相关文章

  1. MATLAB中拟合算法刚入门

    %%%1.拟合问题:(做预测,主要使用的范围是样本比较小,拟合效果会好,样本比较多,拟合的效果就不是很好) 1.应用预测的场景:已经知道10年的样本,预测第11年以内的数据 2.用拟合的到关系式:样本 ...

  2. matlab切比雪夫拟合

    matlab中没有切比雪夫拟合的现成算法,这里把我程序中的这部分抽出来,说一下. 1.首先是切比雪夫计算式 function [ res ] = ChebyShev(num,i) res=; else ...

  3. [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 ...

  4. matlab函数拟合

    1 函数拟合 函数拟合在工程(如采样校正)和数据分析(如隶属函数确定)中都是非常有用的工具.我这里将函数拟合分为三类:分别是多项式拟合,已知函数类型的拟合和未知函数类型的拟合.matlab中关于函数的 ...

  5. matlab的拟合函数polyfit()函数

    matlab的多项式拟合: polyfit()函数 功能:在最小二乘法意义之上,求解Y关于X的最佳的N次多项式函数. clc;clear; close all; x=[ ]; y=[2.7 7.4 2 ...

  6. Matlab 多项式拟合、稳健滤波等实用函数

    Function summary http://www.biomecardio.com/matlab/index.html clinspace Curvilinearly spaced points ...

  7. 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个尺度 ...

  8. 【转】Matlab多项式拟合

    转:https://blog.csdn.net/hwecc/article/details/80308397 例: x = [0.33, 1.12, 1.41, 1.71, 2.19] y = [0. ...

  9. 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 ...

随机推荐

  1. day83_11_1 阿里配python使用。

    一.环境准备. 1.首先需要在支付包中注册开发者模式,并注册沙箱,模拟支付过程. https://openhome.alipay.com/platform/appDaily.htm?tab=info ...

  2. WPF 获取系统 DPI 的多种方法

    原文:WPF 获取系统 DPI 的多种方法 WPF 获取系统 DPI 的多种方法 由于 WPF 的尺寸单位和系统的 DPI 相关,我们有时需要获取 DPI 值来进行一些界面布局的调整,本文汇总了一些 ...

  3. WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)

    原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 因为项目需要 要实现这个~ 怎么实现画红框内容部分 田字格和上面Textbox 属于一个自定义控件  大 ...

  4. 【洛谷4173】残缺的字符串(重拾FFT)

    点此看题面 大致题意: 有一个长度为\(n\)的字符串\(A\)和一个长度为\(m\)的字符串\(B\),其中存在一些字符'*'可以与任意字符匹配.求\(B\)中所有满足条件的位置,使得从这一位置开始 ...

  5. 趣谈Linux操作系统学习笔记:第二十四讲

    一.小内存的分配基础 1.kmem_cache_alloc_node的作用 通过这段代码可以看出,它调用了kmem_cache_alloc_node函数,在task_struct的缓存区域task_s ...

  6. Python开发GUI实战:图片转换素描画工具!

    奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . ​ 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...

  7. 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第17章       STM32H7之GPIO的HAL库API ...

  8. kvm与xen虚拟化的比较(转)

    Linux虚拟化技术的用户目前有两种免费的开源管理程序可以选择:Xen和KVM. 作为较早出现的虚拟化技术,Xen是“第一类”运行在裸机上的虚拟化管理程序(Hypervisor),也是当前相当一部分商 ...

  9. 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1

    <细说PHP>第四版 样章 第二章 PHP的应用与发展 1 学习任何编程语言之前,先了解一下它的应用与发展是很有必要的.从Web开发的历史看来,PHP.Python和Ruby几乎是同时出现 ...

  10. css/js 超出部分显示省略号

    1.js方法 function cutString(str, len) { //length属性读出来的汉字长度为1 if (str.length * 2 <= len) { return st ...