matlab中怎樣程式設計解決非線性最小二乘擬合的引數問題

時間 2021-09-07 05:17:17

1樓:

beta(2)後面的 * 應該是 .* 。而且可以考慮加一下括號。

2樓:匿名使用者

1、出錯的直接原因是myfun1裡面的表示式有誤,應改為

y=(1-(1-x(:,1)).^beta(1)).^beta(2).*(1-(1-x(:,1)).^beta(3)).^beta(4);

即原來的乘號改為點乘。

2、建議改用lsqcurvefit進行最小二乘擬合,即把

beta=nlinfit(x,y,@myfun1,[0.5 0.5 0.5 0.5])

改為beta=lsqcurvefit(@myfun1,[0.5 0.5 0.5 0.5],x,y)

我注意跟蹤了擬合的過程,nlinfit在開始的時候是正常的,擬合結果逐漸接近原始資料,但不知道什麼原因,到已經可以接受的結果時,忽然資料偏離很大,導致計算結果中出現inf,因而演算法失敗。

lsqcurvefit是優化工具箱提供的函式,而nlinfit是統計工具箱的函式,二者採用的演算法應該存在差異,但限於時間精力,更深入的分析沒有進行,總之實測lsqcurvefit可以很好的實現擬合。

matlab程式設計利用最小二乘法擬合資料求引數,程式設計出了問題,求指導

3樓:匿名使用者

首先,function 能寫在腳抄本裡?我覺得單襲獨建乙個fittingfunction.m靠譜一bai些吧

function f=fittingfunction(x,xdata)

h = x(1)*exp(-xdata./x(2))+x(3)*exp(-xdata./x(4))+x(5);

g =exp(-2.77258.*(xdata^.2/10000));

f= conv(h,g);

單獨du建乙個m檔案儲存起來,然後在程zhi序中用daofittingfunction來呼叫

還有i1,i2都是什麼尺寸的矩陣,報錯結果是什麼。

4樓:

你不會來是把上面所有**

自放在一起了吧?

應該把function f=fittingfunction(x,xdata)

h = x(1)*exp(-xdata./x(2))+x(3)*exp(-xdata./x(4))+x(5);

g =exp(-2.77258.*(xdata^.2/10000));

f= conv(h,g);

這一段單獨放乙個m檔案,命名為fittingfunction.m,注意

不能改名,必須是這個。

然後第一段儲存為另外乙個m檔案,比如main.m吧。

最後那段去掉。想畫圖,就在main.m的最後補上合法的**。

MATLAB中三種差值法怎樣程式設計

宇逸 http wenku.baidu.com view 4b8beb2dcfc789eb172dc896.html?st 1 http wenku.baidu.com view 49a35f050740be1e650e9aac.html?st 1 http wenku.baidu.com view...

matlab中,怎樣用function定義帶引數的方程?比

菠蘿時空 不知道是不是這樣的功能 myfun.m function y myfun a,b y solve char a 2 b x eof 呼叫函式前先syms x 然後 myfun x 1,2 x 1 執行結果如下 syms x myfun x 1,2 x 1 ans 1 3 建立一個func....

matlab中怎樣建立對角矩陣,matlab中怎樣建立一個對角矩陣 20

小小歐平兒 材料 工具 電腦 matlab軟體 1 首先開啟電腦上的 matlab 軟體,在命令列視窗輸入一個向量n,向量n有4個元素。接著使用diag函式生成對角矩陣。2 diag n,k 可以把向量放在第k條對角線上,k為正值,表示右上。k為負值,則表示左下。在命令列輸入diag n,2 即可把...