#include <stdio.h>
#include <math.h>
int main() {
// 与えられたデータセット (8組)
double x[8] = {0.15708, 0.23982, 0.37400, 0.57120, 0.82674, 1.04720, 1.23200, 1.43452};
double y[8] = {0.98769, 0.97138, 0.93087, 0.84125, 0.67728, 0.50000, 0.33236, 0.13586};
double Sx2 = 0, Sx4 = 0, Sy = 0, Sx2y = 0;
// 正規方程式に必要な各合計値の計算
for (int i = 0; i < 8; i++) {
double x2 = x[i] * x[i];
Sx2 += x2;
Sx4 += x2 * x2;
Sy += y[i];
Sx2y += x2 * y[i];
}
// 正規方程式の行列要素設定
double A11 = 8, A12 = Sx2;
double A21 = Sx2, A22 = Sx4;
double B1 = Sy, B2 = Sx2y;
// 2元連立方程式を解く (クラメルの公式 / 行列式デタミナント)
double det = A11 * A22 - A12 * A21;
double a1 = (B1 * A22 - A12 * B2) / det;
double a2 = (A11 * B2 - B1 * A21) / det;
// 結果の出力
printf("=========================================\n"); printf("モデル (1): y = a1 + a2*x^2 計算結果\n"); printf("=========================================\n");
// 残差平方和 (誤差の2乗和 E) の計算
double E = 0;
for (int i = 0; i < 8; i++) {
double yhat = a1 + a2 * x[i] * x[i];
double diff = y[i] - yhat;
E += diff * diff;
}
printf("\n近似式による偏差の2乗和 (誤差 E):\n");
// Excelプロット用の予測値出力 (yhatのみ)
printf("\n近似式による y の予測値 (Excelグラフ作成用):\n"); for (int i = 0; i < 8; i++) {
double yhat = a1 + a2 * x[i] * x[i];
}
printf("=========================================\n");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgppbnQgbWFpbigpIHsKICAgIC8vIOS4juOBiOOCieOCjOOBn+ODh+ODvOOCv+OCu+ODg+ODiCAoOOe1hCkKICAgIGRvdWJsZSB4WzhdID0gezAuMTU3MDgsIDAuMjM5ODIsIDAuMzc0MDAsIDAuNTcxMjAsIDAuODI2NzQsIDEuMDQ3MjAsIDEuMjMyMDAsIDEuNDM0NTJ9OwogICAgZG91YmxlIHlbOF0gPSB7MC45ODc2OSwgMC45NzEzOCwgMC45MzA4NywgMC44NDEyNSwgMC42NzcyOCwgMC41MDAwMCwgMC4zMzIzNiwgMC4xMzU4Nn07CgogICAgZG91YmxlIFN4MiA9IDAsIFN4NCA9IDAsIFN5ID0gMCwgU3gyeSA9IDA7CgogICAgLy8g5q2j6KaP5pa556iL5byP44Gr5b+F6KaB44Gq5ZCE5ZCI6KiI5YCk44Gu6KiI566XCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICAgIGRvdWJsZSB4MiA9IHhbaV0gKiB4W2ldOwogICAgICAgIFN4MiArPSB4MjsKICAgICAgICBTeDQgKz0geDIgKiB4MjsKICAgICAgICBTeSArPSB5W2ldOwogICAgICAgIFN4MnkgKz0geDIgKiB5W2ldOwogICAgfQoKICAgIC8vIOato+imj+aWueeoi+W8j+OBruihjOWIl+imgee0oOioreWumgogICAgZG91YmxlIEExMSA9IDgsICAgICBBMTIgPSBTeDI7CiAgICBkb3VibGUgQTIxID0gU3gyLCAgIEEyMiA9IFN4NDsKCiAgICBkb3VibGUgQjEgPSBTeSwgICAgIEIyID0gU3gyeTsKCiAgICAvLyAy5YWD6YCj56uL5pa556iL5byP44KS6Kej44GPICjjgq/jg6njg6Hjg6vjga7lhazlvI8gLyDooYzliJflvI/jg4fjgr/jg5/jg4rjg7Pjg4gpCiAgICBkb3VibGUgZGV0ID0gQTExICogQTIyIC0gQTEyICogQTIxOwogICAgZG91YmxlIGExID0gKEIxICogQTIyIC0gQTEyICogQjIpIC8gZGV0OwogICAgZG91YmxlIGEyID0gKEExMSAqIEIyIC0gQjEgKiBBMjEpIC8gZGV0OwoKICAgIC8vIOe1kOaenOOBruWHuuWKmwogICAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAgICBwcmludGYoIuODouODh+ODqyAoMSk6IHkgPSBhMSArIGEyKnheMiDoqIjnrpfntZDmnpxcbiIpOwogICAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAgICBwcmludGYoIuaxguOCgeOCieOCjOOBn+S/guaVsDpcbiIpOwogICAgcHJpbnRmKCIgIGExID0gJS42ZlxuIiwgYTEpOwogICAgcHJpbnRmKCIgIGEyID0gJS42ZlxuIiwgYTIpOwoKICAgIC8vIOaui+W3ruW5s+aWueWSjCAo6Kqk5beu44GuMuS5l+WSjCBFKSDjga7oqIjnrpcKICAgIGRvdWJsZSBFID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAgICAgZG91YmxlIHloYXQgPSBhMSArIGEyICogeFtpXSAqIHhbaV07CiAgICAgICAgZG91YmxlIGRpZmYgPSB5W2ldIC0geWhhdDsKICAgICAgICBFICs9IGRpZmYgKiBkaWZmOwogICAgfQoKICAgIHByaW50ZigiXG7ov5HkvLzlvI/jgavjgojjgovlgY/lt67jga4y5LmX5ZKMICjoqqTlt64gRSk6XG4iKTsKICAgIHByaW50ZigiICBFID0gJS4xMGZcbiIsIEUpOwoKICAgIC8vIEV4Y2Vs44OX44Ot44OD44OI55So44Gu5LqI5ris5YCk5Ye65YqbICh5aGF044Gu44G/KQogICAgcHJpbnRmKCJcbui/keS8vOW8j+OBq+OCiOOCiyB5IOOBruS6iOa4rOWApCAoRXhjZWzjgrDjg6njg5XkvZzmiJDnlKgpOlxuIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICAgIGRvdWJsZSB5aGF0ID0gYTEgKyBhMiAqIHhbaV0gKiB4W2ldOwogICAgICAgIHByaW50ZigiJWZcbiIsIHloYXQpOwogICAgfQogICAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CgogICAgcmV0dXJuIDA7Cn0=