📄 固定增量算发.cpp
字号:
#include<iostream.h>
#include<math.h>
#include<stdio.h>
void main()
{
int a=0,m=0,n=0,s=0,i,j,k,f,num;
int A[10],B[10];
int x[10][10][10];
int y[10][10][10];
int flag=1;
//设定m n a的值
cout<<endl<<"输入区域数a:"; //代表区域数
cin>>a;
cout<<"输入每个区域中的模式样本个数m:"; //m代表区域中的模式样本个数
cin>>m;
cout<<endl<<"输入维数n:"; //n代表维数
cin>>n;
//输入各区域的模式样本
cout<<endl<<"输入第1个区域的模式样品:"<<endl;
for(i=0;i<a;i++)
{
for(j=0;j<m;j++)
{
cout<<"输入第";
cout<<j+1<<"个模式样品类:"<<endl;
for(k=0;k<n;k++)
{
cin>>x[i][j][k];
}
}
if(i+2<=a)
{
cout<<"输入第";
cout<<i+2<<"个区域的模式样品:"<<endl;
}
}
//将模式向量转变成增广模式向量
for(i=0;i<a;i++)
for(j=0;j<m;j++)
{
for(k=n;k>=1;k--)
{
y[i][j][k]=x[i][j][k-1];
}
y[i][j][0]=1;
}
cout<<"增广模式向量:"<<endl;
for(i=0;i<a;i++)
for(j=0;j<m;j++)
{
for(k=0;k<=n;k++)
{
cout<<y[i][j][k]<<" ";
}
cout<<endl;
}
//进行迭代
cout<<"输入初始权向量(";
cout<<n+1<<"维):";
for(i=0;i<=n;i++)
{
cin>>A[i];
}
for(i=0;i<=n;i++)
{
B[i]=A[i];
}
while(flag==1)
{
flag=0;
for(i=0;i<a;i++)
{
for(j=0;j<m;j++)
{ num=0;
for(k=0;k<=n;k++)
{
num=num+y[i][j][k]*A[k];
}
if(i==0)
{
if(num<=0)
{
for(k=0;k<=n;k++)
{
A[k]=A[k]+y[i][j][k];
}
flag=1;
}
}
//else
if(i==1)
{
if(num>=0)
{
for(k=0;k<=n;k++)
{
A[k]=A[k]-y[i][j][k];
}
flag=1;
}
}
}
}
f=0;
for(i=0;i<=n;i++)
if(B[i]==A[i])
{
f++;
}
if(f==n+1)
flag=0;
for(i=0;i<=n;i++)
{
B[i]=A[i];
}
s++;
cout<<"第";
cout<<s<<"次迭代的结果:"<<endl;
for(k=0;k<=n;k++)
cout<<A[k]<<" ";
cout<<endl;
}
//输出结果权向量
cout<<"结果权向量是:"<<endl;
for(k=0;k<=n;k++)
cout<<A[k]<<" ";
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -