cuốn sách gpt4 ai đã làm

matlab - Tự động thay đổi vòng lặp for trong MATLAB

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 19:24:49 27 4
mua khóa gpt4 Nike

Khi thiết lập vòng lặp for, tôi muốn có thể lặp qua một số tham số không xác định.

Với tệp đầu vào, người dùng có thể đặt bao nhiêu tham số vòng lặp tùy thích và tôi muốn có thể lặp qua chúng bất kể số lượng tham số họ đặt. Ví dụ về đầu vào vòng lặp: (lưu ý rằng đầu vào của tôi cũng có thể là danh sách các chuỗi và tổ hợp các số)

Trường hợp 1:

  • Trọng lượng 45000:5000:75000
  • Độ cao 10000
  • Tốc độ 0,2:0,1:0,9

Trường hợp 2:

  • Trọng lượng 30000
  • Độ cao 1000:1000:10000
  • Cánh 10, 20
  • Nhiệt độ -10:1:10

Danh sách có thể có độ dài khác nhau và chứa 0-15 biến. Tôi biết cách giải quyết, nhưng sử dụng nhiều vòng lặp for lồng nhau để thực hiện việc này thực sự rất cồng kềnh. Tôi đang tìm cách thiết lập một phương thức, có thể sử dụng đệ quy, trong đó mã sẽ thiết lập một hệ thống vòng lặp phù hợp bất kể số lượng tham số liên quan và vẫn theo dõi các biến đó.

câu trả lời hay nhất

Giải pháp tạo mã

Vâng, bạn đã có rất nhiều giải pháp tuyệt vời. Tôi sẽ chỉ đưa vào đó một cái liên quan đến việc tạo mã. MATLAB không thực sự sử dụng những công cụ này, nhưng bạn có thể sử dụng một số vòng lặp và fprintf để mô phỏng nó. Đây là tập lệnh tạo mã của tôi:

s = struct();
s.weight = 45000:5000:75000;
s.altitude = 10000;
s.engine = {'ge','rolsroyce'};

h = fopen('thisrun.m','w+') ;

mydisp = @(varargin)disp(transpose(varargin(:))) % thân hàm giả

vars = (các) trường;
nv = numel(vars);

với ii = 1:nv
if isnumeric(s.(vars{ii}))
lb = '(' ;
rb = ')' ;
khác
lb = '{' ;
rb = '}' ;
end
fprintf(h,'for i%g = 1:numel(s.(vars{%g})) \n',ii,ii);
fprintf(h,'i%gval = s.(vars{%g})%si%g%s; \n',ii,ii,lb,ii,rb);
end

fprintf(h,'mydisp(');
với ii = 1:numel(vars)
fprintf(h,'i%gval',ii);
nếu tôi<>
fprintf(h,',') ;
end
end
fprintf(h,') ;

với ii = 1:nv
fprintf(h,'end \n');
end

fclose(h);
chạy thisrun.m

Mã được tạo (thisrun.m):

cho i1 = 1:numel(s.(vars{1}))
i1val = s.(vars{1})(i1);
cho i2 = 1:numel(s.(vars{2}))
i2val = s.(vars{2})(i2);
cho i3 = 1:numel(s.(vars{3}))
i3val = s.(vars{3}){i3};
mydisp(i1val,i2val,i3val);
end
end
end

Kết quả chạy code được tạo:

>>
[45000] [10000] 'ge'

[45000] [10000] 'rolsroyce'

[50000] [10000] 'ge'

[50000] [10000] 'rolsroyce'

[55000] [10000] 'ge'

[55000] [10000] 'rolsroyce'

[60000] [10000] 'ge'

[60000] [10000] 'rolsroyce'

[65000] [10000] 'ge'

[65000] [10000] 'rolsroyce'

[70000] [10000] 'ge'

[70000] [10000] 'rolsroyce'

[75000] [10000] 'ge'

[75000] [10000] 'rolsroyce'

Việc tạo mã cần có thời gian nhưng đây vẫn có thể là giải pháp hợp lệ nếu bạn cần chạy tệp nhiều lần.

Về matlab - Tự động thay đổi vòng lặp for trong MATLAB, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/35140023/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress