Используя нагрузку вместо другой команды ввода / вывода
Как я могу изменить эту программу, используя команду load-ascii для чтения (x,y)?
n=0;
sum_x = 0;
sum_y = 0;
sum_x2 = 0;
sum_xy = 0;
disp('This program performs a least-squares fit of an');
disp('input data set to a straight line. Enter the name');
disp('of the file containing the input (x,y) pairs: ');
filename = input(' ','s');
[fid,msg] = fopen(filename,'rt');
if fid<0
disp(msg);
else
[in,count]=fscanf(fid, '%g %g',2);
while ~feof(fid)
x=in(1);
y=in(2);
n=n+1;
sum_x=sum_x+x;
sum_y=sum_y+y;
sum_x2=sum_x2+x.^2;
sum_xy=sum_xy+x*y;
[in,count] = fscanf(fid, '%f',[1 2]);
end
fclose(fid);
x_bar = sum_x / n;
y_bar = sum_y / n;
slope = (sum_xy - sum_x*y_bar) / (sum_x2 - sum_x*x_bar);
y_int = y_bar - slope * x_bar;
fprintf('Regression coefficients for the least-squares line:\n');
fprintf('Slope (m) =%12.3f\n',slope);
fprintf('Intercept (b) =%12.3f\n',y_int);
fprintf('No of points =%12d\n',n);
end
1 ответ
Если я вас правильно понял, возможно, вы захотите этого:
x=load('-ascii',filename);
sumx =sum(x(:,1));
sumy =sum(x(:,2));
sumx2=sum(x(:,1).^2);
sumy2=sum(x(:,2).^2);
sumxy=sum(x(:,1).*x(:,2));
n =size(x,1);
Также попробуйте эти
sums =sum(x);
sum2s=sum(x.^2);
sumxy=sum(prod(x,2));
means=mean(x);
Также вы знаете, что есть функция
[slope,int]=regress(x(:,2), [x(:,1) ones(n,1)])
что может устранить вашу работу:)
редактировать
Учитывая то, что вы поместили ниже, кажется, что ваши данные не находятся в отдельных строках и состоят из чисел, разделенных только пробелами. Так что, если это правильно, после load
Скажите, вы должны вставить строку
x=reshape(x, 2, length(x)/2);
Обратите внимание, что при чтении файла ASCII точный формат важен! Обратите внимание, что это не удастся, если у вас есть нечетное число чисел, и даст неправильные значения, если у вас есть какие-либо символы новой строки в вашем файле.
Я думаю, что весь остальной код, который вы написали, сводится к:
x=load('-ascii',filename);
[slope,int]=regress(x(:,2), [x(:,1) ones(size(x,1),1)])