2016-04-18 2 views
1

Мне нужно построить точки, которые имеют координаты:Как входных значений, построить их и найти наилучшее соответствие

(0.8,825.5) 
(1.1,1096) 
(1.3,1293) 
(1.5,1404) 

то мне нужно, чтобы найти наиболее подходящую кривую к следующему уравнению:

y = x*(a1*x + a2)*(1 – a12*25) 

Возврат a1, a2 и a12.

вот что я пытался до сих пор не повезло:

Fzn = [0.8 1.1 1.3 1.4]; 
Dy = [825.5 1096 1293 1404]; 
x = Fzn; 
y = Dy; 

expr = 'x * (a1 * x + a2) * (1 - a12 * 25)'; 
ft = fittype(expr, 'independent', 'x', 'dependent','y'); 
opts = fitoptions('Method', 'NonlinearLeastSquares'); 
opts.StartPoint = [1 1 1]; %[a1 a2 a12] 
[fitresult, gof] = fit(x, y, ft, opts) 

% plot 
LFit = feval(fitresult, x); 
figure(1); 
h = plot(x,LFit,'r-', x, y,'g.'); 
set(h, 'LineWidth',2) 
legend({'Fit Line', 'data points'}, 'Location','SouthEast') 
grid on 

я получаю эту ошибку:

Error using fit>iFit (line 127) 
X must be a matrix with one or two columns. 

Error in fit (line 108) 
[fitobj, goodness, output, convmsg] = iFit(xdatain, ydatain, 
fittypeobj, ... 

Error in HatcherTireTest2 (line 113) 
[fitresult, gof] = fit(x, y, ft, opts) 
+0

Для создания нескольких точек используйте 'hold on'. Проверьте http://stackoverflow.com/questions/36667545/custom-equation-curve-fitting-in-matlab/36668335#36668335 для подгонки кривой – xvan

+0

, но как я могу ввести эти значения/построить их? – Vbasic4now

+0

У вас это есть в MATLAB? Почему вы не делаете простой регресс с помощью Excel? – 16per9

ответ

2

Обратите внимание, что у вас есть одна степень свободы, так что будет бесконечным решения

%Put your points in a matrix 
X = [ 0.8 825.5 ; 1.1 1096 ; 1.3 1293 ; 1.5,1404 ] 
plot(X(:,1) , X(:,2),'x') 
hold on 

%Fit the points to the equation 
f = fittype('x.*(a*x + b)*(1 – c*25)'); 
[fit1,gof,fitinfo] = fit(X(:,1),X(:,2),f,'StartPoint',[1 1 1]); 

%Your result is in fit1 
+0

Я попробовал что-то вроде этого и обновил свой вопрос. но я не могу заставить его работать – Vbasic4now

+0

@adriaan, как бы вы изменили свой код на основе того, что я только что добавил в свой вопрос? – Vbasic4now

+0

У меня сейчас нет matlab, но попробуйте a, b, c вместо a1 a2 a12 – xvan

Смежные вопросы