[Matlab]关于曲线拟合工具箱Center and Scale按钮

[Matlab]关于曲线拟合工具箱Center and Scale按钮

       对于通过实验求得的待曲线拟合的数据点集,我们通常使用Matlab的曲线拟合工具箱进行拟合。然而,我们在使用Matlab曲线拟合工具箱的时候,有时候在曲线拟合结果输出窗口里提示警告⚠:“当前所拟合出的曲线的条件非常差badly condition,建议使用center and scale方法重新拟合。”

       实际上,Center and Scale方法已经作为一个可选的单选按钮,位于该工具箱GUI界面上的一个很明显的位置上。当我们勾选了这个功能之后,曲线拟合结果的输出窗里不再提示警告,然而,当我们兴致冲冲的,直接将输出的拟合曲线模型及其对应的参数变量和参数值作为实验所得数据集的曲线拟合结果,那么,我们可以发现,曲线拟合的结果是对不上的;通过plot函数进行画图,我们发现所的曲线与原始实验曲线天差地别。然而,你可以放心的是,这种情况的出现并不代表我们的拟合结果是错误的。

       当数据点的横坐标范围跨度太大的时候,为了提高拟合的精度,Matlab曲线拟合工具箱会提供一种解决方法,即将待拟合的数据点的横坐标经过由
x ′ = x − m e a n ( x ) s t d ( x ) x'=\frac{x-mean(x)}{std(x)} x=std(x)xmean(x)公式描述的变换,缩小了原始数据点集横坐标的跨度范围,这个过程就是Center and Scale。因此,通过这个公式我们可以知道,在勾选了Center and Scale功能之后的曲线拟合结果,其实际上是 y y y x ′ x' x 的曲线拟合结果。

       幸运的是,Matlab曲线拟合工具箱在曲线模型拟合结果的输出窗口栏也给出了经过计算所得的横坐标的均值和标准差,这是我们后续的计算更加方便。这里我们用 f ′ f' f 来描述 y y y x ′ x' x 的关系,即
y = f ′ ( x ′ ) y = f'(x') y=f(x)所以,要想得到 y y y x x x 的曲线拟合方程 f f f ,则只需要经过变元代换即可
y = f ′ ( x − m e a n ( x ) s t d ( x ) ) = f ( x ) y=f'(\frac{x-mean(x)}{std(x)})=f(x) y=f(std(x)xmean(x))=f(x)注意,如果脑子突然短路了,写成了
y = f ′ ( s t d ( x ) ⋅ x ′ + m e a n ( x ) ) = f ( x ′ ) ❌ y=f'(std(x)·x'+mean(x))=f(x') ❌ y=f(std(x)x+mean(x))=f(x)那就不对了噢,因为 f ′ f' f不是 x x x y y y 的映射。

% % 2020.08.11 Jlin.Zheng (Sun Yat-sen University)
clc;
clear;
%% 载入待拟合数据
path_filename = '..........';
A = load(path_filename);
X = A(:,1);% 选择横纵坐标数据
Y = A(:,2);
%% 通过matlab曲线拟合工具箱得到曲线拟合结果
% 在通过工具箱得到拟合结果之前,以下部分应当注释
% 勾选了center and scale选项之后,进行归一化所需要的均值m和标准差s由matlab工具箱自动计算生成
m = ...;
s = ...; 
% 结果输出窗口中给出的参数变量及参数值,它们用于提供y与x_cas的映射关系
% % 前面介绍部分所说的x'在这里用x_cas表示
% % 假设选择了5阶多项式拟合
p1 = ...; p2 = ...;
p3 = ...; p4 = ...;
p5 = ...; p6 = ...;
% y与z_cas曲线公式 fyz_cas
% 注意:这里取的是5阶多项式拟合,如果您是其他阶次多项式,请自行修改表达式参数符号及对应项幂次
fyz_cas = @(z)(p1*z.^5 + p2*z.^4 + p3*z.^3 + p4*z.^2 + p5*z + p6);

%% 由fyz求得所需的y与x曲线公式 fyx
syms x;
fyx = fyz_cas( (x-m)/s );
fyx = collect(fyx,x);% collect函数用于合并同类项
Fyx = subs(fyx,x,X);% subs函数用于赋值
figure; plot(X,Fyx);

  • 27
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值