【问题标题】:Basic for loop in MatlabMatlab中的基本for循环
【发布时间】:2015-04-15 03:28:49
【问题描述】:

我在 Matlab 中有一个简单的问题。如何创建一个 for 循环,该循环将从结果最小的向量中选择值并将所选值从向量写入 .txt 文件?例如,如果我有:

T = 100;
W = 20;
h = [h1 h2 h3 ... ];
y = 2*T*W/h;

我想创建一个循环,它将在向量 h 中搜索一个值,该值将提供 y 的最小值并将所选的 h 写入 .txt 文件。 任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: matlab for-loop vector minimum


    【解决方案1】:

    for循环:

    min_y = 2*T*W/h(1);
    h_chosen = 1;
    for i = 2:length(h)
      if min_y > 2*T*W/h(i)
        min_y = 2*T*W/h(i);
        h_chosen = i;
      end
    end
    

    比for循环快得多:

    [~, idx] = min(arrayfun(@(i) 2*T*W/h(i), 1:length(h)));
    h_chosen = h(idx);
    

    写入.txt 文件:(http://www.mathworks.com/help/matlab/ref/fprintf.html)

    fileID = fopen('min_h.txt','w');
    fprintf(fileID, '%d\n', h_chosen);
    

    【讨论】:

    • 嘿@scmg 谢谢你的回答,但我想写 h_chosen 的确切值而不是位置。我的第二个问题是,是否可以使用 for 循环中的 simulink 模型来完成每个 h 值的循环仿真,并依赖于仿真结果来选择和显示/写入提供最小结果的 h 值?再次感谢!!
    • 你试过代码了吗? h_chosen = h(idx) 给你h_chosen 的值……关于simulink模型,我不确定,你可以试试,或者至少贴一些例子……
    • 为什么是arrayfun?你可以使用min(2*T*W./h)
    • @scmg 这是我的 simulink 模型 (postimg.org/image/45ove70qz/86687f75),我想为 h = [h1 h2 h3 h4 .. ] 运行模拟并编写/显示提供最小的 m_fuel(W 和 T 是常数值,它们不会改变)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多