반응형
[라그랑지 함수 다항식의 해 구하기, MFC 구현_1차/2차/3차곡선]
라그랑지 곡선 그리기
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
|
#include <stdio.h>
void main()
{
int i,j;
double a=0,b=0,c=0,d=0,x[4],y[4];
double X=0,Y=0;
for(i=0; i<4; i++){
printf("X%d, Y%d 입력 : ",i,i);
scanf("%lf %lf", &x[i], &y[i]);
if(i==1){ // 1차 다항식
a=(y[0]-y[1])/(x[0]-x[1]);
b=(x[1]*y[0]-x[0]*y[1])/(x[1]-x[0]);
printf("다항식 P%d 출력\n",i); // 다항식 출력
printf("P%d(x) = ",i);
for(j=i; j>=0; j--){
if(j==1 && a!=0)
printf("%.1lfx",a);
else if(j==0 && b!=0){
if(b>0)
printf(" +%.1lf",b);
else
printf(" %.1lf",b);
}
}
printf("\n");
for(j=-5; j<5; j++){
// 점 확인.. 1차 다항식 점 좌표들 .. MFC 이용하여 그래프 그리기
X=j;
Y=a*X + b;
printf("(%.1lf ,%.1lf)\n",X,Y);
}
}
if(i==2){ // 2차 다항식
a=y[0]/((x[0]-x[1])*(x[0]-x[2])) +
y[1]/((x[1]-x[0])*(x[1]-x[2])) + y[2]/((x[2]-x[0])*(x[2]-x[1]));
b=(y[0]*(x[1]+x[2]))/((x[0]-x[1])*(x[0]-x[2])) +
(y[1]*(x[0]+x[2]))/((x[1]-x[0])*(x[1]-x[2])) +
(y[2]*(x[0]+x[1]))/((x[2]-x[0])*(x[2]-x[1]));
c=(y[0]*x[1]*x[2])/((x[0]-x[1])*(x[0]-x[2])) +
(y[1]*x[0]*x[2])/((x[1]-x[0])*(x[1]-x[2])) +
(y[2]*x[0]*x[1])/((x[2]-x[0])*(x[2]-x[1]));
printf("다항식 P%d 출력\n",i); // 다항식 출력
printf("P%d(x) = ",i);
for(j=i; j>=0; j--){
if(j==2 && a!=0)
printf("%.1lfx^2",a);
else if(j==1 && b!=0){
if(b>0)
printf(" +%.1lfx",b);
else
printf(" %.1lfx",b);
}
else if(j==0 && c!=0){
if(c>0)
printf(" +%.1lf",c);
else
printf(" %.1lf",c);
}
}
printf("\n");
for(j=-5; j<5; j++){
// 점 확인.. 2차 다항식 점 좌표들 .. MFC 이용하여 그래프 그리기
X=j;
Y=a*X*X + b*X + c;
printf("(%.1f ,%.1f)\n",X,Y);
}
}
if(i==3){ // 3차 다항식
a=y[0]/((x[0]-x[1])*(x[0]-x[2])*(x[0]-x[3])) +
y[1]/((x[1]-x[0])*(x[1]-x[2])*(x[1]-x[3])) +
y[2]/((x[2]-x[0])*(x[2]-x[1])*(x[2]-x[3])) +
y[3]/((x[3]-x[0])*(x[3]-x[1])*(x[3]-x[2]));
b=y[0]*(x[1]+x[2]+x[3])/((x[0]-x[1])*(x[0]-x[2])*(x[0]-x[3])) +
y[1]*(x[0]+x[2]+x[3])/((x[1]-x[0])*(x[1]-x[2])*(x[1]-x[3])) +
y[2]*(x[0]+x[1]+x[3])/((x[2]-x[0])*(x[2]-x[1])*(x[2]-x[3])) +
y[3]*(x[0]+x[1]+x[2])/((x[3]-x[0])*(x[3]-x[1])*(x[3]-x[2]));
c=y[0]*(x[1]*x[2]+(x[1]+x[2])*x[3])/((x[0]-x[1])*(x[0]-x[2])*(x[0]-x[3])) +
y[1]*(x[0]*x[2]+(x[0]+x[2])*x[3])/((x[1]-x[0])*(x[1]-x[2])*(x[1]-x[3])) +
y[2]*(x[0]*x[1]+(x[0]+x[1])*x[3])/((x[2]-x[0])*(x[2]-x[1])*(x[2]-x[3])) +
y[3]*(x[0]*x[1]+(x[0]+x[1])*x[2])/((x[3]-x[0])*(x[3]-x[1])*(x[3]-x[2]));
d=y[0]*x[1]*x[2]*x[3]/((x[0]-x[1])*(x[0]-x[2])*(x[0]-x[3])) +
y[1]*x[0]*x[2]*x[3]/((x[1]-x[0])*(x[1]-x[2])*(x[1]-x[3])) +
y[2]*x[0]*x[1]*x[3]/((x[2]-x[0])*(x[2]-x[1])*(x[2]-x[3])) +
y[3]*x[0]*x[1]*x[2]/((x[3]-x[0])*(x[3]-x[1])*(x[3]-x[2]));
printf("다항식 P%d 출력\n",i); // 다항식 출력
printf("P%d(x) = ",i);
for(j=i; j>=0; j--){
if(j==3 && a!=0)
printf("%.1lfx^3",a);
else if(j==2 && b!=0){
if(b>0)
printf(" +%.1lfx^2",b);
else
printf(" %.1lfx^2",b);
}
else if(j==1 && c!=0){
if(c>0)
printf(" +%.1lfx",c);
else
printf(" %.1lfx",c);
}
else if(j==0 && d!=0){
if(d>0)
printf(" +%.1lf",d);
else
printf(" %.1lf",d);
}
}
printf("\n");
for(j=-5; j<5; j++){
// 점 확인.. 3차 다항식 점 좌표들 .. MFC 이용하여 그래프 그리기
X=j;
Y=a*X*X*X - b*X*X + c*X - d;
printf("(%.1lf ,%.1lf)\n",X,Y);
}
}
}
}
|
cs |
MFC(MoveTo, LineTo)를 이용하한 그래프 그리기 (1차, 2차, 3차)
반응형
'학습공간 > 수치해석, 확률과통계, 이산수학' 카테고리의 다른 글
[C언어 수치해석] 2차 Simpson 방법과 3차 Simpson 방법 비교 (0) | 2019.11.28 |
---|---|
[C언어 수치해석] 직사각형 방법, 사다리꼴 방법, Simpson 방법 (수치적분) (0) | 2019.11.28 |
[C언어 수치해석] Pivoting 전략 (연립방정식의 해) (0) | 2019.11.28 |
[C언어 수치해석] Gauss Jordan 소거법 (연립방정식의 해) (0) | 2019.11.28 |
[C언어 수치해석] 이분법, Scant법, Newton법 (근사해 구하기) (0) | 2019.11.28 |