Как добавить линейную подгонку к двум кривым графика? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть 2 графика на одном графике, и когда я пытаюсь сделать примерку, я могу сделать это только на одном из них, а не на обоих одновременно. Вот что я получаю:

Figure showing two dataset plotted and an fitted curve

Я добавляю подгонку не по коду, а с помощью инструментов. Как я могу сделать это с помощью кода? Это код, который я использую:

start=10;
ending=50;
b=10;
for ipart=1:nP
  for jtime=start:ending-b
    diff2_d(ipart,jtime)=(part2rms(ipart,jtime+b,1)-part2rms(ipart,jtime,1)).^2+... % line 794 for part2rms
        (part2rms(ipart,jtime+b,2)-part2rms(ipart,jtime,2)).^2+...
        (part2rms(ipart,jtime+b,3)-part2rms(ipart,jtime,3)).^2;
  end
end
for jN=start:ending
  nP_in=nnz(rmsd(:,jN));  
  fprintf('for timestep %d fraction of particles remaining in the box is %2.2f \n',jN,nP_in/nP);
  rd1(jN)=sum(rmsd(:,jN))/nP_in;
end
for jN=start:ending-b
   rd2_d2(jN)=sum(diff2_d(:,jN));
   nP_in1=nnz(rmsd(:,jN));
   rd1_d2(jN)=sum(diff2_d(:,jN))/nP_in1;
end

figure(3)
plot(log10(tM(start:ending-b)),log10(rd1_d2(start:ending-b)))
xlabel('log(time (s))')
ylabel('log(<(\Delta r)>^2)')
str = sprintf('DEFINITION 2\n Initial number of particles = %d Particles remaining = %d\nMonitors=%d tinitial=%.2f tfinal=%.2f', nP,nP_in1,ntM,start*tM(1,1),ending*tM(1,1));
title(str, 'FontSize', 7);

figure(4)
plot(log10(tM(start:ending)),log10(rd1(start:ending)),log10(tM(start:ending-b)),log10(rd1_d2(start:ending-b)));
xlabel('log(time (s))')
ylabel('log(<(\Delta r)>^2)')
legend('definition 1','definition 2');
str = sprintf('FOR TIME STEP=%d\n Initial number of particles = %d Monitors=%d tinitial=%.2f tfinal=%.2f\nParticles remaining =  %d(definition 1)\n Particles remaining = %d(definition 2)', b, nP,ntM,start*tM(1,1),ending*tM(1,1),nP_in,nP_in1);
title(str, 'FontSize', 7);

Также, если бы я хотел, чтобы подгонка была на определенной части кривой, как я мог это сделать?

Я пробовал это, но это не сработало:

e = excludedata(log10(tM(start:ending))',log10(rd1(start:ending))', 'range', [17.5,18.7]); 
f=fit(log10(tM(start:ending))',log10(rd1(start:ending))','poly1','Exclude',e);
figure(4)
hold on
plot(f,log10(tM(start:ending)),log10(rd1(start:ending)),log10(tM(start:ending-b)),log10(rd1_d2(start:ending-b)));

1 Ответ

0 голосов
/ 18 мая 2019

Отказ от ответственности, я не совсем следовал вашему коду, но я думаю, что у вас есть два набора данных, вы хотели построить их, затем подогнать под модель, затем построить модель.Код ниже делает это.Вам нужно будет принять основы для вашего случая.

clear
close all
clc
x = (1:10)';
y1 = ((2+0.1*rand(10,1)).*x+1);
y2 = ((3+0.1*rand(10,1)).*x+2);

plot(x,y1,'kx',x,y2,'ro')
hold on
grid on

X = table(x,y1,y2);
f1 = fitglm(X,'y1~x');
f2 = fitglm(X,'y2~x');

plot(X.x,predict(f1,X),':k', X.x,predict(f2,X),'--r')
...