×

matlab函数拟合

matlab函数拟合(matlab如何实现曲线拟合)

admin admin 发表于2023-03-25 20:36:39 浏览97 评论0

抢沙发发表评论

本文目录

matlab如何实现曲线拟合


用matlab如何实现曲线拟合呢?可以按照下列步骤进行:
1、数据。数据必须有因变量y和自变量x1,x2,x3,...,且数据是等长的。
2、模型。根据经验自定义模型函数和已知模型函数。
3、如函数是线性的,可以使用regress()函数,如函数是非线性的,可以使用nlinfit()函数或lsqcurvefit()函数等,求出模型的拟合系数。
4、根据y数据(已知值)和yn数据(拟合值),计算其相关性(决定系数)及其置信度。
关于这方面的内容,在百度知道里有很多例子。

matlab的函数拟合


clc
clear
close all
%定义网络输入和期望输出
x=0:30:960;
y=[42 51 60.1 71.7 72 73.8 85.4 73 72.7 72.7 79 75.1 82 87.5 79.8 90.1 96.3 90]
input_train=m_data(1:120,1:4)’;
output_train=m_data(1:120,5)’;
input_test=m_data(121:180,1:4)’;
output_test=m_data(121:180,5)’;
%建立相应的BP网络
tic;
net=newff(minmax(input_train),[9 1],{’tansig’,’purelin’},’trainlm’);
inputWeights=net.IW{1,1};
inputbias=net.b{1};
% 训练网络
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=1000;
net.trainParam.goal=0.0001;
%调用TRAINGDM算法训练BP网络
net=train(net,input_train,output_train);
toc;
%对BP网络进行仿真
A=sim(net,input_train);
E=A-output_train;
M=mse(E)
N=sse(E)
%测试网络
a2n=sim(net,input_test);
m=mse(a2n-output_test)
n=sse(a2n-output_test)
%结果作图
%训练曲线
figure(1)
plot(output_train,’r’);
hold on
plot(A,’b.:’);
legend(’训练样本值’,’BP拟合值’);
title(’BP网络训练图’);
xlabel(’样本个数’);
%测试曲线
figure(2)
plot(output_test,’r’);
hold on
plot(a2n,’b.:’);
legend(’测试样本值’,’BP测试值’);
title(’BP网络预测输出’);
xlabel(’样本个数’);
%训练误差
figure(3)
plot(output_train-A,’-’);
title(’BP网络训练误差’);
legend(’训练样本误差’);
ylabel(’训练绝对误差’);
xlabel(’样本个数’);
grid
%预测误差
figure(4)
plot(output_test-a2n,’-’);
title(’BP网络预测误差’);
legend(’测试样本误差’);
ylabel(’测试绝对误差’);
xlabel(’样本个数’);
grid;

如何用matlab进行函数组的拟合


我觉得,首先你应该对微分方程求积分。使其变成一个一个随时间变化的函数。
cw=G(t),或者cp=F(t)等等。这样就是一个比较简单的函数关系式。最后调用拟合函数就可以了。
比如由微分方程变化cw=G(t),使用微分非齐次公式。成为cw=C1*exp(C2*t)+C3。当然C1,C2,C3包括了你的未知变量K1~K4。你使用完指数拟合后能知道C1~C3的值。
再把C1~C3求导,放回微分方程中。往变量t中带值,这样就会形成一个方程组求取K1~K4。由于可能是奇异矩阵,所以你用最小二乘法就能求出最后的K1~K4值。

怎么用matlab进行数据的多元拟合


如何用matlab进行数据的多元函数拟合?

1、拟合前,我们应准备x1,x2,x3,。。。,y的一系列数据

2、将x1,x2,x3,。。。数据赋值给X变量

3、自定义多元函数拟合函数,如func=@(a,x)a(1)*x1+a(2)*x2+a(3)*x3+a(4),a为拟合系数

4、初定a的初始值,如a0=[0,0,0,0] %其个数必须与拟合显示对应

5、利用nlinfit或lsqcurvefit函数,求其拟合系数。如

[a,r,J]=nlinfit(X,y,func,a0)

这里,a为拟合系数;r为残差; J为Jacobian 矩阵

6、利用nlparci函数,求得拟合系数的置信区间,即

ci = nlparci(p,r,J)

7、计算拟合值,即 yi=func(a,x)

8、计算原数据与拟合数据的相关性,如R²≈1,则认为拟合是合理的。


怎么用matlab进行非线性的多元函数拟合


方法一:

1、最常用的是多项式拟合,采用polyfit函数,在命令窗口输入自变量x和因变量y。

2、以二次多项式拟合为例,输入p=polyfit(x,y,2),如果想拟合更高次的多项式,更换括号内数字即可。

