matlab擬合非線性函式,如何用matlab進行已知函式的非線性擬合

時間 2021-08-30 11:14:12

1樓:兔子和小強

線性模型、非線性模型是以待優化引數w為參考(而不是看x)。

y = w' * x ('表示轉置)描述的是線性模型。題目中要擬合的函式是:y = w0 + w1 cos a + ...

 + wn cosna,它同樣符合y = w' * x,其中x = (1 cosa ... cosna)』。設x構成的集合是x,y構成的集合是y,可依據最小二乘法求出w = (xx')^-1 *x*y。

所以程式是:

n = 3;                                            % 擬合到cos 3x

x = linspace(0, 2*pi, 100);             % 資料集

y = 1+2*cos(x)-3*cos(3*x) + rand(1, length(x)); % 加噪聲

x = cos((0:n)'*x);

y = y';

w = (x*x')^-1*x*y;                         % 求解係數

plot(x, y, 'o', x, w'*cos((0:n)'*x));   % 畫圖檢視

ps:matlab問題提問請設定問題分類為程式設計。

2樓:

% by lyqmath

clc; clear all; close all;

x = 1979:2000;

y = [4.69,24.54,24.

11,10.62,12.86,0.

74,-7.29,9.52,-7.

11,3.25,23.09,5.

26,-0.26,23.99,25.

55,0.45,14.54,-5.

86,18.07,2.73,27.

49,23.54];

xt = linspace(min(x), max(x));

yt = spline(x, y, xt);

figure; hold on; box on;

plot(x, y, 'r+')

plot(xt, yt, 'r-')

如何用matlab進行已知函式的非線性擬合

3樓:匿名使用者

首先將y和x1,baix2,x3都變為列

向量,就是80x1的矩du

陣zhi

如果原來是dao行向量1x80的矩陣用y=y.'或x1=x1.『轉置一下就專可以了

將x1 x2 x3合拼為屬80x3的矩陣

x=[x1 x2 x3];

然後建立函式控制代碼

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)));

其中a1=a(1),a2=a(2),b1=a(3),b2=a(4),c=a(5),d=a(6);

a0=[* * * * * *]; %這裡要為6個引數賦予一個初值

aa=nlinfit(x,y,fun,a0); %呼叫nlinfit進行擬合,得到的aa是6個值的向量,對應原來的6個引數

這裡關鍵是初值的選擇,如果初值和結果很接近,那麼擬合很快收斂

如果初值選擇不恰當,可能計算收斂慢,甚至不收斂,得不到結過

求matlab非線性擬合程式 15

4樓:

c= lsqcurvefit(@(c,x) c(1).*x.^2+c(2).

*x+c(3),rand(3,1),1:0.1:

2,(1:0.1:

2).^2+2.*(1:

0.1:2))

這是根據最小二乘原理擬合引數的方法

其中第一個引數是函式表示式,其中c是待求係數,x自變數第二個引數是隨便給係數 的初始值(大小要和係數個數一致),越接近真實值越好,如果太遠可能陷入區域性最優解

第三個引數就是一組x

第四個引數是一組y

上面是一個擬合二次多項式的一個小例子。

matlab非線性最小二乘擬合

5樓:玩野啊

matlab的最優化工具箱中提供了lsqcurvefit()函式,可以解決最小二乘曲線擬合的問題,改函式的

專呼叫格式為:

[a,j]=lsqcurvefit(fun,a0,x,y)

其中,fun未原屬型函式的matlab表示,a0未最優化的初值,x,y為原始輸入輸出資料向量,呼叫該函式將可以返回待定係數向量a以及在此待定係數下的目標函式的值j.(詳細可以輸入 help lsqcurvefit)

具體做法是:

>>u1=inline('f(a,w)','a','w') %用a(i)分別代替六個未知數,i=1~6.

