-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJacobian.c
53 lines (43 loc) · 1.11 KB
/
Jacobian.c
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
/* In this example we are solving
3x + 20y - z = -18
2x - 3y + 20z = 25
20x + y - 2z = 17
*/
/* Equations:
x = (17-y+2z)/20
y = (-18-3x+z)/20
z = (25-2x+3y)/20
*/
#define f1(x, y, z) (17 - y + 2 * z) / 20
#define f2(x, y, z) (-18 - 3 * x + z) / 20
#define f3(x, y, z) (25 - 2 * x + 3 * y) / 20
int main()
{
float x0 = 0, y0 = 0, z0 = 0, x1, y1, z1, e1, e2, e3, e;
int count = 1;
printf("Enter tolerable error:\n");
scanf("%f", &e);
printf("\nCount\tx\ty\tz\n");
do
{
x1 = f1(x0, y0, z0);
y1 = f2(x0, y0, z0);
z1 = f3(x0, y0, z0);
printf("%d\t%0.4f\t%0.4f\t%0.4f\n", count, x1, y1, z1);
/* Error */
e1 = fabs(x0 - x1);
e2 = fabs(y0 - y1);
e3 = fabs(z0 - z1);
count++;
/* Set value for next iteration */
x0 = x1;
y0 = y1;
z0 = z1;
} while (e1 > e && e2 > e && e3 > e);
printf("\nSolution: x=%0.3f, y=%0.3f and z = %0.3f\n", x1, y1, z1);
getch();
return 0;
}