@@ -129,30 +129,30 @@ module test_linalg_solve
129
129
end subroutine test_${ri}$_solve
130
130
131
131
!> 2x2 Complex linear system
132
- !> https://math.stackexchange.com/questions/1996540/solving-linear-equation-systems-with-complex-coefficients-and-variables
133
132
subroutine test_2x2_${ri}$_solve(error)
134
133
type(error_type), allocatable, intent(out) :: error
135
134
136
135
type(linalg_state_type) :: state
136
+
137
+ ${rt}$, parameter :: i = (0.0_${rk}$,1.0_${rk}$)
137
138
138
139
${rt}$ :: A(2,2), b(2), res(2), x(2)
139
- integer(ilp) :: i
140
140
141
141
! Fill in linear system
142
- A(1,:) = [(+1.0_${rk}$,+1.0_${rk}$),(-1.0_${rk}$,0.0_${rk}$) ]
143
- A(2,:) = [(+1.0_${rk}$,-1.0_${rk}$),(+1.0_${rk}$,1.0_${rk}$) ]
142
+ A(1,:) = [ 1+2*i, 2-i ]
143
+ A(2,:) = [ 2+i , i ]
144
144
145
- b = [(0.0_${rk}$,1.0_${rk}$),(1.0_${rk}$,0.0_${rk}$) ]
145
+ b = [1,-1 ]
146
146
147
147
! Exact result
148
- res = [(0.5_ ${rk}$,0.5_ ${rk}$),(0.0_ ${rk}$,0.0_ ${rk}$)]
148
+ res = [(-0.28_ ${rk}$,-0.04_ ${rk}$),(0.36_ ${rk}$,0.48_ ${rk}$)]
149
149
150
150
x = solve(a,b,err=state)
151
-
151
+
152
152
call check(error,state%ok(),state%print())
153
153
if (allocated(error)) return
154
154
155
- call check(error, all(abs(x-res)<max(tiny(0.0_${rk}$), abs(res)*epsilon(0.0_${rk}$))), 'results match expected')
155
+ call check(error, all(abs(x-res)<abs(res)*sqrt( epsilon(0.0_${rk}$))), 'results match expected')
156
156
if (allocated(error)) return
157
157
158
158
0 commit comments