通过计算获得的p,是一个数组,对应了多项式的各项系数,以图中为例,拟合出的多项式为:y=0.9962x2+0.0053x-0.2833。

方法二:

1、首先,在上方工具栏选取APPS,点击curvefitting。输入自变量x和因变量y。

2、选择拟合方式,有多项式拟合polynomial,高斯拟合gaussian,幂指数拟合power等等,本次以多项式拟合为例。

3、通过数据计算,可以获得曲线参数(曲线函数中的各项系数),从而实现曲线拟合。


MATLAB如何选择合适的拟合函数


1、首先启动matlab,选择编辑器,再新建一个命令文件。

2、然后在编辑器窗口中输入图示的代码。

3、然后我们点击界面上方菜单栏里的保存图标进行保存。

4、需要注意的是,保存文件的位置要与当前搜索路径的位置保持一致。这可以通过右键编辑窗口的文件,在弹出的下拉框中选择。

5、最后再命令行窗口处输入dxsnh,并敲入键盘上的enter建。可以看出阶数越高,曲线与拟合点拟合得越好。

扩展资料:

函数中所使用的算法都是科研和工程计算中的最新研究成果,而且经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。

MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。

函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。


如何用matlab数据拟合函数


1、首先启动matlab,选择编辑器,再新建一个命令文件。

2、然后在编辑器窗口中输入图示的代码。

3、然后我们点击界面上方菜单栏里的保存图标进行保存。

4、需要注意的是,保存文件的位置要与当前搜索路径的位置保持一致。这可以通过右键编辑窗口的文件,在弹出的下拉框中选择。

5、最后再命令行窗口处输入dxsnh,并敲入键盘上的enter建。可以看出阶数越高,曲线与拟合点拟合得越好。


matlab如何进行曲线拟合


您好,这样的:一、 单一变量的曲线逼近
Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线
性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。
假设我们要拟合的函数形式是 y=A*x*x + B*x, 且A》0,B》0 。
1、在命令行输入数据:
》x=[110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447
296.204 311.5475]
》y=[5 10 15 20 25 30 35 40 45 50]
2、启动曲线拟合工具箱
》cftool
3、进入曲线拟合工具箱界面“Curve Fitting tool”
(1)点击“Data”按钮,弹出“Data”窗口;
(2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然
后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数
据集的曲线图;
(3)点击“Fitting”按钮,弹出“Fitting”窗口;
(4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单
选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类
型有:
Custom Equations:用户自定义的函数类型
Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-
preserving
Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th
degree ~;此外,分子还包括constant型
Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)
选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改
待估计参数的上下限等参数;
——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear
Equations线性等式”和“General Equations构造等式”两种标签。
在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函
数类型y=a*x*x + b*x,设置参数a、b的上下限,然后点击OK。

matlab 简单函数拟合


1、一种方法是用非线性拟合nlinfit,

2、一种是用cftool,

t=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]

c=[15 34 37.5 41 41 38.5 34 34 29 25.5 25 20.5 19 17.5 14 12.5 9 7.5 6 5 3.5 3.5 2] 

A=39.75;

k2=0.1235。(拟合状况如图所示)

3、还有一种就是根据设定的拟合公式,取对数后把非线性拟合转化为线性拟合:

c2=log(c)

pp=polyfit(t,c2,1);

pp=[-0.1696,3.8250)

k2=0.1696;

A=e^3.8250=45.8328  。


matlab拟合函数


题主给出中国人口预测问题(二),可以使用英国经济学家马尔萨斯提出的Malthus模型来拟合与预测。其步骤:

第一步,自定义Malthus模型函数(指数函数),如

func=@(k,t)N0*exp(D*(t-t0))

这里,N0=60.2;t0=1954;

第二步,利用1954-2005年的数据,分别使用lsqcurvefit函数,求出系数D。即

[D,resnorm,residual,exitflag]=lsqcurvefit(func,a0,t,N);

第三步,计算拟合值,即

x1=func(D,t);

第四步,计算相关系数R^2,即

R2=R2_fun(x,x1);

第五步,预测2010年和2030年的人口数,即

xhat=func(D,2010);

disp([’预测2010年人口数为’,num2str(xhat),’千万’])

xhat=func(D,2030);

disp([’预测2030年人口数为’,num2str(xhat),’千万’])

第六步,使用plot函数绘制,中国人口数的统计数据与预测模型曲线对比图,即

plot(t,x,’*-’,t,x1,’+-’)

第七步,标注图例,即

legend(’统计数据’,’Malthus模型’)

第八步,编写标题,即

title=’中国人口数的统计数据与Malthus模型曲线对比’;

第九步,标注坐标轴名称,即

xlabel(’年份’);ylabel(’人口(千万)’);

最后,编写程序,并运行可以得到如下结果。

其他问题与上述过程类似。