To take parameter of a fit from one section to use in another fit in the next section.
조회 수: 1 (최근 30일)
이전 댓글 표시
I have a program which make a linear fit on a data. I want to use the slope of this linear fit on another data where I fit exponential (a*exp(b*x)) as b. Part of my program which do this is as below:
%%SECTION 1:THIS PART FIT LINEAR FIT ON THE PLOT.
[FTLx,FTLy]=ginput(2);
indexL=find(B(:,1)>=FTLx(1) & B(:,1)<=FTLx(2));
NewXL=B(B(:,1)>=FTLx(1) & B(:,1)<=FTLx(2));
NewYL=B(indexL,2);
P=polyfit(NewXL,log(NewYL),1);
LFit=P(1)*NewXL+P(2);
slope=P(1) %THIS slope I USE IN THE NEXT SECTION
hold on
figure(3)
subplot(1,2,1),plot(NewXL,LFit,'-b',NewX,log(NewY),':or')
%%SECTION 2: THIS SECTION FITS EXPONENTIAL... THIS SECTION USE 'slope' FROM THE PREVIOUS SECTION
options = fitoptions;
options.Normal = 'on';
ft=fittype('a*exp(slope*x)','independent','x','dependent','y');%THIS 'slope' SEEMS NOT TAKING THE VALUE FROM THE PREVIOUS SECTION!! :( :( :(
[fitresult, gof]=fit(NewX,NewY,ft,options)
figure(3)
subplot(1,2,2), plot(fitresult,'-b',NewX,NewY,':or')
title('Exponential Fit in the selected range')
Here in the second section, I am using 'slope' from the first section. But it seems to taking the value of 'slope' from the first section! Is there anything wrong? How can I correct it?
댓글 수: 1
dpb
2014년 5월 21일
I've never actually used the wrapper stuff but looks like perhaps if you were to wrap in an anonymous function --
ft = fittype( @(a,x) a*exp(slope*x), 'problem', 'slope' );
f1 = fit(NewX, NewY, ft, 'problem', slope);
might do the trick...
채택된 답변
Sean de Wolski
2014년 5월 21일
% Sample data
x = (1:10).';
y = cumsum(rand(10,1));
% First fit
ft = fittype(@(m,b,x)m.*x+b);
fr = fit(x,y,ft)
% Second fit
ft2 = fittype(@(a,x)a*exp(fr.m*x));
fr2 = fit(x,y,ft2)
Using anonymous functions. You could do this with strings too but it would involve some kludge with sprintf / num2str etc.
댓글 수: 2
Sean de Wolski
2014년 5월 22일
You need to pass x into the fit result object:
plot(x,y,'b*',x,fr(x),'r-')
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Linear and Nonlinear Regression에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!