由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 包子求助matlab编程问题
相关主题
[bssd]汇报一下Julia进展两个我永远都不想碰的语言
问个matlab的表达式有什么比较适合engineer用的语言吗?
一个C语言的问题讨论程序语言没什么意思,functional programming还是不错的
大家看看怎么把这几行matlab 代码译成cWhat's wrong with this?
困扰多时的MATLAB crash问题Perl里面$,@,#等字符问题
matlab 批处理文件执行顺序问题简单的perl问题
如果不用很高级的feature,C++/Scala是否值得一战?请看看这个Perl random sampling code 有什么问题,
Be $#%!ing explicithow to initialize associate data in STL map
相关话题的讨论汇总
话题: num2str话题: eval话题: zeros话题: currency话题: return
进入Programming版参与讨论
1 (共1页)
f*****c
发帖数: 3257
1
一直不熟悉matlab语言,特别是循环问题,最近终于碰到大麻烦了,10个包子求助!
我用如下的代码,对38个国家的货币回报分别跟10个跨国公司的季度回报做资产组合,
但是写完这个代码,matlab居然停不下来了,请问各位大神,这是怎么回事?
----------------------------------
for y=1:38
%currency equity return
eval(['su',num2str(y),'=r',num2str(y),'-cost']); % net currency return
eval(['rr',num2str(y),'=zeros(q,s)']); % construct the whole currency return
matrix for (s+1) leverage
for i=1:s
for j=1:q
eval(['rr',num2str(y),'(j,i)=(su',num2str(y),'(j)-(fai(j,i)*leverage
(i)))/(1-leverage(i))']);
end
end
eval(['r_h',num2str(y),'=mean(rr',num2str(y),')']); % currency mean return,
1*s
eval(['var_h',num2str(y),'=var(rr',num2str(y),')']); % currency return Std.
Dev. 1*s
stock=[stock1,stock2,stock3,stock4,stock5,stock6,stock7,stock8,stock9,
stock10];
t=size(stock,2); % t=10;total number of stocks
covs=a.*cov(stock); % covariance between stock return, or H
r=mean(stock,1)'; % stock mean return, or f
eval(['x',num2str(y),'=zeros(t,s)']); % stock optimal shares
eval(['covsh',num2str(y),'=zeros(t,s)']); % 10*100 matrix, covariance
between currency and stocks
eval(['total',num2str(y),'=[stock,rr',num2str(y),']']);% all stocks and
currency are puttogether
eval(['covtotal',num2str(y),'=a.*cov(total',num2str(y),')']); % get the
covariance between all assets
for i=1:s
eval(['covsh',num2str(y),'(:,i)=covtotal',num2str(y),'(1:t,t+i)']); %
end
A=-eye(t);
b=zeros(t,1);
Aeq=ones(1,t);
beq=ones(s,1)-s_h; %here is a matrix while in each quandprog is a scalar
eval(['favl',num2str(y),'=zeros(s,1)']);
eval(['U',num2str(y),'=zeros(s,1)']);
eval(['f',num2str(y),'=zeros(t,s)']);
for i=1:s
eval(['f',num2str(y),'(:,i)=(a*s_h(i)).*covsh',num2str(y),'(:,i)-r']);
end
for i=1:s
eval(['[x',num2str(y),'(:,i),favl',num2str(y),'(i)]=quadprog(covs,f',
num2str(y),'(:,i),A,b,Aeq,beq(i),zeros(t,1))']);
eval(['U',num2str(y),'(i)=-(favl',num2str(y),'(i)+.5*a*s_h(i)^2*var_h(i)
-s_h(i)*r_h(i))']);
end
tr=zeros(t+1,s); % total mean returns for 11 assets
for i=1:s
tr(1:t,i)=r;
tr(t+1,i)=r_h(i);
end
eval(['sr',num2str(y),'=[x',num2str(y),';s_h]']); % shares for 11 asset
eval(['ret',num2str(y),'=zeros(s,1)']);
eval(['risk',num2str(y),'=zeros(s,1)']);
for i=1:s
eval(['ret',num2str(y),'(i)=sr',num2str(y),'(:,i)'*tr(:,i)']); %
portfolio return
eval(['risk',num2str(y),'(i)=sr',num2str(y),'(:,i)'*[covs,covsh',num2str
(y),...
'(:,i);covsh',num2str(y),'(:,i)',var_h(i)]*sr',num2str(y),'(:,i)']);
end
% leverage, currency share, stock share; covariance;return;risk,utility
eval(['[max_val',num2str(y),',m',num2str(y),'] = max(max(U',num2str(y),...
',[],2))']);
end
--------------------------------------
总是转个不停,就是停不下来,怎么回事?
X****r
发帖数: 3557
2
s和q分别是多大?
你这个程序,老实说,惨不忍睹啊。

return

【在 f*****c 的大作中提到】
: 一直不熟悉matlab语言,特别是循环问题,最近终于碰到大麻烦了,10个包子求助!
: 我用如下的代码,对38个国家的货币回报分别跟10个跨国公司的季度回报做资产组合,
: 但是写完这个代码,matlab居然停不下来了,请问各位大神,这是怎么回事?
: ----------------------------------
: for y=1:38
: %currency equity return
: eval(['su',num2str(y),'=r',num2str(y),'-cost']); % net currency return
: eval(['rr',num2str(y),'=zeros(q,s)']); % construct the whole currency return
: matrix for (s+1) leverage
: for i=1:s

t****t
发帖数: 6806
3
我从来没见过matlab需要写这么多eval的, 比如说你明明可以写
a(i)=b(i), 为什么一定要写
eval(['a(' num2str(i) ')=b(' num2str(i) ')'])呢? 你是故意把程序写复杂以保住
职位吗?

return

【在 f*****c 的大作中提到】
: 一直不熟悉matlab语言,特别是循环问题,最近终于碰到大麻烦了,10个包子求助!
: 我用如下的代码,对38个国家的货币回报分别跟10个跨国公司的季度回报做资产组合,
: 但是写完这个代码,matlab居然停不下来了,请问各位大神,这是怎么回事?
: ----------------------------------
: for y=1:38
: %currency equity return
: eval(['su',num2str(y),'=r',num2str(y),'-cost']); % net currency return
: eval(['rr',num2str(y),'=zeros(q,s)']); % construct the whole currency return
: matrix for (s+1) leverage
: for i=1:s

f*****c
发帖数: 3257
4

s&q=100

【在 X****r 的大作中提到】
: s和q分别是多大?
: 你这个程序,老实说,惨不忍睹啊。
:
: return

f*****c
发帖数: 3257
5

是小弟无能,每次都要对38个国家做同样的操作~~下面是其中一个国家r1表示第一个
国家的货币回报。
s=100;% 100 types of currency
currency=zeros(s,1); %100*1
q=size(r1,1); % 100 quarters
a=6;%risk aversion
a=5;% this is value of V/NW
for i=1:s %1:100
currency(i)=0.8+0.002*(i-1);
end
%s_h=[1;zeros(s-1,1)];
s_h=zeros(s,1);% share of currency
for i=1:s
s_h(i)=a*(1-currency(i));% now assume NW/V=20%
end
cost=0.014.*ones(s,1);%assume annual rate of cost+tax=1.4%*4=5.6%;
%currency equity return
su=r1-cost; % net currency return
rr1=zeros(q,s); % construct the whole currency return matrix for (s+1)
currency
%fai=0.01;
fai=zeros(q,s);
for i=1:q
for j=1:s
fai(i,j)=arm(i)+0.00005*(j-1);
end
end
for i=1:s
for j=1:q
rr1(j,i)=(su(j)-(fai(j,i)*currency(i)))/(1-currency(i));
end
end
r_h=mean(rr1); % currency mean return, 1*s
var_h=var(rr1); % currency return Std. Dev. 1*s
t=size(stock,2); % t=10;total number of stocks (stock is a 100*10 matrix:
100 periods and 10 types)
covs=a.*cov(stock); % covariance between stock return, or H
r=mean(stock,1)'; % stock mean return, or f
x=zeros(t,s); % stock optimal shares
covsh=zeros(t,s); % 10*100 matrix, covariance between currency and stocks
total=[stock,rr1];% all stocks and currency are puttogether
covtotal=a.*cov(total); % get the covariance between all assets
for i=1:s
covsh(:,i)=covtotal(1:t,t+i); %
end
A=-eye(t);
b=zeros(t,1);
Aeq=ones(1,t);
beq=ones(s,1)-s_h; %here is a matrix while in each quandprog is a scalar
favl=zeros(s,1);
U=zeros(s,1);
f=zeros(t,s);
for i=1:s
f(:,i)=(a*s_h(i)).*covsh(:,i)-r;
end
for i=1:s
[x(:,i),favl(i)]=quadprog(covs,f(:,i),A,b,Aeq,beq(i),zeros(t,1));
U(i)=-(favl(i)+.5*a*s_h(i)^2*var_h(i)-s_h(i)*r_h(i));
end
tr=zeros(t+1,s); % total mean returns for 11 assets
for i=1:s
tr(1:t,i)=r;
tr(t+1,i)=r_h(i);
end
sr=[x;s_h']; % shares for 11 asset
ret=zeros(s,1);
risk=zeros(s,1);
for i=1:s
ret(i)=sr(:,i)'*tr(:,i); % portfolio return
risk(i)=sr(:,i)'*[covs,covsh(:,i);covsh(:,i)',var_h(i)]*sr(:,i);
end
% currency, currency share, stock share; covariance;return;risk,utility
[max_val,m] = max(max(U,[],2));

【在 t****t 的大作中提到】
: 我从来没见过matlab需要写这么多eval的, 比如说你明明可以写
: a(i)=b(i), 为什么一定要写
: eval(['a(' num2str(i) ')=b(' num2str(i) ')'])呢? 你是故意把程序写复杂以保住
: 职位吗?
:
: return

s*w
发帖数: 729
6
没仔细看你的 code, 提醒一下:
1. 不要用 eval 来实现 dynamic variable 之类的,直接用 cell 保存
2. matlab debug 不要太容易,自己 step 一下,就明白哪里出错了

【在 f*****c 的大作中提到】
:
: 是小弟无能,每次都要对38个国家做同样的操作~~下面是其中一个国家r1表示第一个
: 国家的货币回报。
: s=100;% 100 types of currency
: currency=zeros(s,1); %100*1
: q=size(r1,1); % 100 quarters
: a=6;%risk aversion
: a=5;% this is value of V/NW
: for i=1:s %1:100
: currency(i)=0.8+0.002*(i-1);

f*****c
发帖数: 3257
7

大湿,问个问题:
我在stata可以如下操作
forvalue i=1/38{
generate bithc`i'="bithch`i'"
}
请问在matlab的话,该怎么写呢

【在 s*w 的大作中提到】
: 没仔细看你的 code, 提醒一下:
: 1. 不要用 eval 来实现 dynamic variable 之类的,直接用 cell 保存
: 2. matlab debug 不要太容易,自己 step 一下,就明白哪里出错了

b***i
发帖数: 3043
8
举个例子:
iseq=1:100;
currency = 0.8+0.002*iseq;
不需要循环。

【在 f*****c 的大作中提到】
:
: 大湿,问个问题:
: 我在stata可以如下操作
: forvalue i=1/38{
: generate bithc`i'="bithch`i'"
: }
: 请问在matlab的话,该怎么写呢

S*********g
发帖数: 5298
9
你还是重写吧。
把stock1,...,stock38存成一个矩阵
r1,r2,...,r38合并成一个矩阵
然后用矩阵操作
就你这么点数据量,应该是瞬间完成的

return

【在 f*****c 的大作中提到】
: 一直不熟悉matlab语言,特别是循环问题,最近终于碰到大麻烦了,10个包子求助!
: 我用如下的代码,对38个国家的货币回报分别跟10个跨国公司的季度回报做资产组合,
: 但是写完这个代码,matlab居然停不下来了,请问各位大神,这是怎么回事?
: ----------------------------------
: for y=1:38
: %currency equity return
: eval(['su',num2str(y),'=r',num2str(y),'-cost']); % net currency return
: eval(['rr',num2str(y),'=zeros(q,s)']); % construct the whole currency return
: matrix for (s+1) leverage
: for i=1:s

S*********g
发帖数: 5298
10

return
leverage
这个j循环可以改成
rr(y,:,:)=repmat(su(y,:),1,s)-fai.*repmat(leverage./(1-leverage,q,1);
i循环也可以同样变成矩阵操作,
最后,这两层循环,一行就可以解决了
return,
.
i)
num2str
);

【在 f*****c 的大作中提到】
: 一直不熟悉matlab语言,特别是循环问题,最近终于碰到大麻烦了,10个包子求助!
: 我用如下的代码,对38个国家的货币回报分别跟10个跨国公司的季度回报做资产组合,
: 但是写完这个代码,matlab居然停不下来了,请问各位大神,这是怎么回事?
: ----------------------------------
: for y=1:38
: %currency equity return
: eval(['su',num2str(y),'=r',num2str(y),'-cost']); % net currency return
: eval(['rr',num2str(y),'=zeros(q,s)']); % construct the whole currency return
: matrix for (s+1) leverage
: for i=1:s

相关主题
matlab 批处理文件执行顺序问题两个我永远都不想碰的语言
如果不用很高级的feature,C++/Scala是否值得一战?有什么比较适合engineer用的语言吗?
Be $#%!ing explicit讨论程序语言没什么意思,functional programming还是不错的
进入Programming版参与讨论
C**R
发帖数: 1047
11
居然用inline function,疯了。

return

【在 f*****c 的大作中提到】
: 一直不熟悉matlab语言,特别是循环问题,最近终于碰到大麻烦了,10个包子求助!
: 我用如下的代码,对38个国家的货币回报分别跟10个跨国公司的季度回报做资产组合,
: 但是写完这个代码,matlab居然停不下来了,请问各位大神,这是怎么回事?
: ----------------------------------
: for y=1:38
: %currency equity return
: eval(['su',num2str(y),'=r',num2str(y),'-cost']); % net currency return
: eval(['rr',num2str(y),'=zeros(q,s)']); % construct the whole currency return
: matrix for (s+1) leverage
: for i=1:s

C**********r
发帖数: 8189
12
我可以说这个帖子很欢乐吗?lz原来是写什么语言的,Matlab用的像外国人讲中国话那
样别扭呢。
k**********g
发帖数: 989
13

繁体的MATLAB看了觉得很好

【在 C**********r 的大作中提到】
: 我可以说这个帖子很欢乐吗?lz原来是写什么语言的,Matlab用的像外国人讲中国话那
: 样别扭呢。

a****0
发帖数: 51
14

Javascript?

【在 C**********r 的大作中提到】
: 我可以说这个帖子很欢乐吗?lz原来是写什么语言的,Matlab用的像外国人讲中国话那
: 样别扭呢。

m****s
发帖数: 1481
15
程序看不懂,我用matlab快10年了,从来没用过eval,能用矩阵和向量的就不用循环,
用for loop在matlab那是相当的慢的。
给个tip,如果非要用for loop然后发现停不下来,在for 后面插一行for的变量名,至
少可以看看是循环造成的慢还是循环里面的运算慢
T*****u
发帖数: 7103
16
楼主去上个半天一天的培训吧,至少格式会清楚些。

【在 m****s 的大作中提到】
: 程序看不懂,我用matlab快10年了,从来没用过eval,能用矩阵和向量的就不用循环,
: 用for loop在matlab那是相当的慢的。
: 给个tip,如果非要用for loop然后发现停不下来,在for 后面插一行for的变量名,至
: 少可以看看是循环造成的慢还是循环里面的运算慢

C*********g
发帖数: 3728
17
for loop现在Matlab内部实现矢量化了,所以速度不再慢。但是当然写成矢量化看着干
净。

【在 m****s 的大作中提到】
: 程序看不懂,我用matlab快10年了,从来没用过eval,能用矩阵和向量的就不用循环,
: 用for loop在matlab那是相当的慢的。
: 给个tip,如果非要用for loop然后发现停不下来,在for 后面插一行for的变量名,至
: 少可以看看是循环造成的慢还是循环里面的运算慢

s*w
发帖数: 729
18
非大师,不过 matlab 断断续续用过10多年
matlab 里面不用动态生成变量,你想生成 r1,r2...r38 的话,应该直接用
r = cell(1,38)
然后 r{i} 里面放你的 ri
如果你的 r1,..r38 size 一样的话,连 cell 都不用,直接用 matrix
r = zeros(38,1) 如果 ri 是 scalar
r = zeros(38,3,3) 如果 ri 是 3*3 matrix
个人偏见,matlab 是最好学好写的语言; 可惜没啥大用,学得再好也找不到工作,所以
有机会的话,还是练练别的语言,找工也容易些

【在 f*****c 的大作中提到】
:
: 大湿,问个问题:
: 我在stata可以如下操作
: forvalue i=1/38{
: generate bithc`i'="bithch`i'"
: }
: 请问在matlab的话,该怎么写呢

t****t
发帖数: 6806
19
matlab一向是作为一个好用的工具, 而不是作为一门语言出现的. 就好象以前计算器是
一个好用的工具, 工程师基本上都需要. 但是计算器玩得再好也很难靠计算器找到工作
. 从另一个角度讲, 想要靠计算器找到工作的企图本身就是不对的.
最后, 楼主显然也不是想靠matlab来找工作, 所以我们说的都是废话.

所以

【在 s*w 的大作中提到】
: 非大师,不过 matlab 断断续续用过10多年
: matlab 里面不用动态生成变量,你想生成 r1,r2...r38 的话,应该直接用
: r = cell(1,38)
: 然后 r{i} 里面放你的 ri
: 如果你的 r1,..r38 size 一样的话,连 cell 都不用,直接用 matrix
: r = zeros(38,1) 如果 ri 是 scalar
: r = zeros(38,3,3) 如果 ri 是 3*3 matrix
: 个人偏见,matlab 是最好学好写的语言; 可惜没啥大用,学得再好也找不到工作,所以
: 有机会的话,还是练练别的语言,找工也容易些

t****t
发帖数: 6806
20
这是什么时候的事情?

【在 C*********g 的大作中提到】
: for loop现在Matlab内部实现矢量化了,所以速度不再慢。但是当然写成矢量化看着干
: 净。

相关主题
What's wrong with this?请看看这个Perl random sampling code 有什么问题,
Perl里面$,@,#等字符问题how to initialize associate data in STL map
简单的perl问题a vba question. please help
进入Programming版参与讨论
C*********g
发帖数: 3728
21
matlab2010 or 2009 version I believe

【在 t****t 的大作中提到】
: 这是什么时候的事情?
t****t
发帖数: 6806
22
我狗了一圈new feature, 从2009到2012, 没发现你说的功能. 给个reference? 这种革
命性的提高必定要大大吹嘘的, 虽然我认为不太可能.

【在 C*********g 的大作中提到】
: matlab2010 or 2009 version I believe
S*********g
发帖数: 5298
23
这个是真的
for loop已经差不多了

【在 t****t 的大作中提到】
: 我狗了一圈new feature, 从2009到2012, 没发现你说的功能. 给个reference? 这种革
: 命性的提高必定要大大吹嘘的, 虽然我认为不太可能.

S*********g
发帖数: 5298
24
it was in Matlab 6.5
As long as you don't call other m file function, for loop is at least as
fast as vectorized version

【在 S*********g 的大作中提到】
: 这个是真的
: for loop已经差不多了

f*****c
发帖数: 3257
25

多谢建议。
后来索性全部写完了。
我之所以没用cell,是因为r1,。。。r38,每个都是100×100的矩阵。

【在 s*w 的大作中提到】
: 没仔细看你的 code, 提醒一下:
: 1. 不要用 eval 来实现 dynamic variable 之类的,直接用 cell 保存
: 2. matlab debug 不要太容易,自己 step 一下,就明白哪里出错了

f*****c
发帖数: 3257
26

r1,r2,...,r38合并成一个矩阵,最后就是100×3800的矩阵,所以我昨天直接一个个的
写完了~~~
唉,各位砖家的讨论,让小弟惭愧

【在 S*********g 的大作中提到】
: 你还是重写吧。
: 把stock1,...,stock38存成一个矩阵
: r1,r2,...,r38合并成一个矩阵
: 然后用矩阵操作
: 就你这么点数据量,应该是瞬间完成的
:
: return

f*****c
发帖数: 3257
27

~~~作为一个matlab新手,写成这样了,要多鼓励好不好

【在 C**********r 的大作中提到】
: 我可以说这个帖子很欢乐吗?lz原来是写什么语言的,Matlab用的像外国人讲中国话那
: 样别扭呢。

f*****c
发帖数: 3257
28

多谢建议!

【在 m****s 的大作中提到】
: 程序看不懂,我用matlab快10年了,从来没用过eval,能用矩阵和向量的就不用循环,
: 用for loop在matlab那是相当的慢的。
: 给个tip,如果非要用for loop然后发现停不下来,在for 后面插一行for的变量名,至
: 少可以看看是循环造成的慢还是循环里面的运算慢

S*********g
发帖数: 5298
29
才100x3800
我做intraday model的矩阵都是78000000 by 30

【在 f*****c 的大作中提到】
:
: 多谢建议!

f*****c
发帖数: 3257
30

~~~~哈哈,好好,立马给包子~~
不到葵花来,不知自己有多弱~

【在 S*********g 的大作中提到】
: 才100x3800
: 我做intraday model的矩阵都是78000000 by 30

相关主题
a question of perl问个matlab的表达式
perl question: can I have a key of hash to be一个C语言的问题
[bssd]汇报一下Julia进展大家看看怎么把这几行matlab 代码译成c
进入Programming版参与讨论
S*********g
发帖数: 5298
31
他那是老古董了
要想快要避免两点:
1 字符串操作,死慢
2 动态添加数据
内存能提前分配就提前分配

【在 f*****c 的大作中提到】
:
: ~~~~哈哈,好好,立马给包子~~
: 不到葵花来,不知自己有多弱~

t****t
发帖数: 6806
32
"as long as you don't call other m file function"?
这个很难说有没有什么大用啊.

【在 S*********g 的大作中提到】
: it was in Matlab 6.5
: As long as you don't call other m file function, for loop is at least as
: fast as vectorized version

T*U
发帖数: 22634
33
matlab 就是个能编程的计算器,这个惨不忍睹啊,跟shell script差不多了。
l*****n
发帖数: 1068
34
能解决问题就行了,工具就是工具
1 (共1页)
进入Programming版参与讨论
相关主题
how to initialize associate data in STL map困扰多时的MATLAB crash问题
a vba question. please helpmatlab 批处理文件执行顺序问题
a question of perl如果不用很高级的feature,C++/Scala是否值得一战?
perl question: can I have a key of hash to beBe $#%!ing explicit
[bssd]汇报一下Julia进展两个我永远都不想碰的语言
问个matlab的表达式有什么比较适合engineer用的语言吗?
一个C语言的问题讨论程序语言没什么意思,functional programming还是不错的
大家看看怎么把这几行matlab 代码译成cWhat's wrong with this?
相关话题的讨论汇总
话题: num2str话题: eval话题: zeros话题: currency话题: return