急:请问有没有2次规划或可行方向法的现成的源代码? 给100分

chiyuwang 2003-12-02 04:54:55
现在我要计算一个多元2次方程的最小值,并在所有变量大于等于0的条件下计算
求助高手,帮个忙啊。关系到我的工资阿。谢谢了
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
saint001 2003-12-03
  • 打赏
  • 举报
回复
正定矩阵的充分必要条件是每个顺序主子式大于0
即对于每个k,矩阵{aij}(i=1,2,...,k;j=1,2,...,k}的行列式大于0
类似,如果它们都是非负,则称为非负定矩阵,还有负定矩阵等
与正定矩阵对应,二次型也有正定的概念,二次型f(x1,x2,...,xn)是正定的,是说对于任意的非零向量组x1,x2,...,xn,函数值f均大于0;二次型正定,充分必要条件是A正定

如果矩阵(二次型)正定,就可以用最速下降、共轭梯度法等迭代算法,这和求解对称正定方程组的迭代法是一致的


这是我前些天写的求解线性方程组的函数,可以用来求极小值点x(x0,x1,x2,...,xn-1),最优值等于-b'x+c

#define ABS(x) (x)>0?(x):-(x)
#define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;}

void solve(double **a,double *b,double *x,int n)
//系数矩阵a(n*n),右端项b(n),输出解x(n),维数n
{
int i,j,k,ik;
double mik,temp;
for(k=0;k<n;k++)
{
mik=-1;
for(i=k;i<n;i++)
if(ABS(a[i][k])>mik)
{
mik=ABS(a[i][k]);
ik=i;
}
for(j=k;j<n;j++)
SWAP(a[ik][j],a[k][j]);
SWAP(b[k],b[ik]);
b[k]/=a[k][k];
for(i=n-1;i>=k;i--)
a[k][i]/=a[k][k];
for(i=k+1;i<n;i++)
{
b[i]-=a[i][k]*b[k];
for(j=n-1;j>=k;j--)
a[i][j]-=a[i][k]*a[k][j];
}
}
for(i=n-1;i>=0;i--)
{
x[i]=b[i];
for(j=i+1;j<n;j++)
x[i]-=a[i][j]*x[j];
}
}
eastsun 2003-12-03
  • 打赏
  • 举报
回复


你想做的是关于SVM系数求解问题啊。

参考书上有答案的啊。


saint001 2003-12-02
  • 打赏
  • 举报
回复
二次多元函数的一般形式是
f(x)=x'Ax-2b'x+c
其中x是自变量组n*1,b(n*1),c(1*1)
A(n*n)是对称矩阵

如果对x不加限制,f(x)有最小值的充分必要条件是A是非负定矩阵(若唯一则为正定矩阵),最小值点就是极值点,且极值点x满足线 性方程组Ax=b,因此求解最小值可以按照求解线性方程组的方法来进行。事实上,这两个方面本来就是相通的。
但如果加上限制,就麻烦多了

f(x,y)=(1-x-y)^2的矩阵A=[1 1;1 1]是非负定矩阵,但不是正定矩阵,极值点不唯一

程序的输入应该是系数吧,一般情况是A,b,c
问题是你的二次函数到底是什么样的性质,正定与否
是不是直接求出极值点就行了,极值点如果不大于0,那还有很多问题
chiyuwang 2003-12-02
  • 打赏
  • 举报
回复
我是求类似f(x,y)=(1-x-y)^2的方程,所以有极值的
saint001 2003-12-02
  • 打赏
  • 举报
回复
是多元函数吧
应该有限制的,并不是所有的多元2次函数在所有变量大于0的条件下有最小值
比如
f(x,y)=-x-y

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