본문 바로가기

학습공간/수치해석, 확률과통계, 이산수학

[C언어 수치해석] 라그랑지(Lagrange) 곡선 그리기 (MFC 활용)

반응형

[라그랑지 함수 다항식의 해 구하기, 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*+ 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*+ b*+ 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*- b*X*+ c*- d;
                printf("(%.1lf ,%.1lf)\n",X,Y);
            }
        }
        
    }
}
cs

MFC(MoveTo, LineTo)를 이용하한 그래프 그리기 (1차, 2차, 3차)

1차 방정식 그래프
2차 방정식 그래프
3차 방정식 그래프
OnPrint 메소드 X축 Y축을 MoveTo, LineTo 지정
1차, 2차, 3차 그래프 알고리즘

 

반응형