有关MATLAB的quadprog的优化问题~

2024-05-04 11:46

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

有关MATLAB的quadprog的优化问题~

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

求助matlab软件 组合问题

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的频率,然后对应频率选择对应下标即可

matlab 音乐合成出错,求大神!!!

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的情况下。

matlab中全排列的问题

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
最新文章
热门文章
推荐阅读