日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

matlab非線性最小二乘擬合

作者:曉晨的博客 更新時間: 2022-10-14 編程語言

在實際應用中常常會遇到利用非線性最小二乘進行擬合函數的系數情況。這可以通過MATLAB中內置的函數lsqcurvefit實現,對其進行簡單介紹如下:

1.自定義函數

首先,新建一個函數文件,如下圖所示:
在這里插入圖片描述
設置文件名為myfun.m,填寫下述內容:

function F = myfun(cof,xdata)
F = cof(1)*sin(xdata)+cof(2);

這個函數表示的為:
f ( x ) = a s i n ( x ) + b . f(x) = asin(x)+b. f(x)=asin(x)+b.

2.使用lsqcurvefit函數

接著,新建一個腳本,用來調用這個函數,以及使用lsqcurvefit命令進行優化測試。
在這里插入圖片描述
在腳本中寫入下述內容,注釋中有詳細解釋:

%% xiaochen 2022年10月11日12:03:36
clc;
clear all;
close all;
% 制作需要擬合的數據
xdata = [-5:0.1:5];
true_cof = [1,1]; % 假設真實的系數a = 1, b = 1
ydata = myfun(true_cof,xdata);
ydata = ydata + rand(1,length(xdata));

predict_cof = [0,0];% 預測的系數a = 0, b = 0
%result_cof為擬合系數的結果 resnorm為殘差
%myfun為要擬合的函數
%predict_cof為預測系數值
%xdata,ydata為擬合數據
[result_cof,resnorm] = lsqcurvefit(@myfun,predict_cof,xdata,ydata);

% 使用擬合的系數計算y的值
ydata2 = myfun(result_cof,xdata);

figure;
plot(xdata, ydata, Marker="*");
hold on;
plot(xdata, ydata2);
legend('擬合數據','擬合結果');

擬合出來的結果如下圖中所示,藍色為原始的數據,橙色為擬合曲線。
在這里插入圖片描述

原文鏈接:https://blog.csdn.net/wxc_1998/article/details/127260558

欄目分類
最近更新