0 / 0 / 1
Регистрация: 24.04.2015
Сообщений: 4
1

Выбирая из предложенных графиков и полиномов построить приближенную функцию

04.05.2015, 13:49. Показов 519. Ответов 1
Метки нет (Все метки)

Довольно сложно получилось, но идея такая: выбирая из предложенных графиков и полиномов построить приближенную функцию
подозрения что ошибка в высчитывании интеграла (здесь метод трапеции)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// ApproxLagrChebFurLagger.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
//#include <stdlib.h>
//#include <iostream>
//using namespace std;
 
 const int n = 6;//points q-ty
 
 
void Lezhandr(double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=x;
for(k=1; k<st; k++)
   {
       P[k+1]=((2*k+1)*x*P[k]-k*P[k-1])/(k+1);
      //printf("LegendreP(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
void Lagger(double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=1-x;
for(k=1; k<st; k++)
   {
       P[k+1]=((2*k+1-x)*P[k]-k*P[k-1])/(k+1);
       printf("LaguerreL(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
void ChebI(double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=x;
for(k=1; k<st; k++)
   {
       P[k+1]=2*x*P[k]-P[k-1];
       printf("ChebyshevT(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
void ChebII(double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=2*x;
for(k=1; k<st; k++)
   {
       P[k+1]=2*x*P[k]-P[k-1];
       printf("ChebyshevU(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
 
 
double funct(double x, int ss)
{
switch(ss)
{
case 1:                 x=fabs(x);break;
case 2:if (x>0)         x= 1;     break;
       if (x=0)         x= 0;     break;
       if (x<0)         x=-1;     break;
case 3:if (x>1)         x= 0;     break;
       if((x>-1)&&(x<1))x= 1;     break;   
       if (x<-1)        x= 0;     break;
default:printf("error\n") ;
}
return x;
}
 
double F(double x,int k,int s,int ss,int chzn){
double p,f,g[n];
switch(s)
{
case 1: p=1;             f=funct(x,ss); Lezhandr(x,g,k);break;
case 2: p=x*exp(-x);     f=funct(x,ss);   Lagger(x,g,k);break;
case 3: p=1/sqrt(1-x*x); f=funct(x,ss);    ChebI(x,g,k);break;
case 4: p=sqrt(1-x*x);   f=funct(x,ss);   ChebII(x,g,k);break;
case 5: printf("44444\n");break;
default:printf("error\n");return 0;
}
//printf("ffff  %f\n",g[k]);
if (chzn==1)return p*f*g[k];
 else    
    {if (chzn==0)return p*g[k]*g[k];
    else return g[k];}   
 
}
 
 
 
 double Tr(double a, int N, double b,int k,int s,int ss)//integral
{
  double sum=0,sumz=0;
double h=(b-a)/N;//длина отрезочка
 
  for(int i=1; i < N; i++)
{
    sum += F(a+i*h,k,s,ss,1);
    sumz+= F(a+i*h,k,s,ss,0);
printf("ssss  %f\n",sum);}
 
  return (sum*2+F(a,k,s,ss,1)+F(b,k,s,ss,1))/(sumz*2+F(a,k,s,ss,0)+F(b,k,s,ss,0)) ;
} 
 
void main(){
 double P[n],g[n],A[n],Q,x=-1.1;
 
int i,a,b,N=50,s=1,ss=1;
//printf("choose polynom:\n\n1.Legendre\n2.Laguerre\n3.Chebisshev I\n4.Chebishev II\n");
//scanf("%d",&s);
//printf("choose function:\n\n1.Modul\n2.Signum\n3.Rectangle\n");
//scanf("%d",&ss);
 
 
//getch();
for(i=0;i<=20;i++)
{
x+=0.1;
Q=Tr(-1,N,1,5,s,ss)*F(x,5,s,ss,2);//нижн пред интегр-я , повышение точности интегр, верхний, степень полинома, какой полином, ф-я какая
printf("QQQQ %f  %f\n",Q,x);
}
 
//getch();
// Lezhandr(x,P,1);
// Lagger(x,P,3);
// ChebI(x,P,3);
// ChebII(x,P,3);
 
end:
        getch();
       }
Миниатюры
Выбирая из предложенных графиков и полиномов построить приближенную функцию   Выбирая из предложенных графиков и полиномов построить приближенную функцию  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2015, 13:49
Ответы с готовыми решениями:

Построить приближенную траекторию
Решал такие задачи давно сейчас уже не помню Условие задачи. взлет самолета происходит по...

Задать функцию или найти какую-то приближенную по определённым значениям
Мне нужно задать функцию, зависящую от углового праметра, но она мне дана только в виде...

Построить базу данных с использованием предложенных полей записей, заполнить записи и реализовать указанные запросы
tritik, ссылки на хостинги файлов запрещены. Картинки прикладываются во вложении. Текстовое задание...

Написать функцию для вычисления полиномов Лежандра
Всем доброго времени! Ниже дано задание (пунктуация и написание сохранено). По нему написал...

1
0 / 0 / 1
Регистрация: 24.04.2015
Сообщений: 4
13.05.2015, 21:47  [ТС] 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
// ApproxLagrChebFurLagger.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
//#include <stdlib.h>
//#include <iostream>
//using namespace std;
 
 //Q[m]=sum(a[k]*g[k](x) )
//a[k]= int(ro(x)*f(x)*g[k](x))/int(ro*g[k](x)^2)
 const int n = 6;//points q-ty
double pi=3.1415926535;
void Lezhandr(double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=x;
for(k=1; k<st; k++)
   {
       P[k+1]=((2*k+1)*x*P[k]-k*P[k-1])/(k+1.);
      //printf("LegendreP(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
void Lagger  (double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=1-x;
for(k=1; k<st; k++)
   {
       P[k+1]=((2*k+1.-x)*P[k]-k*P[k-1])/(k+1.);
      // printf("LaguerreL(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
void ChebI   (double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=x;
for(k=1; k<st; k++)
   {
       P[k+1]=2*x*P[k]-P[k-1];
      // printf("ChebyshevT(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
void ChebII  (double x,double P[],int st)
{
    int k;
    P[0]=1;
    P[1]=2*x;
for(k=1; k<st; k++)
   {
       P[k+1]=2*x*P[k]-P[k-1];
     //  printf("ChebyshevU(%d,%.1f)= %f  \n",k+1,x,P[k+1]);
   }
}
 
 
double funct(double x, int ss)
{
switch(ss)
{
case 1:                  x=fabs(x); break;
case 2:if (x> 0)        {x= 1.;     break;}
       if (x==0)        {x= 0.;     break;}
       if (x< 0)        {x=-1.;     break;}
case 3:if (x>=1)        {x= 0.;     break;}
       if((x>-1)&&(x<1)){x= 1.;     break;}   
       if (x<=-1)       {x= 0.;     break;}
//default:printf("error\n") ;
}
return x;
}
 
double F(double x,int k,int s,int ss,int chzn){
double p,f,g[n];
switch(s)
{
case 1: p=1;                  f=funct(x,ss); Lezhandr(x,g,k);break;
 
case 2: p=exp(pow(-1,x));            f=funct(-pow(-1,x),ss);   Lagger(-pow(-1,x),g,k);break;
                     
case 3: if((x>-1)&&(x<1))p=1./sqrt(1-x*x);
        else p=10.;            f=funct(x,ss);    ChebI(x,g,k);break;
        
case 4: p=sqrt(1-x*x);        f=funct(x,ss);   ChebII(x,g,k);break;
case 5: ;break;
default:printf("error\n");return 0;
}
//printf("ffff  %f\n",p);
switch(chzn)
{
case 1: return p*f*g[k];break;
 
case 0: return p*g[k]*g[k];break;
 
case 2: return g[k];break;
        
case 4: return funct(x,ss)*cos(k*x);break;
case 5: return funct(x,ss)*sin(k*x);break;
default:return funct(x,ss);
}
}
double Tr(double a, int N, double b,int k,int s,int ss,int chzn)//integral
{
  double sum=0;
double h=(b-a)/N;//длина отрезочка
 
  for(int i=1; i < N; i++)
{
    sum += F(a+i*h,k,s,ss,chzn);
    
//printf("ssss  %f\n",sum);
  }
 
  return (sum*2+F(a,k,s,ss,chzn)+F(b,k,s,ss,chzn))*h*0.5;
} 
 
 
 
void Furje(int ss)
{
double Q;
int i;
double xc=-pi-0.1;
     for(int k=0;k<64;k++)
     { xc+=0.1;  
Q=0;
 for(i=1;i<20;i++)
 { 
    Q +=(Tr(-pi,100,pi,i,5,ss,4)*cos(i*xc)/pi+Tr(-pi,100,pi,i,5,ss,5)*sin(i*xc)/pi);
   
 }
printf("QQQQ %f  %f\n",Tr(-pi,100,pi,i,5,ss,6)/pi*0.5+Q,xc);
 
}
}
 
void main(){
 double P[n],g[n],A[n],Q;
 
int i,a=-1,b=1,N=50,s,ss;
for(int j=0;j<10;j++){
end2:
    printf("choose polynom:\n\n1.Legendre\n2.Laguerre\n3.Chebisshev I\n4.Chebishev II\n5.Furje [-pi;pi]\n6.exit\n");
scanf("%d",&s);
if(s==6)goto end;
printf("choose function:\n\n1.Modul\n2.Signum\n3.Rectangle\n");
scanf("%d",&ss);
if(s==5)
{Furje(ss);goto end2;}
 
if(s==2){a=0.;b=49;}
 
    double xc=-1.05;
     for(int k=0;k<41;k++)
     { xc+=0.05;
    Q=0;
    for(i=0;i<5;i++)
    {
    Q+=Tr(a,N,b,i,s,ss,1)/Tr(a,N,b,i,s,ss,0)*F(xc,i,s,ss,2);//лево, точнинтегр, право, степень полинома, метод, ф-я
    
    }
    printf("QQQQ %f  %f\n",Q,xc);
     }
 
}
 
 
 
    
//getch();
// Lezhandr(x,P,1);
// Lagger(x,P,3);
// ChebI(x,P,3);
// ChebII(x,P,3);
 
end:
        getch();
 
       }
Добавлено через 1 минуту
Исправил - работает всё кроме Лаггера: у него ортогональность в положительной области, а надо [-1;1]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2015, 21:47
Помогаю со студенческими работами здесь

Реализовать функцию сложения двух полиномов разной степени
Здравствуйте, нужно реализовать функцию (с двумя аргументами) сложения двух полиномов разной...

По значению x и файлу из M полиномов сформировать новый файл из тех полиномов исходного файла ,чье значение в точке X больше нуля
Помогите пожалуйста решить задачу в паскале : Полином степени ,не большей Nmax представлен...

Как построить графики полиномов Лежандра при различных степенях и взять интеграл от полинома
Всем, здравствуйте. Начинаю осваивать Матлаб. У меня версия R2012b. Хотела построить графики...

Как построить множество графиков?
Добрый день! Пытался построить в одних координатных осях множество графиков. Связывают число...

Как построить эскизы графиков
Фоумчане, объясните пожалуйста как построить эскизы графиков подобных функций. (без использования...

Построить семейство графиков кривых
при различных значениях параметра a&gt;0. Cоставлять программу так, чтобы пределы и шаг изменения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru