I want to fit a custom function to my experimental data. For simplicity, I have some arbitary x & y values and a very simple linear function. I write the following code:

clear all;

x = [1 2 3 4 5]'; % x data
y = [.8 4 10 18 23]'; % y data

Y = lsqcurvefit(fun,1,x,y) % fitting function 'fun' defined below to find parameter 'a'

function y = fun(a,x)
y = a*x; % just a simple function for example, in actual problem, it is a long complicated function with various parameters
end

I get the following error: 'Not enough input arguements.'

I know this particular simple function can be defined as anonymous function and be fitted but I don't it that way.

 採用された回答

Star Strider
Star Strider 2022 年 11 月 10 日

1 投票

The ‘fun’ function must be presented to lsqcurvefit as a function handle using the ‘@’ operator —
x = [1 2 3 4 5]'; % x data
y = [.8 4 10 18 23]'; % y data
Y = lsqcurvefit(@fun,1,x,y) % fitting function 'fun' defined below to find parameter 'a'
Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
Y = 4.1055
function y = fun(a,x)
y = a*x; % just a simple function for example, in actual problem, it is a long complicated function with various parameters
end
See What Is a Function Handle? for details.
.

2 件のコメント

Sourabh Jain
Sourabh Jain 2022 年 11 月 10 日
Thank you Star Strider for your answer. It solved my problem.
Star Strider
Star Strider 2022 年 11 月 10 日
As always, my pleasure!

サインインしてコメントする。

その他の回答 (2 件)

VBBV
VBBV 2022 年 11 月 10 日
編集済み: VBBV 2022 年 11 月 10 日

1 投票

To define a and then call in function

2 件のコメント

VBBV
VBBV 2022 年 11 月 10 日
Then use @
Y = lsqcurvefit(@fun,1,x,y)
Sourabh Jain
Sourabh Jain 2022 年 11 月 10 日
Thank you for your respone, it helped me.

サインインしてコメントする。

Torsten
Torsten 2022 年 11 月 10 日
編集済み: Torsten 2022 年 11 月 10 日

0 投票

A simpler way for this problem, but I guess your "real" model is more complicated:
x = [1 2 3 4 5]'; % x data
y = [.8 4 10 18 23]'; % y data
a = x\y
a = 4.1055

1 件のコメント

Sourabh Jain
Sourabh Jain 2022 年 11 月 10 日
Thank you Torsten for this intelligent answer, I really like your perspective.
Yes, my actual problem is not so simple, it is a transfer matrix model.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File Exchange で Programming についてさらに検索

製品

リリース

R2021b

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by