matlab多元非线性拟合_matlab多元非线性回归分析
matlab多元非线性回归
将x1 x2 x3合拼为80x3的矩阵多元非线性回归要大致化成多元线性回归,比如是ax^2就化成对于x^2的线性回归作分析,你要先确定元是哪些,一种很流行的方法就是画图看形状大致猜一下(直线就是一次,以此类推),再用[b,bint,r,rint,stats]
matlab多元非线性拟合_matlab多元非线性回归分析
matlab多元非线性拟合_matlab多元非线性回归分析
matlab多元非线性拟合_matlab多元非线性回归分析
-3.9585
=regress(y,x)
由于生成的y基本都等于11多了,所以前几组含显著小于11的数的离散值就偏大,而后面几组基本从头到尾都等于11多,就容易偏小。分析,这是普遍做法,具体问题还要具体分析
[beta,r
,J]=nlinfit(x,y','volum',beta0)
%y改为
y'
就好了
函数的定义要单独写一个m文件,主调脚本也写成m文件。
% File: myfun.m
function ...% File: main.m
x = [...
...
问题用物进化理论阐述
如何用matlab进行已知函数的非线性拟合
plot(ysim,首先将y和x1,x2,x3都变为列向量,就是80x1的矩阵
y=[0.03 1 5.03 15.05 19.97 30.3];然>> y=[26.5000 37.9300 50.9300 53.4000 64.2000 74.6500 77.4000 87.5400 95.5000 101.8600];后创建函数句柄
fun=@(a,x) a(1)x(:,1)+a(2)x(:,2)+(a(3)x(:,1)+a(4)x(:,1)).(1+exp(a(5)+a(6)x(:,3)));
a0=[ ]; %这里要为6个参数赋予一个初值
aa=nlinfit(x,y,fun,a0); %调用nlinfit进行拟合,得到的aa是6个值的向量,对应原来的6个参数
这里关键是初值的选择,如果初值和结果很接近,那么拟合很快收敛
如果初值选择不恰当,可能计算收敛慢,甚至不收敛,得不到结过
Matlab不确定度验证及非线性拟合的问题
2、曲线拟合的结果在很多情clc;clear;况下和初值有关,考虑试一试别的初值;首先你生成的矩阵是看看效果~~11000的,我改了下,现在是101000的了
其次normrnd函数的参数你理解有误,第二个参数是标准,是变化的数值,不是比例
现在这个运行出来每次都不一样,有的离散度只有0.11左右,大部分是0.2左右的;
b=polyfit(x(i,:),y1(i,:),6); %这里拟合的阶数越高,拟合曲线越弯来拐去的贴合数据值,就会增大拟合出来数值的离散度。
matlab 非线性拟合求参数
1.7033没有你的数据,只能根据经验猜测:
=lsqcurvefit(@fun,abc0,xi,yi)90%的可能是因为ln(1-bx)这项引起的,如果1-bx<0,则ln函数会得到虚数。
所以你应该做的是,确定使得bx<1的b的条件,并将其加到拟合函数的参数范围中(可能需要用到minx或maxx)。如果所有x同号还好办,如果x有正有负那就比较麻烦了。不猜了,你自己试试看,不行就把数据贴出来我才能帮你。
你的x = 1979:2000;表达式有问题,应
y = a-0.5log(1-bx)+c(1-bx)^1.5
matlab二元函数拟合
3.采用什么函数形式拟合要看你有没有合适的理论模型,如果没有模型的话,用多项式拟合方便,matlab有函数polyfit,但我不知道能不能拟合二元函数,自己看下帮助1.不要想着什么都直接问别人要程序
其中a1=a(1),a2=a(2),b1=a(3),b2=a(4),c=a(5),d=a(6);x=0.019,0.023,0.027
y=430,380,x2=[。。。]256
arameters:
a,b,c
target
function:
y=(a(1-x/b)+x/b)^c
================================================
function
untitled3
clc
xi=[0.019,0.023,0.027];
yi=[430,380,256];
abc0=[4,0.5,5];
function
y=
fun(abc,x)
y=
(abc(1)(1-x/abc(2))+x/abc(2)).^abc(3);
=31.2588
matlab小二乘法曲线拟合 非线性拟合
x=[x1 x2 x3];>> x =[125.1200 126.6500 128.6300 129.5100 132.8900 136.7400 137.0100 144.0100 150.0300 155.0600];
所以,楼主可以换组数据>> fun=@(pb,x) 0.94(x.^pb(1)-pb(2)^pb(1)).^(1/pb(1));
>> pb=nlinfit(x,y,fun,[1 2])
p1)b =
p=2.6227 b=124.0240
怎么用MATLAB进行多元多项式拟合
F=(a(1)(x1+x2)/(10a(2))) log((exp((x4-a(3)x5)/a(1))-1)/exp((x3-a(3)x5)/a(1))-1)-a(4)x6-a(5)x7-a(6)x8-a(7)x9;x1=[1.5 1.5 2 2 2.5 2.5 2.5 2.5 3 3 3 3];
abcx2=[0.05 0.1 0.15 0.2 0.05 0.1 0.15 0.2 0.05 0.1 0.15 0.2];y=[1 0.99 0.98 0.97 0.98 0.975 0.97 0.965 0.975 0.97 0.965 0.96];
先执行以上三个语句,接着会出来一个新图,再在上面点“数据”,载入x1,x2,再点拟合,在出来的新图里选“新拟合”,再在选择拟合类型为“高斯”,接下来点“应用就行了
如果你非要用程序做。。。。。。。
请先把重复的数据去掉,否则没法拟合或者出错误
不知道楼主这组数据哪里来的,我以前也有过类似的问题,直接放弃啦
2.matlab里有一个非线性拟合函数lsqcurvefit,我给你个范例,照着写就行了这样的数据,真的没法拟合
C=
[ones(length(x1),
x1'
x2'];
=pinv(C)y';
ysim
=Ctemp;
plot(y');
hold
on;
legend('y',
'ysim');
temp里面的三个值就是对应项的参数:y
=temp(1)
+temp(2)x1
+temp(3)x2;
怎么利用MATLAB软件进行非线性曲线模型的模拟?比如Richards曲线的模拟,求参数,并要R平方值(拟合度)
b=[。。。] %初值,自己定值由于Richards曲线方程是非线性函数,所以应用lsqcurvefit()函数来拟合。拟合步骤如下:
t=[0 7 14 21 28];
y=[0.2480 0.7677 1.4190 1.5782 1.6712];
func=inline('a(1)./(1+a(2).exp(-a(3).t).^a(4搂着可以看看,对于一个x值有两个y值,甚至多达4个,你可以大致描个点试试,对于这样的数据点基本拟合不出合适的曲线,因为有很多曲线合适也不合适))','a','t');
b=[0.function zd95717 0.48538 0.80028 0.14189];
a=lsqcurvefit(func,b,t,y);
disp(['系数A:',num2str(a(1))])
disp(['系数B:',num2str(a(2))])
disp(['系数k:',num2str(a(3))])
disp(['系数N:',num2str(a(4))])
t1=0:0.5:28;
y1=func(a,t1);
plot(t,y,'ro',t1,y1,'p-','LineWidth',2),grid on,xlabel('天数'),ylabel('重量')
legend('拟合前的数据','拟合后的数据')
输出的图形
matlab 分段拟合的曲线光滑地连起来
改后可以进行拟合,但结果不理想,得到的系数a都是复数,可能的原因:polyfit(x,y,n)
当然,小弟能力有限,没准有大虾可以解决n为所需要拟合多项式的次数,返回值为多项式系数;
339.9521若是非线性的话,你得有一个和你绘图曲线吻合的函数模型,然后在这个函数模型基础上求这个函数模型的参数,非线性拟合可以用:
fun是函数模型,x0是初值;
beta0是初值。
若是知道曲线是几种基础函数的合成的话,可以利用原始的小二乘法拟合函数,在网上随便找一下小二乘法的程序m文件,添加进去就能用。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。