# How to perform nonlinear regression accross multiple datasets

11 ビュー (過去 30 日間)
Jack Nolan 2021 年 2 月 19 日
コメント済み: Jack Nolan 2021 年 2 月 25 日
Appolgies in advance as I am new to MATLAB.
I am trying to fit a model to mutiple data sets at once using non linear regression. I have found similiar examples but I am unable to modify them to suit my needs.
The model contains 3 unkown paramaters that must be tuned to satsifty (or give best model fit) accross 4 data sets at once.However, the model also contains 1 known paramater which is different for each of the 4 datasets.
Model to fit:
• ΔRon/Ron are the data set y values
• t is the data set x values
• A1, A2, γ are unkown paramaters (common to all data sets) which must be found
• tau is a kown paramaer whcih differs accross all data sets
I have attached an m-file with relevant data and information. If sombody could provide guidance or a commented solution I would be very grateful. Thanks.
##### 8 件のコメント表示非表示 7 件の古いコメント
Alex Sha 2021 年 2 月 21 日
Matlab should be OK, but need you to do more work.

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

### 採用された回答

Deepak Meena 2021 年 2 月 24 日
Hi Jack,
The following post on MATLAB Answers discusses a similar case:
In that question , there were 2 unknown shared parameters and 1 parameter was different for all the dataset but was also unknown. In this question we have 3 unknown shared parameters and 1 known parameters whose value will be different for each dataset.So I modified that to illustrate that :
function sharedparams
t = (0:10)';
T = [t; t; t;t];
Y = 3 + [exp(-t/2); 2*exp(-t/2); 3*exp(-t/2);4*exp(-t/2)] + randn(44,1)/10;
dsid = [ones(11,1); 2*ones(11,1); 3*ones(11,1);4*ones(11,1)];
gscatter(T,Y,dsid)
X = [T dsid];
A3 = [-5;1;3;4];
b = nlinfit(X,Y,@subfun,ones(1,3))
line(t,b(1)+b(2)+b(3)*t+A3(1),'color','r');
line(t,b(1)+b(2)+b(3)*t+A3(2),'color','g');
line(t,b(1)+b(2)+b(3)*t+A3(3),'color','b');
line(t,b(1)+b(2)+b(3)*t+A3(4),'color','c');
function yfit = subfun(param,X)
T = X(:,1); % time
dsid = X(:,2); % dataset id
A0 = param(1);
A1 = param(2);
A2 = param(3);
A3 = [-5;1;3;4]; %known paramter
yfit = A0 + A1+ A2*T + A3(dsid);
##### 7 件のコメント表示非表示 6 件の古いコメント
Jack Nolan 2021 年 2 月 25 日
Thanks alot @Tom Lane, it's working now

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

### カテゴリ

Find more on Resampling Techniques in Help Center and File Exchange

R2020b

### Community Treasure Hunt

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

Start Hunting!

Translated by