- •Анотация
- •2.Описание математической модели решения задачи
- •3.Блок-схема алгоритма
- •4.Описание программы
- •Описание алгоритма программы
- •Описание выполнения программы
- •Характеристика данных и их условные обозначения
- •Текст программы
- •Контрольный пример Метод наименьших квадратов
- •Анализ результатов
- •Заключение
- •Список литературы
- •Приложение
Характеристика данных и их условные обозначения
№ п/п
|
Наименование данных
|
Обозначение в блок-схеме
|
Обозначение в программе
|
Тип переменных
|
|
Размерность массива |
n |
n |
int |
|
Исходный массив значений нагрузок |
x,x1 |
x,x1 |
double |
|
Исходный массив значений напряжений |
y,y1 |
y,y1 |
double |
|
Вспомогательные переменные |
i,k |
i,k |
int |
|
Массив значения нагрузок ,при котором необходимо определить значение напряжения |
s |
s |
double |
|
Ожидаемое значение нагрузки |
otv,otv1 |
otv,otv1 |
double |
|
Переменная выбора действия |
j |
j |
int |
|
Чтение данных из файла |
f |
f |
ifstream |
|
Запись данных в файл |
f1 |
f1 |
ofstream |
|
Коэффициент наименьших квадратов |
a,a1 |
a,a1 |
double |
11. |
Коэффициент корреляции |
kof_kor |
kof_kor |
double |
12. |
Индекс корреляции |
Ind_kor |
Ind_kor |
double |
13. |
Суммарная квадратичная ошибка |
S,S1 |
S,S1 |
double |
Таблица 2
Текст программы
#include <iostream>
#include <fstream>
#include <math.h>
#include <conio.h>
#include <clocale>
using namespace std;
int MASS(double *x,double *y ,double **sum,int N, int K,double *a,double *b)
{ int i,j,k,m;double z,c;
for (i=0;i<K+1;i++)
for (j=0;j<K+1;j++)
{
sum[i][j]=0;
for (k=0;k<N;k++)
{sum[i][j]+=pow(x[k],i+j);}
}
for (i=0;i<K+1;i++)
{b[i]=0;
for (k=0;k<N;k++)
{b[i]+=pow(x[k],i)*y[k];}
}
for (i=0;i<K;i++)
{m=i;
for (j=i+1;j<K+1;j++)
{if (fabs(sum[m][i])<fabs(sum[j][i])) m=j;}
for (k=i;k<K+1;k++)
{z=sum[m][k];sum[m][k]=sum[i][k];sum[i][k]=z;}
z=b[m];b[m]=b[i];b[i]=z;
for (j=i+1;j<K+1;j++)
{
c=-sum[j][i]/sum[i][i];
for (k=i;k<K+1;k++)
{sum[j][k]=sum[j][k]+c*sum[i][k];}
b[j]=b[j]+c*b[i];}
}
a[K]=b[K]/sum[K][K];
for (i=K+1-2;i>= 0;i--)
{
for (k=i+1;k<K+1;k++)
{b[i]=b[i]-a[k]*sum[i][k];}
a[i]=b[i]/sum[i][i];
}
return 0;
}
double Kof_kor(double *x,double *y,int n)
{int i;
double sred_x,sred_y,kof_kor,sum_x=0,sum_y=0,*otkl_x,*otkl_y,sum_otkl_x,sum_otkl_y;
double *proizv_rz,stand_otklon_x,stand_otklon_y,*otkl_x2,*otkl_y2,sum_proizv_rz=0;
otkl_x=new double [n];otkl_y=new double [n];proizv_rz=new double [n];otkl_x2=new double [n];otkl_y2=new double [n];
for (i=0;i<n;i++)
{sum_x+=x[i];sum_y+=y[i];}
sred_x=sum_x/n;sred_y=sum_y/n;
for (i=0;i<n;i++)
{otkl_x[i]=sred_x-x[i];otkl_y[i]=sred_y-y[i];}
for (i=0;i<n;i++)
{otkl_x2[i]=pow(otkl_x[i],2);otkl_y2[i]=pow(otkl_y[i],2);}
for (i=sum_otkl_x=sum_otkl_y=0;i<n;i++)
{sum_otkl_x+=otkl_x2[i];sum_otkl_y+=otkl_y2[i];}
stand_otklon_x=pow(sum_otkl_x/n,1/2.);stand_otklon_y=pow(sum_otkl_y/n,1/2.);
for (i=0;i<n;i++)
{proizv_rz[i]=otkl_x[i]*otkl_y[i];}
for (i=0;i<n;i++)
{sum_proizv_rz+=proizv_rz[i];}
kof_kor=sum_proizv_rz/(stand_otklon_x*stand_otklon_y*n);
return kof_kor;
}
double Ind_kor(double *a,double *x,double *y,int n)
{int i;
double sred_y,*yY,*yM,Y,ym=0,yy=0,ind_kor;
yY=new double [n];yM=new double [n];
for (i=0;i<n;i++)
{sred_y+=y[i];}
sred_y=sred_y/n;
for (i=0;i<n;i++)
{
Y=a[0]+a[1]*x[i]+a[2]*pow(x[i],2)+a[3]*pow(x[i],3);
yY[i]=pow(y[i]-Y,2);yM[i]=pow(y[i]-sred_y,2);
}
for (i=0;i<n;i++)
{yy+=yY[i];ym+=yM[i];}
ind_kor=pow(fabs(1-(yy/ym)),1/2.);
return ind_kor;
}
int main ()
{
ifstream f;ofstream f1;
int n=6,k,N=4,i,j=1,n1=3;double **x_mass,*y,*x,*s,*a,*b,*y1,*x1,*a1,*otv,*otv1,kof_kor,ind_kor,*min_y,*min_y1,S=0,S1=0,OTVET;
double sred_y,*yY,*yM,Y,ym=0,yy=0;yY=new double [n];yM=new double [n];
x=new double [n];y=new double [n];a=new double [N];a1=new double [N];b=new double [N];min_y=new double [n];min_y1=new double [n];
x1=new double [n];y1=new double [n];
s=new double [n1];otv=new double [n1];otv1=new double [n1];
x_mass=new double *[N];
for(i=0;i<N;i++)
x_mass[i]=new double [N];
setlocale(LC_CTYPE, "");
cout<<"Выберитеспособвводаданных"<<endl;
cout<<"1)Для считывания с файла нажмите 1"<<endl;
cout<<"2)Для ввода с клавиатуры 2 ";cin>>j;
if (j==1)
{
f.open("C:\\Users\\user\\Desktop\\aium225m4.txt");
cout<<"Значение напряжения "<<endl;
for (i=0;i<n1;i++)
{f>>s[i];cout<<s[i]<<"\t";}
cout<<endl;f>>n;
cout<<"Размерность--"<<n<<endl;
cout<<"Для коэффициентов нагрузки Beta=1"<<endl;
cout<<"Массив напряжения"<<endl;
for (i=0;i<n;i++)
{f>>x[i];cout<<x[i]<<"\t";}
cout<<endl;
cout<<"Массивтокаротора"<<endl;
for (i=0;i<n;i++)
{f>>y[i];cout<<y[i]<<"\t";}
cout<<endl;
cout<<"Длякоэффициентовнагрузки Beta=1.3"<<endl;
cout<<"Массив напряжения"<<endl;
for (i=0;i<n;i++)
{f>>x1[i];cout<<x1[i]<<"\t";}
cout<<endl;
cout<<"Массивтокротора"<<endl;
for (i=0;i<n;i++)
{f>>y1[i];cout<<y1[i]<<"\t";}
cout<<endl;
f.close();
}
else
{
cout<<" Значение напряжения "<<endl;
for (i=0;i<n1;i++)
{cin>>s[i];}
cout<<endl;
cout<<" Введите размерность: ";cin>>n;
cout<<"Для коэффициентов нагрузки Beta=1"<<endl;
cout<<"Массив напряжения"<<endl;
for (i=0;i<n;i++)
{cin>>x[i];}
cout<<endl;
cout<<"Массив тока ротора"<<endl;
for (i=0;i<n;i++)
{cin>>y[i];}
cout<<endl;
cout<<"Длякоэффициентовнагрузки Beta=1.3"<<endl;
cout<<"Массив напряжения"<<endl;
for (i=0;i<n;i++)
{cin>>x1[i];}
cout<<endl;
cout<<"Массив тока ротора"<<endl;
for (i=0;i<n;i++)
{cin>>y1[i];}
cout<<endl;
}
MASS(x,y,x_mass,n,n1,a,b);
MASS(x1,y1,x_mass,n,n1,a1,b);
for (i=0;i<n1;i++)
{otv[i]=a[0]+a[1]*s[i]+a[2]*pow(s[i],2)+a[3]*pow(s[i],3);}
for (i=0;i<n1;i++)
{otv1[i]=a1[0]+a1[1]*s[i]+a1[2]*pow(s[i],2)+a1[3]*pow(s[i],3);}
f1.open("C:\\Users\\user\\Desktop\\rezult.txt");
for (i=0;i<n;i++)
{min_y[i]=a[0]+a[1]*x[i]+a[2]*pow(x[i],2)+a[3]*pow(x[i],3);
min_y1[i]=a1[0]+a1[1]*x1[i]+a1[2]*pow(x1[i],2)+a1[3]*pow(x1[i],3);}
for (i=0;i<n;i++)
{S+=pow(min_y[i]-y[i],2);S1+=pow(min_y1[i]-y1[i],2);}
cout<<"Длякоэффициентовнагрузки Beta=1"<<endl;f1<<" Длякоэффициентовнагрузки Beta=1"<<endl;
cout<<"Выводкоэффициентов A"<<endl;f1<<" Выводкоэффициентов A"<<endl;
for (i=0;i<N;i++)
{cout<<a[i]<<"\t";f1<<a[i]<<"\t";}
cout<<endl;f1<<endl;
for (i=0;i<n1;i++)
{cout<<"При напряжении "<<s[i]<<" тока ротора составляет "<<otv[i]<<endl;f1<<" При напряжении "<<s[i]<<" тока ротора составляет "<<otv[i]<<endl;}
cout<<"Суммарная квадратичная ошибка:"<<S<<endl;f1<<" Суммарная квадратичная ошибка:"<<S<<endl;
cout<<"Средняя ошибка:"<<S/n<<endl;f1<<" Средняя ошибка:"<<S/n<<endl;
cout<<"Относительная ошибка:"<<pow(S,1./n)<<endl;f1<<" Относительная ошибка:"<<pow(S,1./n)<<endl;
kof_kor=Kof_kor(x,y,n);
cout<<"Коэффициенткорреляцииравен "<<kof_kor<<endl;f1<<"Коэффициенткорреляцииравен"<<kof_kor<<endl;
ind_kor=Ind_kor(a,x,y,n);
cout<<"Индекскорреляцииравен "<<ind_kor<<endl;f1<<"Индекскорреляцииравен"<<ind_kor<<endl;
cout<<"Узловые точки"<<endl;f1<<" Узловые точки "<<endl;
for (i=0;i<n;i++)
{
OTVET=a[0]+a[1]*x[i]+a[2]*pow(x[i],2)+a[3]*pow(x[i],3);
cout<<"X["<<i<<"]="<<x[i]<<"\t Y["<<i<<"]="<<y[i]<<"\t Y1["<<i<<"]="<<OTVET<<endl;
f1<<"X["<<i<<"]="<<x[i]<<"\t Y["<<i<<"]="<<y[i]<<"\t Y["<<i<<"]="<<OTVET<<endl; }
cout<<endl;f1<<endl;
cout<<"Длякоэффициентовнагрузки Beta=1.3"<<endl;f1<<"ДлякоэффициентовнагрузкиBeta=1.3"<<endl;
cout<<"Выводкоэффициента A"<<endl;f1<<"ВыводкоэффициентаA"<<endl;
for (i=0;i<N;i++)
{cout<<a1[i]<<"\t";f1<<a1[i]<<"\t";}
cout<<endl;f1<<endl;
for (i=0;i<n1;i++)
{cout<<"При напряжении "<<s[i]<<" ток ротора составляет"<<otv1[i]<<endl;f1<<" При напряжении "<<s[i]<<" ток ротора составляет "<<otv1[i]<<endl;}
cout<<"Суммарная квадратичная ошибка:"<<S1<<endl;f1<<" Суммарная квадратичная ошибка:"<<S1<<endl;
cout<<"Средняя ошибка:"<<S1/n<<endl;f1<<" Средняя ошибка:"<<S1/n<<endl;
cout<<"Относительная ошибка:"<<pow(S1,1./n)<<endl;f1<<" Относительная ошибка:"<<pow(S1,1./n)<<endl;
kof_kor=Kof_kor(x1,y1,n);
cout<<"Коэффициенткорреляцииравен "<<kof_kor<<endl;f1<<"Коэффициенткорреляцииравенí "<<kof_kor<<endl;
ind_kor=Ind_kor(a1,x1,y1,n);
cout<<"Индекскорреляцииравен "<<ind_kor<<endl;f1<<"Индекскорреляцииравен"<<ind_kor<<endl;
cout<<"Узловые точки"<<endl;f1<<" Узловые точки "<<endl;
for (i=0;i<n;i++)
{
OTVET=a[0]+a[1]*x1[i]+a[2]*pow(x1[i],2)+a[3]*pow(x1[i],3);
cout<<"X["<<i<<"]="<<x1[i]<<"\t Y["<<i<<"]="<<y1[i]<<"\t Y1["<<i<<"]="<<OTVET<<endl;
f1<<"X["<<i<<"]="<<x1[i]<<"\t Y["<<i<<"]="<<y1[i]<<"\t Y1["<<i<<"]="<<OTVET<<endl; }
return 0;
}