将变量范围排列到单元格中 MATLAB

计算科学 matlab 向量
2021-12-16 05:22:56

我有以下简单的代码

v=[];

for i=10:-1:1
for j=0:0.2:5
    v(end+1)=i+j;
end
end
min(v) 

它返回向量的最小值,在这种情况下其长度为 260。我希望代码返回最小值的值。我定义了vijv

a=cell(2,2)

我在代码中包含了该语句

a{end+1,end+1}=[i j];
b=reshape(a,1,length(i)*length(j))
for k=1:length(v)
if v(k)==min(v)
disp(b{1,k})
end
end

但它没有用。

请问有什么帮助吗?

2个回答

您只需要将输出添加到您的min()函数中,例如:

[value, ind] = min(v)

ind然后是您的最小位置的索引值(您正在寻找的 i,j)并value具有相应的最小值

在这里,我正在对该代码和逻辑进行一些更正。 是为复数保留的,所以请尽量避免在变量名中使用它。我的第一个代码利用 matlab 内置命令的优势来查找值。ij

clc
clear all
i1=10:-1:1;
j1=0:0.2:5;
v=zeros(1,length(i1)*length(j1));
k=1;
for ii=1:1:length(i1)
for jj=1:1:length(j1)
    v(k)=i1(ii)-j1(jj);
      k=k+1;
end
end

v1=[reshape(v,length(j1),length(i1))]';
[M,I] = min(v1(:));
[I_row, I_col] = ind2sub(size(v1),I);
disp('requied i_value is')
disp(i1(I_row))
display('requied j_value is')
display(j1(I_col))

第二个代码将给出的最小值相对应的所有值。此逻辑可用于其他编程语言。ijv

clc
clear all
i1=10:-1:1;
j1=0:0.2:5;
v=zeros(1,length(i1)*length(j1));
k=1;
for ii=1:1:length(i1)
for jj=1:1:length(j1)
    v(k)=i1(ii)-j1(jj);
    k=k+1;
end
end
k=1;
for ii=1:1:length(i1)
for jj=1:1:length(j1)
    if v(k)==min(v)
        disp('requied i_value is')
        display(i1(ii))
        display('requied j_value is')
        display(j1(jj))


    end
    k=k+1;
end
end