Matlab 重复运行自定义程序,直到矩阵的两个分量为0?
我对matlab一点也不熟悉,我有一个课堂上的项目要完成 我有一个自定义的.m函数,名为L1(一个线性程序)。我想重复L1,将其中一个变量tau增加2倍,直到w的两个分量(一个31x1矩阵)为零,同时也将w中低于阈值的分量归零 我知道这是非常错误的,但我不是一个真正的程序员。所以我想做一个循环?一些很长的句子:Matlab 重复运行自定义程序,直到矩阵的两个分量为0?,matlab,linear-programming,Matlab,Linear Programming,我对matlab一点也不熟悉,我有一个课堂上的项目要完成 我有一个自定义的.m函数,名为L1(一个线性程序)。我想重复L1,将其中一个变量tau增加2倍,直到w的两个分量(一个31x1矩阵)为零,同时也将w中低于阈值的分量归零 我知道这是非常错误的,但我不是一个真正的程序员。所以我想做一个循环?一些很长的句子: %runs program once to get values of w tau = 0.1 fracTest = 0.1 %these are just variables reor
%runs program once to get values of w
tau = 0.1
fracTest = 0.1 %these are just variables
reord = 0 %more variables
[train,~,~,~] = wdbcData(input_file, dataDim, fracTest, reord); %another self-defined function
[w, gamm, obj, misclass] = separateL1(train, 1:dataDim, tau, quiet);
while w > 0
tau = tau*2
[train,~,~,~] = wdbcData(input_file, dataDim, fracTest, reord);
[w, gamm, obj, misclass] = separateL1(train, 1:dataDim, tau, quiet);
%checks threshold value
if w < 10^-6 * norm(w, Inf)
w = 0
end
end
%运行程序一次以获取w的值
tau=0.1
fracTest=0.1%这些只是变量
reord=变量增加0%
[train,~,~,~]=wdbcData(输入文件、数据尺寸、分形测试、reord);%另一个自定义函数
[w,gamm,obj,misclass]=单独1(列车,1:dataDim,tau,安静);
当w>0时
τ=τ*2
[train,~,~,~]=wdbcData(输入_文件、数据dim、fracTest、reord);
[w,gamm,obj,misclass]=单独1(列车,1:dataDim,tau,安静);
%检查阈值
如果w<10^-6*范数(w,Inf)
w=0
结束
结束
非常感谢您的帮助 您实际上做得很好,只是在这里进行了一点优化,并修复了一些小错误
fracTest = 0.1 %these are just variables
reord = 0 %more variables
tau = 0.1
w = [1 1]; %set w to some non-zero value initially
while isequal(w,[0 0])
tau = tau*2
[train,~,~,~] = wdbcData(input_file, dataDim, fracTest, reord);
[w, gamm, obj, misclass] = separateL1(train, 1:dataDim, tau, quiet);
%checks threshold value
th = 10^-6*norm(w, Inf)
if w(1) < th
w(1) = 0
end
if w(2) < th
w(2) = 0
end
end
fracTest=0.1%这些只是变量
reord=变量增加0%
tau=0.1
w=[1];%最初将w设置为某个非零值
而等质量(w[0])
τ=τ*2
[train,~,~,~]=wdbcData(输入_文件、数据dim、fracTest、reord);
[w,gamm,obj,misclass]=单独1(列车,1:dataDim,tau,安静);
%检查阈值
th=10^-6*标准值(w,Inf)
如果w(1)
非常感谢您!!对不起,我有一个简短的后续问题。如果w
是一个31x1矩阵,我想看看这31个值中是否有一个为零,我该怎么办?我猜我会定义一个类似的矩阵,其中包含1
s,并使用参数,而isequal(长度(查找(w==0))>2,一个矩阵)
?@Nikitauisequal(w,零(大小(w))
将起作用<代码>零(大小(w))创建一个大小与w相同的零矩阵/数组。很抱歉,我经常遇到问题。显然,我没有一个“真”0(即:我的例程返回0.0000001之类的值,返回0.0000)。现在我想设置如下内容:while~isequal(length(find(w2,true([31,1]))
,但我认为这只会在所有w<0.000
时中断while循环?我如何更改这一点,以便只要w的任意两个分量为0,我就中断while循环?@Nikitau不用担心,我会一直在这里,直到你的问题得到解决。在这种情况下,你可以使用这个while sum(w