matlab 多元非線性函式擬合

時間 2022-02-16 14:44:55

1樓:匿名使用者

因為這個函式的形式比較特殊,對其兩邊取對數後得到

log(y)=log(a)+b*log(x1)+c*log(x2)

於是立即就轉換為了線性擬合

[1 log(x1) log(x2)]*[log(a) b c]'=log(y)

於是[log(a) b c]'=[1 log(x1) log(x2)]\log(y)

這樣就可以得到a,b,c了。不需要進行非線性擬合。

下面是程式:(對於x1、x2、y的賦值部分這裡就不寫了,你自己在前面加上即可)

p=[ones(length(y),1) log([x1 x2])]\log(y);%就這一句話就搞定了

a=exp(p(1)),b=p(2),c=p(3)%這就是擬合後的引數值

y%這是取樣點y的值

a*x1.^b.*x2.^c%這是擬合後在取樣點得到的值,可以和y比較一下,很接近。

2樓:匿名使用者

第乙個m檔案

clear

clck0=[1 1 1];

k=fminsearch(@fun,k0)

第二個m檔案

function f=fun(k)

x1=[1640.88 1640.88 1640.88 1640.88 1640.88 ...

1621.35 1621.35 1621.35 1621.35];

x2=[0.000000277778 0.0000000810185 0.0000000607639 0.0000000405093 ...

0.0000000270062 0.000000559965 0.000000163323 0.0000000816615 ...

0.000000054441];

x=[x1;x2];

y=[0.8 1.96 2.62 3.68 5.14 0.62 1.67 3.18 5.18];

f=sum((y-k(1)*x(1,:).^k(2).*x(2,:).^k(3)).^2);

如何用matlab進行多元非線性擬合

3樓:shine戚七七

matlab擬合工具箱cftool

%擬合資料曲線;線性最小二乘法是解決曲線擬合的最常用的方法,

%1、多項式擬合函式;p=polyfit(x,y,n);求p擬合函式在xi處的近似值pi=polyval(p,xi);

%2、利用常用矩陣的除法解決複雜函式的擬合;

%3、利用lsqcurvefit函式和lsqnonlin函式擬合;

%4、利用cftool工具箱,自定義編寫函式再通過m檔案匯出的形式

matlab曲線擬合

多項式擬合函式polyfit之c語言的原始碼

matlab二元函式擬合;

4樓:匿名使用者

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;

5樓:

使用「lsqcurvefit」

clear

clcx=[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)

6樓:匿名使用者

怎麼用matlab進行非線性的多元函式擬合matlab擬合工具箱cftool

%擬合資料曲線;線性最小二乘法是解決曲線擬合的最常用的方法,%1、多項式擬合函式;p=polyfit(x,y,n);求p擬合函式在xi處的近似值pi=polyval(p,xi);

%2、利用常用矩陣的除法解決複雜函式的擬合;

%3、利用lsqcurvefit函式和lsqnonlin函式擬合;

%4、利用cftool工具箱,自定義編寫函式再通過m檔案匯出的形式

7樓:匿名使用者

你的x1只有42個變數,x2和y有43個,你這個有問題。可以用matlab中的curve fitting tool來進行擬合。

matlab 多元高次非線性函式擬合,回歸,求教高手!!!

8樓:

推薦你使用乙個函式nlinfit,我簡單給你介紹一下使用方法,以你的模型2為例:

第一步:你需要建立乙個function檔案,名字隨便,這裡我們命名為"hougen",在這個檔案內,你要把模型二描述清楚,首先我們假定beta=[a;b;c;d;e;f;g];x=[x,y,m];那麼該函式檔案內部為:

function z=hougen(beta,x)

for i=1:n ;//這裡的n是指你已有資料的長度,比如你已有的結果z=[3,2,2,3,4];n就是5,i其實就是第i次的原始資料

a=beta(i,1);b=beta(i,2);……

x=x(i,1);……

z(i)=a+b*x+c*y+d*m+e*x^2+f*y^2+g*m^2;

end第二步:你就可以直接用下面的命令了

betahat = nlinfit(x,z,@hougen,beta);

x是乙個n*3的矩陣,用已知的[x,y,m]對其賦值,z是乙個n*1的矩陣,用已知的z對其賦值,beta內是初始值,表示你對所求值的乙個預估,這個很關鍵,不能賦值太離譜,你必須給乙個合理的初始值。

然後你就得到想要的結果了,其他模型也用類似的辦法來做,更細節的問題就靠你自己了,我已經說的很明白了,如果**不明白,多想一想,可參考help檔案,自己領悟出來的掌握地更牢靠,學長只能幫你到這裡了。

9樓:匿名使用者

matlab除了函式還有很多任務具:

10樓:

學習fminisearch函式,用最小二乘法做

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

11樓:匿名使用者

首先將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個引數

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

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

spss多元線性回歸分析,SPSS多元線性回歸分析

因為在多元回歸分析的過程中,會自動剔除一些對於因變數無顯著影響的變數 你只是用簡單相關分析的不準確,有可能是變數之間存在一些共線性 所以導致單個都相關,而在多元回歸分析時 會有些變數被剔除了,回歸方程可以用,但是哪幾個不顯著的變數無法列入的 從資料分析的角度來說,哪幾個變數已經沒有什麼意義了哦,當然...

多元函式的極值問題,多元函式極值問題

clear all close all warning off all x fval fmincon 2 pi x 1 x 2 4 pi x 1 2 1 1 1 0 1,myfunc x x 1 y x 2 fval 另外新建乙個m檔案,將下列 放入 function ce ceq myfunc x...

如何設定matlab檔案路徑,Matlab中如何改變M檔案的路徑

所有的m檔案和利用的資料檔案都放在乙個資料夾裡,然後在matlab裡瀏覽到這個資料夾就可以呼叫 當前路徑下 mat和m檔案在一起 load mat 在下一級路徑下 load 下一級路徑的檔名 mat 在上一級路徑下 load mat 在平行資料夾內 load 平行的資料夾 mat 例如,讀寫當前目錄...

matlab影象旋轉,matlab中figure的影象旋轉

下圖顯示原影象旋轉後的點與原影象點的對應關係,以按此公式求得新影象每一點對應的原影象點。旋轉後,由於影象點可能是非整數,出現畫素空洞問題,故需要進行插值法,下面選用最近鄰插值法。源 html view plain copy function img rotate my img rotate chaz...

matlab學習的書籍,MATLAB學習的書籍

我們上的matlab課本是 控制系統 與計算機輔助設計 機械工業出版社。裡面基礎知識還比較多,個人感覺入門還行。另外我在網上下了 精通matlab7.0 這本書比較精典。適合基礎者用。同時在圖書館借了清華大學出版的 matlab7.0 simulink6.0建模 與高階工程應用 這個要對matlab...