1. 有关MATLAB的quadprog的优化问题~
>> A1=[-0.0172 -0.0240 -0.0164 0.0140 -0.0213 -0.0155 0.0281 -0.0430 0.0094 -0.0108];
f=[];A=-A1;Aeq=[1,1,1,1,1,1,1,1,1,1];Beq=[1];LB=zeros(10,1);
H=2*[0.0067 0.0081 0.0069 -0.0040 0.0054 0.0031 -0.0014 0.0071 0.0030 0.0027;
0.0081 0.0130 0.0077 -0.0017 0.0071 0.0042 -0.0002 0.0097 0.0051 0.0049;
0.0069 0.0077 0.0106 -0.0064 0.0076 0.0049 -0.0004 0.0088 0.0049 0.0013;
-0.0040 -0.0017 -0.0064 0.0120 -0.0048 -0.0033 0.0033 -0.0032 -0.0010 0.0003;
0.0054 0.0071 0.0076 -0.0048 0.0117 0.0056 0.0009 0.0073 0.0055 0.0032;
0.0031 0.0042 0.0049 -0.0033 0.0056 0.0049 -0.0012 0.0045 0.0038 0.0016;
-0.0014 -0.0002 -0.0004 0.0033 0.0009 -0.0012 0.0042 -0.0002 0.0005 0.0006;
0.0071 0.0097 0.0088 -0.0032 0.0073 0.0045 -0.0002 0.0089 0.0053 0.0029;
0.0030 0.0051 0.0049 -0.0010 0.0055 0.0038 0.0005 0.0053 0.0065 0.0007;
0.0027 0.0049 0.0013 0.0003 0.0032 0.0016 0.0006 0.0029 0.0007 0.0043 ];
b=[0.004]; p=-b;
options = optimset('LargeScale', 'off', 'Simplex', 'on');%%LargeScale,off后就是medium-scale algorithm
[x,f_opt]=quadprog(H,f,A,b,Aeq,Beq,LB,[],[],options)%%UB是无穷大,不必写,直接空即可
Optimization terminated.
x =
0.2055
-0.0000
-0.0000
0.1689
-0.0000
0.3103
0.3153
0.0000
-0.0000
0.0000
f_opt =
0.0012
2. matlab的全排列问题
哈哈,我用的是"递增进位制数法"(方法源自网上)
代码如下:
%%%%%%%%%%%%以下计算出新的排列%%%%%%%%%%%%%
%% Author by wacs5
%% 排列的总个数为n!
%% 在指定位置插入代码即可
%clc
%clear
n=3;
n_1=prod(1:n);
allorder_K=zeros(1,n-1);
tic
for allorder_m=1:n_1 %产生n!个排列
allorder_flag=zeros(1,n);
allorder_P=zeros(1,n);
for allorder_i=1:n-1
position=n-allorder_K(allorder_i);
allorder_j=n;
while(allorder_j>=position)
if (allorder_flag(allorder_j)==1)
position=position-1;
end
allorder_j=allorder_j-1;
end
allorder_P(position)=n+1-allorder_i;
allorder_flag(position)=1;
end
for allorder_i=1:n
if (allorder_flag(allorder_i)==0)
allorder_P(allorder_i)=1;
break;
end
end
%%%%以下更新K
for allorder_i=1:n-1
allorder_K(n-allorder_i)=mod(allorder_K(n-allorder_i)+1,allorder_i+1);
if (allorder_K(n-allorder_i)~=0)
break;
end
end
%%%下面,可以引用allorder_P进行相关处理
allorder_P
end
toc
3. 求助matlab软件 组合问题
out=false(2.^15-1,15);
num=0;
for k=1:15
c=combntns(1:15,k);
for i=1:size(c,1)
num=num+1;
out(num,c(i,:))=true;%
end
end
4. matlab 矩阵合并(急)
如果你说的是:
“A=[a1,a2],B=[b1,b2]
合并成C=[a1,a2,b1,b2]
其中a1,a2,b1,b2都为列向量”的话
那么只需在matlab中输入如下就好:
C=[A,B]
而如果你说的是:
“A=[a1,a2],B=[b1,b2]
合并成C=[a1,a2;b1,b2]
其中a1,a2,b1,b2都为列向量”的话
那么就要在matlab中输入如下才行:
C=[A;B]
5. matlab 音乐合成出错,求大神!!!
当i=2时,pu(i)=0,B是一个矩阵,下标最小从1开始,不存在B(0),因此B(pu(i))出错
我知道错哪了,现在又不知道怎么改。。pu=[5 0 -5 5 4 3 3 4 3 3 3 4 3 4 3 2 1 0 1 3 5 6 6 6 5 5 2 2 4 3 3]; 中,0对应的是简谱的 0,-5对应的是低八度的5 。。。。怎么破!!!????
把A(1)~A(12)改为简谱的-5~6的频率,然后对应频率选择对应下标即可
6. matlab 全排列问题
用笨办法直接编程的 不知道有没有现成的函数 你可以再查一下 数组b就是你要求的结果
a=[1 2 3 4];
e=1;
for i=1:4
for j=1:4
for l=1:4
b(e)=a(i)*100+a(j)*10+a(l);
e=e+1;
end
end
end
b
7. matlab中全排列的问题
perms
产生所有可能的排列
语法
P = perms(v)
P = perms(v),这里v是一个长度为n的行向量,此函数产生v中这n个元素的全排列矩阵,每行为一个排列。矩阵P包含有n!行和n列。
举例
命令perms(2:2:6) 返回数字2、4和6的所有排列:
6 4 2
6 2 4
4 6 2
4 2 6
2 4 6
2 6 4
局限
此函数值只能适用于n < 15的情况下。
8. 求助MATLAB中的矩阵排列
X=[0 7 17 15
15 8 13 9
17 12 6 10
6 13 5 4];
c=cell(1,24);
s=0;
A=zeros(4,4);
for i=1:4
for j=1:4
for k=1:4
for l=1:4
if i~=j&i~=k&i~=l&j~=k&j~=l&k~=l
s=s+1
A(1,i)=X(1,i);A(2,j)=X(2,j);A(3,k)=X(3,k);A(4,l)=X(4,l);
c{s}=A;
A=0;
end
end
end
end
end
for i=1:24
text=['c{',num2str(i),'}'];
disp(text)
c{i}
end