#include <stdio.h>
#include <math.h>
void gauss3(double A[3][3], double b[3], double x[3]) {
for (int i = 0; i < 3; i++) {
// Normalize pivot row
double pivot = A[i][i];
for (int j = 0; j < 3; j++) A[i][j] /= pivot;
b[i] /= pivot;
// Eliminate other rows
for (int k = 0; k < 3; k++) {
if (k == i) continue;
double factor = A[k][i];
for (int j = 0; j < 3; j++) A[k][j] -= factor * A[i][j];
b[k] -= factor * b[i];
}
}
for (int i = 0; i < 3; i++) x[i] = b[i];
}
int main() {
double xval[8] = {0.15708, 0.23982, 0.37400, 0.57120, 0.82674, 1.04720, 1.23200, 1.43452};
double yval[8] = {0.98769, 0.97138, 0.93087, 0.84125, 0.67728, 0.50000, 0.33236, 0.13586};
double S2=0, S4=0, S6=0, S8=0;
double Sy=0, S2y=0, S4y=0;
for (int i = 0; i < 8; i++) {
double x2 = xval[i] * xval[i];
double x4 = x2 * x2;
double x6 = x4 * x2;
double x8 = x4 * x4;
S2 += x2;
S4 += x4;
S6 += x6;
S8 += x8;
Sy += yval[i];
S2y += x2 * yval[i];
S4y += x4 * yval[i];
}
double A[3][3] = {
{8, S2, S4},
{S2, S4, S6},
{S4, S6, S8}
};
double b[3] = {Sy, S2y, S4y};
double sol[3];
gauss3(A, b, sol);
printf("Model 2 coefficients:\n"); printf("b1 = %.6f\n", sol
[0]); printf("b2 = %.6f\n", sol
[1]); printf("b3 = %.6f\n", sol
[2]);
double E = 0;
for (int i = 0; i < 8; i++) {
double x2 = xval[i] * xval[i];
double x4 = x2 * x2;
double yhat = sol[0] + sol[1]*x2 + sol[2]*x4;
double diff = yval[i] - yhat;
E += diff * diff;
}
printf("Squared error E = %.10f\n", E
);
printf("\nModel 2 predicted values:\n"); for (int i = 0; i < 8; i++) {
double x2 = xval[i] * xval[i];
double x4 = x2 * x2;
double yhat = sol[0] + sol[1] * x2 + sol[2] * x4;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+Cgp2b2lkIGdhdXNzMyhkb3VibGUgQVszXVszXSwgZG91YmxlIGJbM10sIGRvdWJsZSB4WzNdKSB7CmZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci8vIE5vcm1hbGl6ZSBwaXZvdCByb3cKZG91YmxlIHBpdm90ID0gQVtpXVtpXTsKZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspIEFbaV1bal0gLz0gcGl2b3Q7CmJbaV0gLz0gcGl2b3Q7CgovLyBFbGltaW5hdGUgb3RoZXIgcm93cwpmb3IgKGludCBrID0gMDsgayA8IDM7IGsrKykgewppZiAoayA9PSBpKSBjb250aW51ZTsKZG91YmxlIGZhY3RvciA9IEFba11baV07CmZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKSBBW2tdW2pdIC09IGZhY3RvciAqIEFbaV1bal07CmJba10gLT0gZmFjdG9yICogYltpXTsKfQp9Cgpmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeFtpXSA9IGJbaV07Cn0KCmludCBtYWluKCkgewpkb3VibGUgeHZhbFs4XSA9IHswLjE1NzA4LCAwLjIzOTgyLCAwLjM3NDAwLCAwLjU3MTIwLCAwLjgyNjc0LCAxLjA0NzIwLCAxLjIzMjAwLCAxLjQzNDUyfTsKZG91YmxlIHl2YWxbOF0gPSB7MC45ODc2OSwgMC45NzEzOCwgMC45MzA4NywgMC44NDEyNSwgMC42NzcyOCwgMC41MDAwMCwgMC4zMzIzNiwgMC4xMzU4Nn07Cgpkb3VibGUgUzI9MCwgUzQ9MCwgUzY9MCwgUzg9MDsKZG91YmxlIFN5PTAsIFMyeT0wLCBTNHk9MDsKCmZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CmRvdWJsZSB4MiA9IHh2YWxbaV0gKiB4dmFsW2ldOwpkb3VibGUgeDQgPSB4MiAqIHgyOwpkb3VibGUgeDYgPSB4NCAqIHgyOwpkb3VibGUgeDggPSB4NCAqIHg0OwoKUzIgKz0geDI7ClM0ICs9IHg0OwpTNiArPSB4NjsKUzggKz0geDg7CgpTeSArPSB5dmFsW2ldOwpTMnkgKz0geDIgKiB5dmFsW2ldOwpTNHkgKz0geDQgKiB5dmFsW2ldOwp9Cgpkb3VibGUgQVszXVszXSA9IHsKezgsIFMyLCBTNH0sCntTMiwgUzQsIFM2fSwKe1M0LCBTNiwgUzh9Cn07Cgpkb3VibGUgYlszXSA9IHtTeSwgUzJ5LCBTNHl9Owpkb3VibGUgc29sWzNdOwoKZ2F1c3MzKEEsIGIsIHNvbCk7CgpwcmludGYoIk1vZGVsIDIgY29lZmZpY2llbnRzOlxuIik7CnByaW50ZigiYjEgPSAlLjZmXG4iLCBzb2xbMF0pOwpwcmludGYoImIyID0gJS42ZlxuIiwgc29sWzFdKTsKcHJpbnRmKCJiMyA9ICUuNmZcbiIsIHNvbFsyXSk7Cgpkb3VibGUgRSA9IDA7CmZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CmRvdWJsZSB4MiA9IHh2YWxbaV0gKiB4dmFsW2ldOwpkb3VibGUgeDQgPSB4MiAqIHgyOwpkb3VibGUgeWhhdCA9IHNvbFswXSArIHNvbFsxXSp4MiArIHNvbFsyXSp4NDsKZG91YmxlIGRpZmYgPSB5dmFsW2ldIC0geWhhdDsKRSArPSBkaWZmICogZGlmZjsKfQoKcHJpbnRmKCJTcXVhcmVkIGVycm9yIEUgPSAlLjEwZlxuIiwgRSk7CgpwcmludGYoIlxuTW9kZWwgMiBwcmVkaWN0ZWQgdmFsdWVzOlxuIik7CmZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CmRvdWJsZSB4MiA9IHh2YWxbaV0gKiB4dmFsW2ldOwpkb3VibGUgeDQgPSB4MiAqIHgyOwpkb3VibGUgeWhhdCA9IHNvbFswXSArIHNvbFsxXSAqIHgyICsgc29sWzJdICogeDQ7CnByaW50ZigiJWZcbiIsIHloYXQpOwp9CgpyZXR1cm4gMDsKfQo=