【问题标题】:Running Matlab script many times多次运行 Matlab 脚本
【发布时间】:2016-11-01 01:56:23
【问题描述】:

所以我有一个 matlab.m 文件脚本。文件运行时。它生成一个向量。我想保存该向量并重新运行脚本。如何在整个脚本文件上放置一个循环并创建一个vector_{i},其中索引输入文件名?我会发布代码,但如果没有桌面上的数据,它就无法工作。

[data,labels]=xlsread('C:\Users\Hilbert\Desktop\matlab\matlabdata_abe.xlsx');


gdp=log(data(:,1)./lagmatrix(data(:,1),1)) %GDP
ip=log(data(:,2)./lagmatrix(data(:,2),1)) %IP
tnx=data(:,3) %TNX
m2=log(data(:,4)./lagmatrix(data(:,4),1)) %M2
cpi=log(data(:,5)./lagmatrix(data(:,5),1)) %CPI
ffed=log(data(:,6)./lagmatrix(data(:,6),1)) %FedFund


Dgdp=gdp
inflation=cpi
Dm2=m2
ffr_=ffed


data=[Dgdp(54:length(cpi)), inflation(54:length(cpi)), Dm2(54:length(cpi)), ffr_(54:length(cpi)) ]; 

data_L1=lagmatrix(data,1)
data_L2=lagmatrix(data,2)
data_L3=lagmatrix(data,3)
data_L4=lagmatrix(data,4)
mat=[ones(1,size(data_L1',2));data_L1';data_L2';data_L3';data_L4']
mat=mat(:,5:end)

X=[data';data_L1';data_L2';data_L3']
X=X(:,5:end)


mat=mat';
X=X'
Fhat=(inv(mat'*mat) * mat'*X)';

nobs=size(data,1)
p=4

yhat= mat*Fhat'
yhat=yhat(:,1:4)
data_sample=data(5:nobs,:)
res=data_sample - yhat

res_{loopindexnumber}=res  %saves the vector and re-runs the entire cost again the idea is to bootstrap the data by running many simulations and saving the residual vector

【问题讨论】:

  • 制作一个虚拟代码或/和数据,只是为了显示您遇到的问题的核心以及您想要实现的目标。
  • 它需要我桌面上的数据

标签: matlab


【解决方案1】:

使脚本成为一个函数。然后在循环中执行该函数多少次。例如:

function res = my_function(k)
  % your script goes here.
  % the function is saved in my_function.m file
  % some calucations producing return_vector using k parmeter

  res = return_vector

稍后,只需对函数运行 for 循环并将结果存储到元胞数组中:

for k = 1:10 
    A{k} = my_function(k) 
end

【讨论】:

    【解决方案2】:

    使脚本成为一个函数。然后在循环中执行该函数多少次。例如:

    function res = my_function(k)
      % your script goes here.
      % the function is saved in my_function.m file
      % some calucations producing return_vector using k parmeter
    
      res = return_vector
    

    稍后,只需在函数上运行一个 for 循环。

    for k = 1:10 
        assignin('base', ['A_', num2str(k)], my_function(k)) 
    end
    

    【讨论】:

    • 嘿马辛。当我在函数上运行 for 循环时,我使用你的
    • @jessica 如果你想要不同的向量,你可以从 my_function 返回它们,或者参数化它,以便它根据循环索引保存向量。
    • for k = 1:10 assignin('base', ['A_', num2str(k)], my_function(k)) end
    • 我强烈建议不要教人们这样做。它可能适用于直接的问题,但later addressing 这些动态命名的变量很快becomes a nightmarejust gets worse。这些不是孤立的例子。如果您动态分配变量,那么您最终将不得不动态处理它们,这往往会导致功能不佳,难以维护代码。
    • @excaza 如果你检查了我早期的 cmets,你会看到我建议不要污染全局命名空间,并使用 map 或其他东西。但是,尽管如此,我的回答者对 OP 问题是正确的,而且 SO 是关于解决问题,而不是告诉人们他们的问题很糟糕,而不是为他们的直接问题提供正确的回答者。 OP 问题没有其他解决方案,除非您假设您更了解 OP 的真实情况。
    猜你喜欢
    • 2017-01-07
    • 2016-03-26
    • 2013-12-12
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多