问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用matlab进行多元非线性拟合

发布网友 发布时间:2022-05-05 09:33

我来回答

5个回答

热心网友 时间:2022-06-27 06:53

matlab拟合工具箱cftool
%拟合数据曲线;线性最小二乘法是解决曲线拟合的最常用的方法,
%1、多项式拟合函数;p=polyfit(x,y,n);求p拟合函数在xi处的近似值pi=polyval(p,xi);
%2、利用常用矩阵的除法解决复杂函数的拟合;
%3、利用lsqcurvefit函数和lsqnonlin函数拟合;
%4、利用cftool工具箱,自定义编写函数再通过M文件导出的形式

http://phylab.fudan.e.cn/doku.php?id=howtos:matlab:mt1-5

http://hi.baidu.com/zzz700/blog/item/f313a3f5869659b5a40f52d7.html英文参考

一、 单一变量的曲线*近
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。

(5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:
general model:
f(x) = a*x*x+b*x

Coefficients (with 95% confidence bounds):
a = 0.009194 (0.009019, 0.00937)
b = 1.78e-011 (fixed at bound)

Goodness of fit:
SSE: 6.146
R-square: 0.997
Adjusted R-square: 0.997
RMSE: 0.8263

同时,也会在工具箱窗口中显示拟合曲线。

这样,就完成一次曲线拟合啦,十分方便快捷。当然,如果你觉得拟合效果不好,还可以在“Fitting”窗口点击“New fit”按钮,按照步骤(4)~(5)进行一次新的拟合。

不过,需要注意的是,cftool 工具箱只能进行单个变量的曲线拟合,即待拟合的公式中,变量只能有一个。对于混合型的曲线,例如 y = a*x + b/x ,工具箱的拟合效果并不好。下一篇文章我介绍帮同学做的一个非线性函数的曲线拟合。
上边对cftool工具箱做了很详尽的说明,但并没有对各种曲线拟合的性能做点评,在单变量曲线拟合中,如何选取一种最优化的拟合方式是非常重要的,我们在采用CFTOOL拟合后,会有一些性能说明,如:
Goodness of fit:
SSE: 6.146
R-square: 0.997
Adjusted R-square: 0.997
RMSE: 0.8263

官方的解释:
Results -- Displays detailed results for the current fit including the fit type (model, spline, or interpolant), the fitted coefficients and 95% confidence bounds for parametric fits, and these goodness of fit statistics:

SSE -- The sum of squares e to error. This statistic measures the deviation of the responses from the fitted values of the responses. A value closer to 0 indicates a better fit.

R-square -- The coefficient of multiple determination. This statistic measures how successful the fit is in explaining the variation of the data. A value closer to 1 indicates a better fit.

Adjusted R-square -- The degree of freedom adjusted R-square. A value closer to 1 indicates a better fit. It is generally the best indicator of the fit quality when you add additional coefficients to your model.

RMSE -- The root mean squared error. A value closer to 0 indicates a better fit.

Matlab曲面拟合和插值 AAAAAAAAAAA风云博客
http://xiaoqiang851224.blog.163.com/blog/#m=0&t=1&c=fks_084066080086083064084085083095087086083071083086086064
http://suhao198706.blog.163.com/blog/static/62173403201121095512602/?fromdm&fromSearch&isFromSearchEngine=yes

Matlab曲线拟合
http://xiaoqiang851224.blog.163.com/blog/static/30247003201153083539419/?fromdm&fromSearch&isFromSearchEngine=yes

多项式拟合函数polyfit之C语言的源码

http://xiaoqiang851224.blog.163.com/blog/static/30247003201010251055758/

matlab二元函数拟合;

http://zhidao.baidu.com/question/141374449.html?fr=qrl&cid=93&index=2

matlab非线性拟合1(指数函数)

http://apps.hi.baidu.com/share/detail/43922314

热心网友 时间:2022-06-27 06:53

function zd487022570
x1=[0.25,0.278,0.3125,0.357,0.4167,0.3,0.3333,0.375,0.7286,0.5];
x2=[0,0.1111,0.125,0.14286,0.1667,0,0.1111,0.125,0.14286,0.1667];
x3=[0,0,0.125,0.2857,0.5,0,0,0.125,0.2857,0.5];
y=[0.7572,0.6559,0.6383,0.5636,0.4884,0.9783,0.7489,0.686,0.6288,0.4934];
x = [x1; x2; x3];

% 使用最小二乘拟合:
% opt指定拟合选项(注意查看命令窗口提示的优化终止条件,如对结果不满意考虑适当修改)
% b0为初值(要慎重选择,不同初值得到的结果可能不同)
opt = optimset('MaxFunEvals', 50000, 'MaxIter', 10000, 'TolFun', 1E-10)
% b0 = [0 -10 1 1];
% b0 = [0.6 -60 15 0.7];
b0 = [0.7 -137 40 0.7];
b = lsqcurvefit(@myfun, b0, x, y, [], [], opt);
A = b(1)
B = b(2)
C = b(3)
D = b(4)

% 把拟合结果与原始数据对照
plot(y, '-o');
hold on
plot(myfun(b, x), 'r:x');

function y = myfun(x, xdata)
A = x(1);
B = x(2);
C = x(3);
D = x(4);
x1 = xdata(1, :);
x2 = xdata(2, :);
x3 = xdata(3, :);
y = A*x1./(1+B*x2+C*x3)+D;追问运行报错了
??? function zd487022570
|
Error: Function definitions are not permitted in this context.
看不懂function zd487022570这是什么意思……

追答你是不是文件里还加了别的东西?
把我上面贴的代码直接贴到新建的文件中,然后保存就行,不可能有错。我在6.5和R2007b两个版本上测试过。

最上面的“function zd487022570”是因为调用lsqcurvefit需要把拟合公式写成函数,而这种问题用inline函数或匿名函数都不太方便,所以使用了function。而在一个文件中如果有function就不能是script,所以就把前面的代码取个名字也成为一个function。函数的名字就用的是你提问这个网页的号码加了两个字母的前缀,当然,你可以把它改成其他任何合法的标识符。

热心网友 时间:2022-06-27 06:53

使用“lsqcurvefit”
clear
clc
x=[40 50 60 70 80 90 100 110 120 135 150];
y=[0.0096 0.0145 0.0194 0.0348 0.0501 0.0751 0.1000 0.1497 0.1993 0.2496 0.2999];
z=[0.2400 0.2865 0.3330 0.3600 0.3870 0.4010 0.4150 0.4390 0.4630 0.4875 0.5120];
X0=[1 1 1 1 1 1];
%只要这样写就可以了
f=@(p,x)( p(1) + p(2)*x(1,:) + p(3)*x(2,:) + p(4)*x(1,:).^2 + p(5)*x(1,:).*x(2,:) + p(6)*x(2,:).^2);
p=lsqcurvefit(f,X0,[x;y],z)

热心网友 时间:2022-06-27 06:54

怎么用matlab进行非线性的多元函数拟合
matlab拟合工具箱cftool
%拟合数据曲线;线性最小二乘法是解决曲线拟合的最常用的方法,
%1、多项式拟合函数;p=polyfit(x,y,n);求p拟合函数在xi处的近似值pi=polyval(p,xi);
%2、利用常用矩阵的除法解决复杂函数的拟合;
%3、利用lsqcurvefit函数和lsqnonlin函数拟合;
%4、利用cftool工具箱,自定义编写函数再通过M文件导出的形式

热心网友 时间:2022-06-27 06:55

你的x1只有42个变量,x2和y有43个,你这个有问题。可以用matlab中的curve fitting tool来进行拟合。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
离焦和普通镜片的区别 昨夜星辰昨夜风,画楼西畔桂堂东.身无彩凤双飞翼,心有灵犀壹点通 后面的... “昨夜星辰昨夜风,画楼西畔桂堂东。”是什么意思_出处及原文翻译_学 ... 春捂养生吃什么?春不捂好易宫寒严重者或致不孕! 吃什么滋阴养颜 四种滋阴的食物最适合女性主妇网 5种食物来帮忙,滋阴补肾更健康 十大滋阴补气保健食材推荐 女性滋阴润燥最好的10种补品有哪些_百度知 ... 500g肉松紫米饭团的大小 下雨天的心情说说经典 三文鱼的胆固醇高吗 如何调用matlab拟合工具箱得出的 全球国土面积第5大的国家是哪个? 有一集running man忘了哪集。是吃冷面,一队吃完了,另一个队还在拌 12月的虾爬子肉多吗 PS如何用圆形去截图像 网购发现一模一样的衣服,介绍是不同牌子,这种情况应该怎么选择??货比三家应该看重哪一点? 怎样利用基于最小二乘原理的 matlab 多项式拟合工具箱求出放电曲线方程系数 装修公司如何货比三家? 酵母被汤死的面再加酵母面会酸吗? .net主要用途?和Java比,优点是? .NET框架和CLR的主要优点是什么?缺点是什么? 请问Matlab curve fitting工具箱的拟合参数是通过什么算法计算得到的? “隋唐十八好汉”中的冷面寒枪罗成究竟是怎么死的? 什么是net,net有什么优缺点 如何使用matlab拟合工具箱 2015年常州一级建造师准考证打印入口在哪里?该注意些什么? 冷面冻一年了还能吃吗 2017年江苏省常州溧阳一级建造师考试报名时间确定下来了吗? 常州一级建造师打印准考证的网址在哪里 一冷面帅哥和囚禁仇人的女儿 最后产生感情的是什么电视剧? 鲜味冷面拌菜配方? 我是一名推销员,当业主提到货比三家的时候应当怎么样回答? 泰迪狗的肚子里响咋回事 货比三家怎么用名词解释 冷面人生 主角太善良了 不够冷啊 推荐主角残忍冷酷无情的黑暗小说? 像极道毁灭一样 我家泰迪狗肚子里总响 如何做一个称职的采购,如何货比三家? 2017年是中国大还是美国大还是巴西大? 大神们,这两台荣耀笔记本哪一台性价比高一些?我平常只用来办公,看电影,偶尔打LOL,该买哪一款呢? ssd 磁盘和 机械硬盘的区别 北美洲面积最大的国家是美国,其次是加拿大;南美洲面积最大的国家是巴西______(判断对错 荣耀笔记本哪个版本性价比高一些? 泰迪狗为什么无缘无故肚子会响求解!!! 有个冷面人不爱说不爱笑,从他上这里工作来一年时间里真的没见他笑过,前些日子我们一起干活的问他有对 简述在采购工作中怎样做到 "货比三家,三比一算"? 在世界地图上美国和巴西哪个占地面积大? 泰迪发抖肚子咕噜叫 孤潇耳,冷面人。吾煞也,一愕然。乃吾系,何为之。是什么意思? 巴西和澳大利亚谁的国土面积大? 泰迪狗肚子咕咕响怎么回事