matlab多元非线性回归

将x1 x2 x3合拼为80x3的矩阵

多元非线性回归要大致化成多元线性回归,比如是ax^2就化成对于x^2的线性回归作分析,你要先确定元是哪些,一种很流行的方法就是画图看形状大致猜一下(直线就是一次,以此类推),再用[b,bint,r,rint,stats]

matlab多元非线性拟合_matlab多元非线性回归分析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];

abc

x2=[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文件,添加进去就能用。