필터 지우기
필터 지우기

Running an Iteration for single variable.

조회 수: 2 (최근 30일)
Alex
Alex 2012년 2월 15일
Hey all, I've been using a closure loop with fsolve to crunch data. The below code took 3 rows of data from a .csv, and plugged it into 3 equations for simultaneous solution. I would like to modify the code to solve a single equations with a single variable, a function that fsolve is not required for. I still need to iterate, because I have to solve this equation many times sequentially, and they still need to output to a .csv. How would you go about it?
data = csvread('data.csv');
assert (mod(size(data, 1), 2) == 0, ...
'Input data must have an integer multiple of 2 rows');
assert (size(data, 2) == 6, ...
'Input data must have exactly six columns.');
nsys = size(data, 1) / 2;
soln = zeros(nsys, 2);
options=optimset('MaxFunEvals',1e10,'MaxIter',25000);
for k = 1 : nsys,
F = generate_system(data(2*(k-1) + (1:2), 1:end));
guess = [3 3];
soln(k, :) = fsolve(F, guess,options);
end
fid=fopen('results.csv','w');
fprintf(fid,'%5.5f %5.5f\n',soln);
fclose(fid);
generate_system looks like this:
function F = generate_system(p)
assert (ndims(p) ==2, ...
'System parameters ''p'' must be 2D matrix.');
assert (all(size(p) ==[2,6]), ...
'System parameters must be 2-by-6 matrix.');
y = p(:,1);
n = p(:,2);
k = p(:,3);
n0 = p(:,4);
k0 = p(:,5);
R = p(:,6);
F = @(x) ((((n0-(n-1i.*k))./(n0+(n-1i.*k)))+(((n-1i.*k)-(x(1)-1i.*x(2)))./((n-1i.*k)+(x(1)-1i.*x(2)))).*(exp(-2.*1i.*(2.*pi./y).*(n-1i.*k).*300)))./(1+((n0-(n-1i.*k))./(n0+(n-1i.*k))).*(((n-1i.*k)-(x(1)-1i.*x(2)))./((n-1i.*k)+(x(1)-1i.*x(2)))).*(exp(-2.*1i.*(2.*pi./y).*(n-1i.*k).*300))))-R;
end
Thoughts?

답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by