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...