作者: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. 201871010106-丁宣元 《面向对象程序设计(java)》第一周学习总结

    丁宣元 <面向对象程序设计(java)>第一周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...

  2. 题解:A

    A (a.pas/c/cpp) [题目描述] 对于给定的一个正整数n, 判断n是否能分成若干个正整数之和 (可以重复) , 其中每个正整数都能表示成两个质数乘积. [输入描述] 第一行一个正整数 q, ...

  3. 洛谷 P5640 【CSGRound2】逐梦者的初心

    洛谷 P5640 [CSGRound2]逐梦者的初心 洛谷传送门 题目背景 注意:本题时限修改至250ms,并且数据进行大幅度加强.本题强制开启O2优化,并且不再重测,请大家自己重新提交. 由于Y校的 ...

  4. LG5202 「USACO2019JAN」Redistricting 动态规划+堆/单调队列优化

    问题描述 LG5202 题解 \[opt[i]=xx+(cnt[i]-cnt[yy]<=0)\] 发现\(cnt[i]-cnt[yy] <= 0\)只能有两种取值 于是直接堆优化即可 \( ...

  5. 《Effective-Ruby》读书笔记

    本篇是在我接触了 Ruby 很短一段时间后有幸捧起的一本书,下面结合自己的一些思考,来输出一下自己的读书笔记 前言 学习一门新的编程语言通常需要经过两个阶段: 第一个阶段是学习这门编程语言的语法和结构 ...

  6. python做中学(七)ord() 函数

    描述 ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII ...

  7. SpringBoot系列之快速创建项目教程

    本博客简介一下SpringBoot快速创建工程的方法,主要介绍一下Spring Initializer,Spring Initializer是IntelliJ IDEA才集成的一种快速创建Spring ...

  8. 03-模板(过滤器,代码复用,表单,CSRF)

    模块代码复用 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有相同的模板代码内容,但是内容中部分值不一样 多个模板中具有完全相同的 html 代码块内容 像遇到这种 ...

  9. 洛谷 P4124 (数位 DP)

    ### 洛谷 P4124 题目链接 ### 题目大意: 给你一段区间,让你求满足下列两个条件时的数的个数. 1.至少有 3 个相邻相同数字 (即 111 .1111 .222 等) 2.不能同时出现 ...

  10. AwaitAsync(异步和多线程)

    参考了一些大佬写的文章: https://www.cnblogs.com/yilezhu/p/10555849.html这个大佬写的文章,我还是很喜欢的 https://www.cnblogs.com ...