#include <stdio.h>
#include <math.h>
#define EPSILON 1e-5 // Adjusted to match the slide requirement
#define MAX_ITER 100
double f1(double x, double y) { return x * x + y * y - 4; }
double f2
(double x
, double y
) { return pow(x
, 4) + x
- y
* y
+ 1; }
double df1_dx(double x, double y) { return 2 * x; }
double df1_dy(double x, double y) { return 2 * y; }
double df2_dx(double x, double y) { return 4 * x * x * x + 1; }
double df2_dy(double x, double y) { return -2 * y; }
void solve(double x0, double y0) {
double x = x0, y = y0;
int iter = 0;
printf("\n--- Starting Guess: x=%.2f, y=%.2f ---\n", x0
, y0
);
while (iter <= MAX_ITER) {
double F1 = f1(x, y);
double F2 = f2(x, y);
// Print current iteration values
printf("%d\t%.10f\t%.10f\n", iter
, x
, y
);
// Check convergence based on slides
if (fabs(F1
) < EPSILON
&& fabs(F2
) < EPSILON
) { printf("Converged to solution.\n"); return;
}
double J11 = df1_dx(x, y);
double J12 = df1_dy(x, y);
double J21 = df2_dx(x, y);
double J22 = df2_dy(x, y);
double det = J11 * J22 - J12 * J21;
printf("Jacobian determinant too small. Method fails.\n"); return;
}
x += (-F1 * J22 + F2 * J12) / det;
y += (-J11 * F2 + J21 * F1) / det;
iter++;
}
printf("Did not converge.\n"); }
int main() {
// Define 3 sets of initial values as required
double initial_x[] = {1.0, -1.5, 0.5};
double initial_y[] = {1.0, 1.0, -1.5};
for (int i = 0; i < 3; i++) {
solve(initial_x[i], initial_y[i]);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEVQU0lMT04gMWUtNSAvLyBBZGp1c3RlZCB0byBtYXRjaCB0aGUgc2xpZGUgcmVxdWlyZW1lbnQKI2RlZmluZSBNQVhfSVRFUiAxMDAKCmRvdWJsZSBmMShkb3VibGUgeCwgZG91YmxlIHkpIHsgcmV0dXJuIHggKiB4ICsgeSAqIHkgLSA0OyB9CmRvdWJsZSBmMihkb3VibGUgeCwgZG91YmxlIHkpIHsgcmV0dXJuIHBvdyh4LCA0KSArIHggLSB5ICogeSArIDE7IH0KCmRvdWJsZSBkZjFfZHgoZG91YmxlIHgsIGRvdWJsZSB5KSB7IHJldHVybiAyICogeDsgfQpkb3VibGUgZGYxX2R5KGRvdWJsZSB4LCBkb3VibGUgeSkgeyByZXR1cm4gMiAqIHk7IH0KZG91YmxlIGRmMl9keChkb3VibGUgeCwgZG91YmxlIHkpIHsgcmV0dXJuIDQgKiB4ICogeCAqIHggKyAxOyB9CmRvdWJsZSBkZjJfZHkoZG91YmxlIHgsIGRvdWJsZSB5KSB7IHJldHVybiAtMiAqIHk7IH0KCnZvaWQgc29sdmUoZG91YmxlIHgwLCBkb3VibGUgeTApIHsKICAgIGRvdWJsZSB4ID0geDAsIHkgPSB5MDsKICAgIGludCBpdGVyID0gMDsKCiAgICBwcmludGYoIlxuLS0tIFN0YXJ0aW5nIEd1ZXNzOiB4PSUuMmYsIHk9JS4yZiAtLS1cbiIsIHgwLCB5MCk7CiAgICBwcmludGYoIkl0ZXJcdFhcdFx0WVxuIik7CgogICAgd2hpbGUgKGl0ZXIgPD0gTUFYX0lURVIpIHsKICAgICAgICBkb3VibGUgRjEgPSBmMSh4LCB5KTsKICAgICAgICBkb3VibGUgRjIgPSBmMih4LCB5KTsKCiAgICAgICAgLy8gUHJpbnQgY3VycmVudCBpdGVyYXRpb24gdmFsdWVzCiAgICAgICAgcHJpbnRmKCIlZFx0JS4xMGZcdCUuMTBmXG4iLCBpdGVyLCB4LCB5KTsKCiAgICAgICAgLy8gQ2hlY2sgY29udmVyZ2VuY2UgYmFzZWQgb24gc2xpZGVzCiAgICAgICAgaWYgKGZhYnMoRjEpIDwgRVBTSUxPTiAmJiBmYWJzKEYyKSA8IEVQU0lMT04pIHsKICAgICAgICAgICAgcHJpbnRmKCJDb252ZXJnZWQgdG8gc29sdXRpb24uXG4iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZG91YmxlIEoxMSA9IGRmMV9keCh4LCB5KTsKICAgICAgICBkb3VibGUgSjEyID0gZGYxX2R5KHgsIHkpOwogICAgICAgIGRvdWJsZSBKMjEgPSBkZjJfZHgoeCwgeSk7CiAgICAgICAgZG91YmxlIEoyMiA9IGRmMl9keSh4LCB5KTsKCiAgICAgICAgZG91YmxlIGRldCA9IEoxMSAqIEoyMiAtIEoxMiAqIEoyMTsKICAgICAgICBpZiAoZmFicyhkZXQpIDwgMWUtMTIpIHsKICAgICAgICAgICAgcHJpbnRmKCJKYWNvYmlhbiBkZXRlcm1pbmFudCB0b28gc21hbGwuIE1ldGhvZCBmYWlscy5cbiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB4ICs9ICgtRjEgKiBKMjIgKyBGMiAqIEoxMikgLyBkZXQ7CiAgICAgICAgeSArPSAoLUoxMSAqIEYyICsgSjIxICogRjEpIC8gZGV0OwogICAgICAgIGl0ZXIrKzsKICAgIH0KICAgIHByaW50ZigiRGlkIG5vdCBjb252ZXJnZS5cbiIpOwp9CgppbnQgbWFpbigpIHsKICAgIC8vIERlZmluZSAzIHNldHMgb2YgaW5pdGlhbCB2YWx1ZXMgYXMgcmVxdWlyZWQKICAgIGRvdWJsZSBpbml0aWFsX3hbXSA9IHsxLjAsIC0xLjUsIDAuNX07CiAgICBkb3VibGUgaW5pdGlhbF95W10gPSB7MS4wLCAxLjAsIC0xLjV9OwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgc29sdmUoaW5pdGlhbF94W2ldLCBpbml0aWFsX3lbaV0pOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==