日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题

發布時間:2025/3/15 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. lsqcurvefit()使用方法

1.lsqcurvefit使用形式如下幾種

x = lsqcurvefit(fun,x0,xdata,ydata) x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub) x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options) x = lsqcurvefit(problem) [x,resnorm] = lsqcurvefit(___) [x,resnorm,residual,exitflag,output] = lsqcurvefit(___) [x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqcurvefit(___)

2.輸入參數解釋:

fun:符號函數,例如匿名函數: @(A,B,X) A*X+B;
x0:初始解向量,需要求解的參數,使用前需要初始化.在上面的匿名函數中,x0可以看作是由A和B組成的向量,x0 = [A,B] ,為了基于X和Y數據,擬合出最適合的A,B參數;
xdata:已有的x值(可看作是輸入數據);
ydata:已有的y值(可看作是樣本的標簽);
lb,ub:解向量的上下界限,lb <= x0 <= ub,若沒有要求,就設為空lb=[ ],ub=[ ];
options:指定優化器的參數,也可只適用默認值,不設定,常見設置如下:

Option值作用
Display‘off’ ,‘iter’ , ‘final’ , ‘notify’‘off’ :不顯示輸出; ‘iter’ :顯示每次迭代的結果; ‘final’ :顯示最終結果; ‘notify’ :只在函數不收斂的時候顯示結果
MaxFunEvals正整數函數求值運算最高次數
MaxIter正整數最大迭代次數
TolFun正數迭代終止誤差
TolX正數結束迭代的X值

例子:
fun = @(X0,X) X0*X
options = optimset(‘MaxFunEvals’,800,‘MaxIter’,500);
w = lsqcurvefit(fun,X0,X_data,Y_data,[],[],options);

3.返回值

[x,resnorm,residual,exitflag,output] = lsqcurvefit(___)

x:求出的解向量,即擬合的最優解。可以認為是x0不斷迭代擬合,優化調整后,得到的最優的x0;
resnorm:殘差的平方和,sum ((fun(x0,xdata)-ydata).^2);
residual:殘差,fun(x0,xdata)-ydata;
exitflag:終止迭代的條件;
output:輸出的優化信息。

完整示例:

xdata = [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3]; ydata =[455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5]; fun = @(x,xdata)x(1)*exp(x(2)*xdata); x0 = [100,-1]; options = optimset('MaxFunEvals',800,'MaxIter',500); lb = []; ub = []; [x,resnorm,residual,exitflag,output] = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options);

二. 報錯Objective function is returning undefined values at initial point. lsqcurvefit cannot continue.

????????報這種錯誤的原因一般有兩種,一是初始值設置的問題;二是擬合的數據中存在無定義的數據或者是空數據;

1.第一種的解決辦法

??? ??? ??重新設置初始值,例如原來是0~1范圍內的初始值,可以將其變換一下,使其在10以上,100以上,0~0.1,0~0.01等等,多次不同范圍的嘗試即可。

2.第二種的解決辦法(大多數是這種)

??? ??? ??檢查xdata和ydata矩陣,是否含有空數據(NaN)。但是如果矩陣太大,肉眼無法在變量欄中一下子直接看到,可以首先判斷矩陣中所有位置上的元素是否為NaN,返回一個0,1矩陣,0:沒有,1:有,進而返回NaN的位置索引。
(1)判斷矩陣或向量中是否有空值
??? ??? ??isnan()函數,判斷矩陣中所有位置上的元素是否為NaN,返回一個0,1矩陣,0:沒有,1:有

>> matrix=[4,NaN;3,5]matrix =4 NaN3 5>> a = isnan(matrix)a =2×2 logical 數組0 10 0

(2)判斷矩陣或向量中是否有
??? ??? ??find()函數可以找到1的位置,也就對應了原始矩陣matrix中NaN的位置

>> [x,y] = find(a == 1)x =1y =2>>

總結

以上是生活随笔為你收集整理的Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。