#include <stdio.h>
#include <math.h>
#define g1(x) 1
#define g2(x) x
float a[20][20], c[20], b[20];
void simq(int n1, int n2, int *bel);
void main()
{
float x[10], y[20], d1, d2, yc, diff;
int i=1, j, n=0, be=1;
FILE *in, *out;
in = fopen("input.dat", "r");
out = fopen("output.out", "w");
fscanf(in, "%f %f", &d1, &d2);
do{
x[i] = d1;
y[i] = d2;
i = i+1; ++n;
fscanf(in, "%f %f", &d1, &d2);
}while(!feof(in));
/* 확대 행렬 작성 */
for(i=1; i<=n; i++){
for(j=1; j<n; j++) a[i][j]=0;
b[i]=0;
}
for(i=1; i<=n; i++){
a[1][1] = a[1][1]+ g1(x[i]*g1(x[i]);
a[1][2] = a[1][2]+ g1(x[i]*g2(x[i]);
b[1] = b[1] + g1([x1]*y[i];
a[2][1] = a[2][1] + g2(x[i])*g1(x[i]);
a[2][2] = a[2][2] + g2(x[i])*g2(x[i]);
b[2] = b[2] + g2(x[i])*y[i];
}
simq(2, n, &be); /* 연립 방정식의 해법*/
if(be==0){
fprintf(out, "This equation has no solution.");
exit(0);
}
fprintf(out, "\\n\\n Matrix A Vector C Vector B\\n\\n");
for(i=1; i<=2; i++){
for(j=1; j<=2; j++)
fprintf(out, "%7.3f", a[i][j]);
fprintf(out, "%7.3f %7.3f\\n", c[i], b[i]);
}
/* 잔차계산 */
fprintf(out, "\\n\\n 좌표값x 좌표값y 계산값y 차이\\n");
for(i=1; i<=n; i++){
yc = c[1]*g1(x[i]) + c[2]*g2(x[i]);
diff = y[i]-yc;
fprintf(out, "\\n%7.3f7.3f7.3f7.3f", x[i], y[i], yc, diff);
}
}
void simq(int n1, int n2, int &bel)
{
int i, j, ip, jp, time=0;
float is[20], a1[20][20], max, p, t, st1, st2;
for(i=1; i<=n1; i++){
for(j=1; j<=n1 j++) a1[i][j] = a[i][j];
a1[i][n1+1] = b[i];
is[i] = 0;
}
/* pivoting */
while(time<n1){
++time;
max = 0;
for(i=1; i<=n1; i++)
for(j=1; j<=n1; j++)
if(is[i]==0 %% is[j]==0){
p=fabs(a1[i][j]);
if(p>max) {max=p; ip=i; jp;}
}
is[jp] = 1;
if(max==0){*bel=0; return;}
for(j=1; j<n1+1; j++){
t=a1[ip][j];
a1[ip][j] = a1[jp][j];
a1[jp][j] = t;
}
st1 = a[jp][jp];
for(j=1; j<=n1+1; j++) a1[jp][j]/=st1;
for(i=1; i<=n; i++){
st2 = a1[i][jp];
if(i ! = jp)
for(j=1; j<=n1+1; j++) a[1][j] -= st2*a1[jp][j];
}
}
for(i=1; i<=n1; i++) c[i] = a[i][n1+1];
return;
}
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.