看一篇相关论文的时候,发现解析其中公式的方法是曲线拟合,但是曲线拟合不是只用点吗,下面是截取的论文部分:
这张图的公式2就是要解析的公式
这张图是直接出的结果
这张图是最终得到的关系式,这里曲线拟合是怎么做到的呢。
确实没学过这块,还是希望能有懂的朋友讲一讲,虽然知道不符合csdn的问题标准,但确实是只是想知道这里的曲线拟合怎么做到的
这个问题的意思是:
(1)已知问题模型,就是计算公式,但模型比较复杂,直接按模型计算的计算量较大,在某些情况下不适合,例如实时应用,或者计算条件有限(例如只有简单计算器)。
(2)于是打算用比较简单的公式对原有模型进行拟合,简单公式的选择通常要根据原有模型的特点来设计,例如本问题大致用一个多项式来拟合 L 与 alfa 的关系。
(3)具体做法很简单,就是在自变量 L 的取值范围产生一组 L,通过原来模型计算对应的 alfa,这些 [L_i, alfa_i] 就相当于实验获得的测试点。也是实验,只是仿真实验。
(4)用仿真实验的数据点,以多项式函数 alfa = w0+w1L+...+wnL**n 进行拟合,获得拟合参数 w0,w1,...wn。
(5)于是可以用拟合多项式近似代替原有复杂模型,进行计算。
技术宅,可能无法完全解决你的问题。我知道用一个自定义公式进行拟合大概是这样的:
比如公式是这样的:
y= acos(kt)exp(wt);
那么拟合时是这样的代码:
clear ;
close all;
clc;
syms t;
x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f=fittype('acos(kt)exp(wt)','independent','t','coefficients',{'a','k','w'});
cfun=fit(x,y,f);
x0=0:0.2:18; %需要拟合的横轴范围
y0=cfun(x0); %用自定义公司拟合的纵轴
plot(x,y,'r*',x0,y0,'b-');
在只有一个公式的情况下,使用matlab进行曲线拟合需要几个步骤:
定义一个函数来表示你想要拟合的公式。例如,如果公式是 y = ax^2 + bx + c,你可以在matlab中定义一个函数 myfunc(x,a,b,c) 来表示这个公式。
准备你的数据。如果你有一组点 (x1,y1), (x2,y2),...,(xn,yn),你可以将它们存储在matlab中的两个向量 xdata 和 ydata 中。
使用matlab的曲线拟合函数来拟合你的数据。例如,你可以使用函数 lsqcurvefit 来拟合你的数据。 lsqcurvefit(@myfunc,x0,xdata,ydata) 将会从初始猜测值 x0 开始寻找最佳参数a,b,c来最小化误差。
使用拟合得到的参数来绘制拟合曲线。 例如,你可以使用 plot(xdata,myfunc(xdata,a,b,c)) 来绘制拟合曲线。
最后注意,在曲线拟合中,通常需要足够多的数据点来拟合出一条准确的曲线,所以如果你只有一组数据点,可能会很难拟合出一条准确的曲线。
可以使用 Matlab 的 fit() 函数来拟合一个公式。首先,需要准备拟合所需的数据点。然后,使用公式描述模型并将其作为一个函数传递给 fit() 函数。最后,使用 cftool 可视化工具或者使用 coeffvalues() 和 confint() 函数检索拟合结果。
例如:
x = [1 2 3 4 5 6 7 8 9 10];
y = [3 4 5 6 7 8 9 10 11 12];
% 使用一元函数 y = a*x + b 进行拟合
ft = fittype('a*x+b');
% 执行拟合
[fitresult, gof] = fit(x, y, ft);
``
这样就可以得到拟合结果。可以使用 fitresult 变量来访问拟合系数、误差等信息。
可以用论文里的解析表达式,代替y = a*x + b即可。望采纳。