一、题目
已知:
-
y= 1 / (a + b * x)
-
x = 1.0 : 0.4 : 2.6;
-
y = [0.931, 0.473, 0.297, 0.224, 0.168];
-
通过各种拟合方法求a, b的值,画出拟合曲线,并比较结果,分析误差
二、思路导图
三、流 程 图
四、源程序
- 主程序mainProgram.m
clear; %清除所有变量
%初始样本数据如下:
x = 1.0 : 0.4 : 2.6;
y = [0.931, 0.473, 0.297, 0.224, 0.168];
%求出a, b预估值,以及定义基函数
syms a b; %定义变量
[a, b] = solve(0.931 == 1 / (a + b * 1.0), 0.473 == 1 / (a + b * 1.4), a, b); %求出a, b预估值
beta0 = double([a, b]); %将变量sym类型转化成double类型
fun = @(beta, x)(1 ./ (beta(1) + beta(2) * x)); %基函数模型
%非线性拟合
[ab_lsqcurvefit, res_lsqcurvefit, r_lsqcurvefit] = lsqcurvefit(fun, beta0', x', y'); %返回五个参数,这里取前三个,待定系数,残差平方和以及残差
[ab_nlinfit, r_nlinfit] = nlinfit(x', y', fun, beta0'); %多元非线性拟合, ab_nlinfit为待定系数最优值,r_nlinfit为各点拟合的残差
%线性拟合
ab_polyfit = polyfit(x', 1 ./ y',