Matlab中,如果我要引用的变量名里面含有变量,该如何引用?

批量生成是这样的
for i=1:T
syms (['L',num2str(i)]);
end
但是直接用L1就用不了啦,系统不认识。
我前面的话可能有误导性。L1是没有初始值的。前面已经生成了从L1到LT的一系列变量。虽然我为了生成函数的方便,给T的初始赋值为100,但它其实是一个参数。(我不知道怎样才能生成一个T维的向量,T是一个参数而不是确定数值?)

T在求解最优化的过程中不变(是给定的),L1到LT是变的。我做的程序是最优化,最小化函数F(x)=K*(L1^T)*(L2^(T-1))*...*LT+M*((1-L1)^T)*((1-L2)^(T-1))*...*(1-LT)
这里面K,M,T都是参数,L1到LT是我要求解的自变量。

第1个回答  2011-07-27
用sprintf函数,比如
a = 2
title(sprintf("Diagramm for a = %d", a))
另外,站长团上有产品团购,便宜有保证追问

能否详细说明

第2个回答  2011-07-27
其实我不是很明白楼主为什么要把问题复杂化。楼主完全可以把需要的变量存入一个100维的向量L中,for循环中的语句就变为 L(i)=L(i)+i;追问

不好意思,我前面的话可能有误导性。虽然我给T的初始赋值为100,但它其实是一个参数,应该是没有数值的。或者请你教我一下,怎样才能生成一个T维的向量,T是一个参数而不是确定数值?

我做的程序是最优化,最小化函数F(x)=K*(L1^T)*(L2^(T-1))*...*LT+M*((1-L1)^T)*((1-L2)^(T-1))*...*(1-LT)
这里面K,M,T都是参数,L1到LT是我要求解的自变量。

追答

向量可以不用先生成。MATLAB不用先声明数组大小,可以每一步都新开辟内存空间。比如
for i=1:100
L(i)=XXX;
end
L不用事先声明。

追问

那我能不能这样做:for t=1:T
A=A*Lt^(T+1-t)
B=B*(1-Lt)^(T+1-t)
end
F=A+B
然后对F求约束最优化?
我之前对F求最优化的时候,没办法将F(x)=K*(L1^T)*(L2^(T-1))*...*LT+M*((1-L1)^T)*((1-L2)^(T-1))*...*(1-LT)这样带省略号的表达式输进去。所以我想用For循环将(L1^T)*(L2^(T-1))*...*LT之类的东西定义出来。

追答

大概明白你的意思了。我想了一个办法,代码如下
for t=1:100
eval(['syms ','L',int2str(t)]);
L(t)=eval(['L',int2str(t)]);
end
这样L存储了100个变量名,分别为L1,L2……L100。
不过你这个问题是高度非线性的啊,有没有解难说。

本回答被提问者采纳
第3个回答  2011-07-27
matlab里的维度本来就不一定是固定的, 你写写试试就知道了追问

我对F(x)求最优化的时候,没办法将F(x)=K*(L1^T)*(L2^(T-1))*...*LT+M*((1-L1)^T)*((1-L2)^(T-1))*...*(1-LT)这样带省略号的表达式输进去。所以我想用For循环将(L1^T)*(L2^(T-1))*...*LT之类的东西定义出来。翻了一整本matlab最优化书,没找到如何将维度不固定的函数塞到最优化里面去的办法,里面的函数都是给定维度的。可能我书不好。。。