Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 重复运行自定义程序,直到矩阵的两个分量为0?_Matlab_Linear Programming - Fatal编程技术网

Matlab 重复运行自定义程序,直到矩阵的两个分量为0?

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

我对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
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,一个矩阵)
?@Nikitau
isequal(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