>>[xx,res]=lsqcurvefit(u1,[1 1 1 1 1 1],w,u); xx' % w和u是你試驗得出來的資料向量。

結果應該會出現一個ans 向量(6維),分別就是你所要待定的係數a(i)了

6樓:匿名使用者

我給你bai個用lsqcurvefit作非線性擬合du的例子,你自己照著改一zhi下吧

另外,擬合結果dao是初值敏感專的,因為找到的不一定是全域性最屬優而可能是初值附近的區域性最優

function untitled3

clcxi=[0.019,0.023,0.027]; % x data

yi=[430,380,256]; % y dataabc0=[4,0.5,5]; % initial valuesabc = lsqcurvefit(@fun,abc0,xi,yi)% target function

function y = fun(abc,x)y = (abc(1)*(1-x/abc(2))+x/abc(2)).^abc(3);

abc =

31.2588 -3.9585 1.7033

7樓:亥熙延潔玉

nu=(a+b/d).^0.5;

應改為:

nu=(a+b./d).^0.5;

b後面有一個點。

8樓:求峻馮寒

程式為bai

:x=[15,30,45,60,75,90,105,120,135,150,165,180,195,210,225,240,255,270];

y=[7,7.9,8.8,10,11,12.

6,14,14.6,15.2,15.

7,16.2,16.4,16.

7,17,17.3,17.5,17.

7,18.0];

p=polyfit(x,y,2)

x2=0:300;

y2=polyval(p,x2);

plot(x,y,'o',x2,y2)

結果為:dup=

-0.000193441119138

0.098295493636051

5.181372549019607

p所得三

zhi個值就dao是對應你要版

求的m(1)

,m(2),m(3)三個係數權

如何利用matlab擬合非線性迴歸函式的初始引數

9樓:匿名使用者

推薦你使用

一個函式nlinfit,我簡單給你介紹一下使用方法,以你的模型2為例: 第一步:你需要建立一個function檔案,名字隨便,這裡我們命名為"hougen",在這個檔案內,你要把模型二描述清楚,首先我們假定beta=[a;b;c;d;e;f;g];x=[x,y,m];

matlab 曲線擬合求函式的最佳引數時怎麼確定引數的初始值x=[2:16];

y=[6.42 8.2 9.

58 9.5 9.7 10 9.

93 9.99 10.49 10.

59 10.6 10.8 10.

6 10.9 10.76];

plot(x,y,'*');

% b0=;%待定引數的初始值

fun=inline('b(1)*(1-b(2)*exp(b(3)*x))','b','x');

[b,r,j]=nlinfit(x,y,fun);

br=sum(r.^2)%誤差的平方和

matlab擬合一元非線性擬合用什麼函式

10樓:匿名使用者

在command視窗裡輸入,cftool,裡面總有一個你滿意的。

matlab中nlinfit非線性擬合求引數

袁怡圃 補充回答 資料不好 建立函式檔案 function y myfun beta,x y 2.350176 beta 1 1 1 beta 2 1 1 x 1 1 beta 2 beta 2 2.x 1 1 beta 2 1 beta 2 x 1 1 beta 2 0.5 x 2 執行 x 0....

matlab線性擬合

刻舟不為劍 線性擬合如下 x 0 20 40 60 100 130 160 190 y 18 17.586 17.136 16.704 15.84 15.129 14.544 13.896 a polyfit x,y,1 xi 0 0.001 200 yi polyval a,xi plot x,y...

origin非線性擬合出來的曲線為啥是一條折線,而不是光滑的

承冷菱 實際工作中,變數間未必都有線性關係,如服藥後血藥濃度與時間的關係 疾病療效與療程長短的關係 毒物劑量與致死率的關係等常呈曲線關係。曲線擬合 curve fitting 是指選擇適當的曲線型別來擬合觀測資料,並用擬合的曲線方程分析兩變數間的關係。用連續曲線近似地刻畫或比擬 平面上離散點組所表示...